在双NIC Linux系统中的特定NIC上执行连接

时间:2015-10-24 14:28:47

标签: linux sockets c++11

商业案例:

这是2015年,我正在使用Linux内核3.17。我的ARM Linux有两个NIC,eth0和eth1。 eth0用于本地配置,用于旁边的人员,eth1用于远程配置。所以它们基本上是相同的功能,除了eth0有人在现场插入电缆。

本地PC ------ [eth0我的ARM Linux计算机eth1] ------远程PC

使用eth0,PC软件可以配置eth1 IP地址和端口进行配置。为此,我的eth0有一个预设的IP地址(192.168.1.2),因此PC软件可以轻松找到它。 ARM Linux(3.17)应用程序需要侦听eth0端口A和eth1端口B(如果已配置),并且一旦连接,将响应,但从不启动任何活动(甚至不ping)。

本地PC和远程PC之间没有连接。它们不应该被桥接或联网。

问题1:

如果eth1配置了与eth0相同的IP,我的应用程序是否仍然能够侦听两个NIC端口,并正确响应?我将有两个独立的线程(可能是相同的功能,但参数不同)来监听两个NIC端口。

这就是为什么我问我是否可以在连接时指定NIC并进行响应,因为现在您可以看到它们可以具有相同的IP地址。理想情况下,操作系统知道连接请求来自哪里,因此它应该知道要回复的方式,即使两个NIC具有相同的IP,只要它们具有不同的以太网地址即可。但是,当我收听和回复时,C ++ 11或Berkeley模型是否允许我指定eth0或eth1?

现在,本地PC和远程PC也可能具有相同的IP地址(但与ARM Linux不同)。但想象一下我有两台ARM Linux计算机,那么这个配置就完全可以了。但不幸的是,我只有一个嵌入式系统和一个带有eth0和eth1的操作系统。

问题2:

如果问题1的答案为否,那么他们可以拥有相同的子网掩码吗?此外,本地PC和远程PC可以具有相同的IP地址吗?

假设

设置路由表,是一种解决方案,如果有效的话。我想知道它是否可行以及是否建议不要这样做。

此外,这是Linux。很久以前对Windows提出了类似的问题,Windows XP说(不)我使用的是Linux 3.17,而且我有相同的IP地址,所以情况与类似的问题不同。

1 个答案:

答案 0 :(得分:1)

在系统级别,您可以在中介框上配置网桥。这可以在网桥的两侧具有相同的IP地址,并且可以使用iptables锁定以仅响应特定的TCP / UDP端口。

您无法在网桥两侧安装具有相同IP地址的系统(即本地PC和远程PC不能具有相同的IP地址)。您可以使用ebtables将桥接器两侧的访问限制为桥接器本身的IP地址,这意味着本地PC只能与中介盒通信,远程PC只能与中介盒通信。

这是基于从不期望本地和远程PC相互通信。

它主要是一个sys-adminny解决方案,但是,你可以用它作为开发人员来完成同样的事情。