You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Web应用的进出流量通过eth0而非tun0(VPN)路由?

如何让Web应用的进出流量通过eth0而非tun0(VPN)路由?

嗨,这个场景我碰到过好多次了,其实有几种实用的方法可以实现,你可以根据自己的需求选:

方法一:基于用户的路由隔离(适合以特定用户运行的Web应用)

如果你的Web应用是用单独的系统用户(比如www-data)运行的,这种方法最省心:

  1. 先确认eth0的网关信息,执行命令:

    ip route show dev eth0
    

    你会看到类似default via 192.168.1.1 dev eth0和192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100的输出,记下来网关(比如192.168.1.1)和子网段(比如192.168.1.0/24)。

  2. 添加自定义路由表:
    编辑/etc/iproute2/rt_tables文件,在末尾加一行:

    100 webapp-route
    

    这里100是路由表的编号,webapp-route是自定义的表名,随便取好记的就行。

  3. 往自定义路由表里添加规则:

    # 添加本地子网路由
    ip route add 192.168.1.0/24 dev eth0 table webapp-route
    # 添加默认网关(用你刚才记下的eth0网关)
    ip route add default via 192.168.1.1 dev eth0 table webapp-route
    
  4. 让Web应用用户的流量走这个路由表:
    先查Web应用运行用户的UID,比如www-data的话:

    id www-data
    

    输出里会有uid=33(www-data),然后执行:

    ip rule add uidrange 33-33 table webapp-route
    

    这样所有www-data用户发起的流量都会走eth0,绕开VPN的tun0。

方法二:基于端口的路由隔离(适合固定端口的Web应用)

如果你的Web应用监听固定端口(比如8080),可以用流量标记的方式实现:

  1. 重复方法一的步骤1-3,先创建好自定义路由表和路由规则。

  2. 标记Web应用的出站流量:

    iptables -t mangle -A OUTPUT -p tcp --sport 8080 -j MARK --set-mark 1
    
  3. 标记Web应用的入站流量(确保返回的流量也走eth0):

    iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j MARK --set-mark 1
    
  4. 让标记为1的流量走自定义路由表:

    ip rule add fwmark 1 table webapp-route
    

注意事项

  • 以上命令都是临时生效的,重启系统后会失效。如果要持久化,可以把这些命令加到/etc/rc.local(记得给文件加执行权限),或者写一个systemd服务来执行。
  • 如果你的VPN客户端会自动修改默认路由,可能需要调整VPN的配置,比如禁止它设置默认路由,或者在VPN启动后再执行上述路由规则。

备注:内容来源于stack exchange,提问作者bcsta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:10:31