通过虚拟接口路由 IP

Geo*_*ios 5 networking linux

在 Linux 上,是否可以通过虚拟接口路由对特定 IP 的所有请求,以便在另一端它们显示的 IP 地址与主机的主要 IP 地址不同?假设eth0IP 地址为 1.1.1.1,而eth0:1地址为 1.1.1.2。如何使对 1.2.3.4 的所有请求都显示为来自eth0:1?我正在尝试以下操作,但似乎不起作用:

route add 1.2.3.4 dev eth0:1
Run Code Online (Sandbox Code Playgroud)

dav*_*dgo 6

是的。

一种方法是使用 IPTABLES 重写离开具有多个 IP 地址的机器的数据包,说它们来自虚拟接口。尝试

/sbin/iptables -t nat -I POSTROUTING -d DEST.IP -j SNAT --to VIRTUAL.IP

(当然,您确实需要按照预期设置虚拟 IP,即需要存在 eth0:1 或等效项,以便流量可以找到返回机器的路)