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


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

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

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

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


6
2018-01-28 16:06






答案:


您可以根据源IP地址在Linux中设置路由。虽然在Linux中绑定到特定接口是可能的,但这种情况并不常见。基于源IP的路由将允许您为每个传出接口创建默认网关。由于发送请求的服务器的套接字可以绑定到IP,因​​此这将确保响应从它们所在的同一接口发出。 (如果服务器正在侦听通配符地址(0.0.0.0),并且不绑定到特定的接口,您将无法使用此方法。它仍然应该可以使用conntrack模块和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

如果您绑定到多个地址或具有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

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

ip route add default via 10.0.0.1 dev eth1 metric 2

8
2018-01-28 18:28



在此设备中,两者都可能具有动态IP地址。因此,如果我理解正确,我可以使用以下工具:ip route add default via iif eth0 table 10 ip rule add oif eth0 table 10 ip route add default via iif ppp0 table 20 ip rule add oif ppp0 table 20 - Malic
有用!但是ip地址不带接口名称 - Malic
@Malic - 是的,网关(默认通过......)需要是一个IP地址。 - JimB
一切都在使用示例的第一部分(指定源IP地址)。由于ip地址是通过dhcp获得的,我正在尝试使用该接口的示例的第二部分。 “ip rule add oif eth1 table 10”。不接受oif,使用iif接受。但功能中断,数据包不通过“eth1”接口发送。你有好主意吗?对我来说似乎一切都是正确的。 (ip rule add iif eth1 table 10) - Malic
@Malic - oif和iif(出站和入站)不一样,所以我不明白为什么你认为这会起作用。你是什​​么意思“不接受oif”?请检查一下 ip man-page提供完整的参考。 - JimB


我不确定这是否可能在你想要的一般意义上。您当然可以通过将其绑定到特定地址来控制计算机上运行的程序使用的网络接口。

但是,一般来说,我认为没有办法将传入的网络数据包连接到传出的数据包。您可以做的最好的事情是向系统提供说明,如果您尝试连接到此网络,请始终使用此界面。这可以通过系统路由表以各种方式完成(iproute)或与 iptables 防火墙规则。

如果这是出于安全目的,您是否考虑过在物理服务器上运行虚拟机?您可以将一个VM配置为只能访问一个接口,而将另一个VM配置为只能访问另一个接口。由于VM根本看不到其他接口,因此无法响应来自错误网络的数据包。

你可能也应该看看 这个serverfault问题 其中介绍了如何控制arp请求的接口。您还应该查看rp_filter sysctl,可以将其设置为忽略出现在错误接口上的数据包。


1
2018-01-28 16:40