iptables 设置标记不起作用

iptables 设置标记不起作用

我的机器有两个网络接口,一个是有线(eth0),另一个是无线(wlan0)。有线接口无法连接到任何外部 NTP 服务器,因为外面有防火墙。无线接口没有这样的限制。

因此,我想将所有 NTP 流量路由到 wlan0。据我所知,NTP 流量通过 UDP 123 端口。我所做的工作如下所述。

$ sudo echo "201 ntp.out" >> /etc/iproute2/rt_tables
$ sudo ip route add default via 100.75.0.1 dev wlan0 table ntp.out

$ sudo sysctl -w net.ipv4.tcp_fwmark_accept=1
$ sudo iptables -t mangle -I PREROUTING -p udp --dport 123 -j MARK --set-mark 0xfefa
$ sudo iptables -t mangle -I OUTPUT -p udp --sport 123 -j MARK --set-mark 0xfefa
$ sudo ip rule add fwmark 0xfefa lookup ntp.out

但是不管用,我用Wireshark跟踪UDP:123的数据包,发现数据包中没有''fefa''的标记。

顺便说一句,我设置了 net.ipv4.tcp_fwmark_accept 而不是 net.ipv4.udp_fwmark_accept,因为没有定义 net.ipv4.udp_fwmark_accept。我也尝试标记 TCP 数据包,但仍然无法在这些数据包中找到标记。

有人能帮我解决这个问题吗?我正在使用 Ubuntu 14.04 LTS。

答案1

我认为我发现了错误。不是源端口123而是目标端口

改变

 sudo iptables -t mangle -I OUTPUT -p udp --sport 123 -j MARK --set-mark 0xfefa

 sudo iptables -t mangle -I OUTPUT -p udp --dport 123 -j MARK --set-mark 0xfefa

还从主表中复制除默认网关条目之外的所有条目

 sudo ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table ntp.out $ROUTE; done

相关内容