将标记的数据包重定向到 Tun 设备

将标记的数据包重定向到 Tun 设备

我有一个小程序,需要根据各种 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 地址(通常采用点分四部分表示法)。

相关内容