我有一个小程序,需要根据各种 iptable 规则对选定的数据包执行各种操作。数据包的处理MARK
方式如下:
iptables -t mangle -d 10.10.0.0/16 -j MARK --set-mark 4
iptables -t mangle -d 10.11.0.0/24 -j MARK --set-mark 5
iptables -t mangle -d 10.0.0.1 -j MARK --set-mark 1
我还有一个名为 Tun 的设备maintun
,用户空间进程正在对其执行一些 I/O。
我该如何确保受影响的数据包被发送到/通过maintun
?
答案1
你用策略路由。
首先你标记一些数据包,
iptables -A PREROUTING -t mangle -d 10.0.0.1 -j MARK --set-mark 1
然后创建一个新的路由表,称之为隧道路由表:
echo 201 TunRoutTable >> /etc/iproute2/rt_tables
然后你告诉你的电脑使用表TunRoutTable来处理标记的数据包1:
ip rule add fwmark 1 table TunRoutTable
现在您为新的路由表提供默认网关:
ip route add default via XXX.YYY.WWW.ZZZ dev tun0 table TunRoutTable
其中 XXX.YY.WWW.ZZZ 是 Tun0 接口上网关的 IP 地址(通常采用点分四部分表示法)。