Linux Iptables netfilter数据包与策略路由
我对路由/iptables管道中的事件顺序有疑问。我首先解释我的设置。问题在这篇文章的末尾 我在Linux 4.4上使用策略路由和iptables 我有两个接口:wan0(指向我的ISP)和vpn加密(指向vpn提供商的tun设备) 我想有选择地将一些流量路由到vpn,其他一切都通过wan0 我实现策略路由如下:Linux Iptables netfilter数据包与策略路由,linux,networking,iptables,netfilter,iproute,Linux,Networking,Iptables,Netfilter,Iproute,我对路由/iptables管道中的事件顺序有疑问。我首先解释我的设置。问题在这篇文章的末尾 我在Linux 4.4上使用策略路由和iptables 我有两个接口:wan0(指向我的ISP)和vpn加密(指向vpn提供商的tun设备) 我想有选择地将一些流量路由到vpn,其他一切都通过wan0 我实现策略路由如下: 在mangle输出表中,我为新流量设置了一个标记0xC 匹配一些模式。出于测试目的,我标记指向的流量 特定IP地址(37.9.239.33)。当然,我还有其他iptables的东西,
- 在mangle输出表中,我为新流量设置了一个标记0xC
匹配一些模式。出于测试目的,我标记指向的流量
特定IP地址(37.9.239.33)。当然,我还有其他iptables的东西,比如MASQUEARADE,但这与这个问题无关
我有一个iproute2规则,它将所有“标记”的数据包发送到
vpn:
vpn表仅包含一条规则,并通过vpn发送所有内容:0:从所有本地查找 190:从所有fwmark 0x4/0x4查找vpn 400:从所有fwmark 0x8/0x8 oif wan0无法访问 32766:从所有查找主目录 32767:从所有查找默认值
默认通过10.33.0.1 dev vpn加密原型src 10.33.148.125
ping-c337.9.239.33
进行测试,其中37.9.239.33是标记为vpn的IP地址。连接到wan0和vpn crypto的两个tcpdump会话表明,数据包有效地通过vpn crypto传出和返回,正如预期的那样!到目前为止一切正常
然而,当记录数据包在iptables中流动时,我观察到了一个我不理解的奇怪行为:我在FILTER.OUTPUT表和MANGLE.POSTROUTING表中插入日志跟踪
我观察到这一系列事件:
FILTER.OUTPUT:IN=OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=26960 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=1 MARK=0xc
MANGLE.POSTROUTING:IN=OUT=vpn加密SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=26960 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=1 MARK=0xc
MANGLE.POSTROUTING:IN=OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27049 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2
FILTER.OUTPUT:IN=OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27100 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2 MARK=0xc
MANGLE.POSTROUTING:IN=OUT=vpn加密SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27100 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2 MARK=0xc
MANGLE.POSTROUTING:IN=OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27193 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3
FILTER.OUTPUT:IN=OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27237 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3 MARK=0xc
MANGLE.POSTROUTING:IN=OUT=vpn加密SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27237 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3 MARK=0xc
- ,, 第6章表6-2说明了在filter.output之前发生的重路由决策
- ,表示重新路由决定在filter.output之后发生
据我所知,绿色的
OUTPUT
链说明了mangle
表位于filter
表之前。是的,我同意mangle.OUTPUT先于filter。我的第一个问题是,重新路由决定是在filter.output之前还是之后发生的?我一直在搜索整个互联网,我也找不到你问题的答案。我非常有兴趣了解在过滤器的输出链之后是否会发生任何路由决策。据我所知,绿色的Output
链将mangle
表说明为Filter
表之前。是的,我同意mangle.Output先于Filter。我的第一个问题是,重新路由决定是在filter.output之前还是之后发生的?我一直在搜索整个互联网,我也找不到你问题的答案。我非常有兴趣了解在过滤器的输出链之后是否发生任何路由决策。