我有两个接口 eth0 和 eth1
我的应用程序在 eth1 上运行
eth0(10.43.16.249) 上的传入数据包将使用以下命令预路由到 eth1(10.43.18.110)
iptables -t nat -p udp -A PREROUTING -d 10.43.16.249 -j DNAT --to-destination 10.43.18.110
传入数据包
10:34:06.373083 IP 10.43.18.124.67 > 10.43.16.249.67: BOOTP/DHCP, Request from 00:a0:bc:00:00:02, length 259
奇怪的是,我的应用程序的响应被视为以 eth0(10.43.16.249) 的源 IP 发出,因此响应数据包无法到达客户端 IP(10.43.18.124),因为没有通过 eth0 到客户端的路由。
传出数据包
10:34:06.375043 IP 10.43.16.249.67 > 10.43.18.124.67: BOOTP/DHCP, Reply, length 300
有没有办法可以通过 eth1 路由这些 eth0 数据包。
路由表
# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
10.43.16.128 0.0.0.0 255.255.255.128 U 0 0 0 eth0
10.43.18.64 0.0.0.0 255.255.255.192 U 0 0 0 eth1
我尝试过 POSTROUTING SNAT,但猜测这不起作用,因为 POSTROUTING 是在查看路由规则之后发生的(没有来自 eth0 的路由)。
(eth1) 请求能够到达服务器的 eth0,因为中间有一个 Keepalived NAT 负载均衡器来处理它。