在linux下分配机器IP



我有一台机器,有3个接口,两个公共接口和一个本地接口。它们都来自同一IP范围。机器上所有外部可访问的服务都使用内部IP。

然而,当进程打开与外部世界的连接时,数据包中的源地址被设置为将用于发送数据包的公共接口的地址。

在Linux下,是否可以强制所有源地址都是特定接口的地址,即使数据包将通过其他接口路由?

假设我们有一台有三个接口的机器,a.B.C.1、a.B.C.2和a.B.C.3。其中A.B.C.1和A.B.C.2连接到互联网(A.B.C.0/24路由到它们)。机器上的所有服务都会收听A.B.C.3。是否可以保证所有源自机器的数据包都具有A.B.C.3的源地址,即使它们将通过A.B.C.1或A.B.C.2离开机器?

在打开传出连接的套接字时指定源地址不是一个解决方案;我们谈论的是无法更改的现有程序。此外,它也应该适用于ICMP。

谢谢。

这可以通过iptables:实现

sudo iptables -t nat -A OUTPUT -j SNAT --to A.B.C.3

如果iptables服务没有运行,可以通过以下命令激活:

sudo service iptables restart

最新更新