如何通过主机的另一个接口路由源自一个接口的数据包

如何通过主机的另一个接口路由源自一个接口的数据包

我有两个接口 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 负载均衡器来处理它。

相关内容