转发数据包的路由与传出数据包的路由不同

转发数据包的路由与传出数据包的路由不同

我正在使用 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

相关内容