我有一台带3个接口的机器,两个公共接口和一个本地接口。它们都来自相同的IP范围。机器上的所有外部可访问服务都使用内部IP。
但是,当进程打开与外界的连接时,数据包中的源地址将设置为公共接口的源地址,用于发送数据包。
在Linux下是否可以强制所有源地址都是特定接口的地址,即使该数据包将通过其他接口路由?
假设我们有一台带有3个接口的机器,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。
感谢。
答案 0 :(得分:0)
这可以通过iptables
:
sudo iptables -t nat -A OUTPUT -j SNAT --to A.B.C.3
如果iptables
服务未运行,可以通过以下命令激活它:
sudo service iptables restart