V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cwbsw
V2EX  ›  宽带症候群

策略路由如何处理本机流量?

  •  
  •   cwbsw · 2018-07-06 20:57:03 +08:00 · 397 次点击
    这是一个创建于 2092 天前的主题,其中的信息可能已经有所发展或是发生改变。
    iptables -t mangle -A OUTPUT -m set --match-set vpn dst -j MARK --set-mark 0x88
    iptables -t mangle -A PREROUTING -m set --match-set vpn dst -j MARK --set-mark 0x88
    ip route add default dev vpn table 88
    ip rule fwmark 0x88 lookup 88
    

    一直以来都是用如上方式在路由器上部署 vpn 科学上网,本机产生的流量也都能正确分流。 今天突然想到这样做了两次 NAT,于是在路由器上去掉了 vpn 接口的 NAT 规则,然后在 vps 上配置到 lan 侧的路由后,在 lan 上的设备就能正常通过 vpn 访问外网了,但是路由器本身的流量却出现了异常,在 vpn 接口上能看到发包,但是源地址却是 pppoe-wan 的,这样自然回程就不通了。但是

    ip rule to 8.8.8.8 lookup 88

    或者

    ip route add 8.8.8.8 dev vpn

    又都能让本机到 8.8.8.8 的流量正常走 vpn 接口。

    所以这个的原理是什么?该如何让本机流量根据 MARK 分流呢?

    3 条回复    2018-07-07 20:18:53 +08:00
    LGA1150
        1
    LGA1150  
       2018-07-07 03:05:18 +08:00 via Android
    ip route add default dev vpn table 88 src <vpn 接口地址>
    cwbsw
        2
    cwbsw  
    OP
       2018-07-07 09:43:46 +08:00
    @LGA1150
    这样还是不行啊,奇怪的是 ip rule to 8.8.8.8 lookup 88 就能行得通,有 MARK 的包也确实是从 vpn 接口发出去了。
    cwbsw
        3
    cwbsw  
    OP
       2018-07-07 20:18:53 +08:00
    似乎 Linux 协议栈选择路由决定源地址是在 OUTPUT 链之前,查询的是默认路由表,所以要改变本机流量的源地址只能做 NAT。
    https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5317 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:16 · PVG 15:16 · LAX 00:16 · JFK 03:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.