我正在使用 iptables 转发来自特定源的 SRCNAT(特别是 MASQUERADE)数据包。我想以不同于转发的数据包(不同的默认路由)的方式路由传出数据包(由这台计算机发起)。我该怎么做呢?
答案1
一种方法是在 iptables 中标记流量,并使用策略路由匹配出站路由:
假设你有网关1和网关2在同一个局域网...
ip route flush table 3
ip route add table 3 <lan net>
ip route add default via <gateway1>
ip route flush table 4
ip route add table 4 <lan net>
ip route add default via <gateway2>
在 iptables 中标记流量:
iptables -t mangle -A PREROUTING -s 10.0.0.0/24 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -s 10.1.0.0/24 -j MARK --set-mark 4
您可以匹配任何您喜欢的内容,源地址、目标地址或端口等......
由于您在 iptables 中显式重写源 IP,而不是依赖动态网关 IP,因此您可能希望使用 SNAT 而不是 MASQUERADE。看SNAT 和 MASQUERADE 之间的区别
答案2
编辑 /etc/sysctl.conf 并添加/编辑“net.ipv4.ip_forward”选项。
net.ipv4.ip_forward=1
对于立即更改,请运行:
sysctl net.ipv4.ip_forward=1
iptables规则:
iptables -A FORWARD -i input_dev -j ACCEPT
iptables -t nat -A POSTROUTING -o output_dev --src src_ip -j MASQUERADE