在请求来自的同一接口上应答

Mal*_*lic 8 networking linux tcpip

首先,我知道这不是 IP 的意图。但像往常一样,这就是我需要让它工作的方式。

我在一家保安公司工作。至少有 2 个网络接口。两个接口都应该有一个默认网关。一个接口是默认以太网接口,第二个是3g接口。两者都连接到互联网。不同的配置是可能的,因为一个界面是主界面,另一个是备份界面。或者以太网接口是本地局域网(具有不同的子网、网关),而 3G 调制解调器是互联网连接。

我的主要问题是,如何让 Linux TCP/IP 堆栈在请求来自的同一接口上回复。

第二个问题如何通过我选择的接口启动连接,而无需在不同接口上玩不同的子网。

Jim*_*imB 11

Linux中可以根据源IP地址设置路由。虽然在 Linux 中可以绑定到特定的接口,但这种情况非常罕见。基于源 IP 的路由将允许您为每个传出接口创建一个默认网关。由于处理请求的服务器的套接字可以绑定到 IP,这将确保响应从它们进入的同一接口发出。(如果服务器上的通配符地址,侦听(0.0.0.0),而不是绑定到特定的接口,你将无法使用这种方法。它仍然应该使用连接跟踪模块成为可能,和iptables的痕迹,但我赢了”不要在这里讨论)。

您可以通过使用该命令创建另一个路由表来完成此操作ip。这里的“10”是任意的。

# 10.0.0.1 = gateway for the secondary interface
# 10.0.0.10 = ip address for the secondary interface eth1

ip route add default via 10.0.0.1 dev eth1 table 10
ip rule add from 10.0.0.10 table 10
Run Code Online (Sandbox Code Playgroud)

如果你绑定到多个地址,或者有 dhcp,你可以创建一个基于子网的规则

ip route add default via 10.0.0.1 dev eth1 table 10
ip rule add from 10.0.0.0/8 table 10
Run Code Online (Sandbox Code Playgroud)

如果您确定服务器绑定到设备,则具有更高指标的另一个默认网关就足够了。

ip route add default via 10.0.0.1 dev eth1 metric 2
Run Code Online (Sandbox Code Playgroud)