长话短说,我对这项任务有点不知所措,因为我对网络和复杂的网络配置不是很熟悉。我有一些想法,但不想浪费时间。
背景:
我正在尝试设置一个 Ubuntu 桌面(测试服务器),使其具有 8 个用于以太网连接的物理端口,这些端口都显示为单独的接口,并且实际上是独立的。这是必要的,因为我想使用单个桌面来测试多个千兆以太网设备,目前这是通过多台计算机完成的。此生产阶段的所有设备都使用相同的 IP/子网设置。我可以为这次测试更改它们,然后再改回来,但这会带来新的故障和大量的开销时间/设置。
当前状态:
考虑到这一点,我设置了一个带有 2x 的桌面此网卡Ubuntu 正确检测每个端口为 enp1s0f[0...3] 和 enp5s0f[0...3],我已为每个端口配置了 IP XXX[1...8] 和子网 255.255.255.0。由于不太清楚会发生什么,我尝试将两个具有相同 IP(XXX21)的设备连接到不同的物理端口并尝试 ping。首先连接的机器能够 ping 两个连接接口的地址,而另一台机器则无法访问。我想这很有道理,传入的 ping 表示它应该返回到 .21 地址,并且由于该地址存在于两个接口上,因此它会路由到第一个连接的接口。
思路:
使用 docker 来帮忙?
这些测试现在都是在 docker 中运行的,所以有一分钟我以为我可能可以以某种方式将 docker 实例“绑定”到特定 IP 地址,通过扩展应该将它们绑定到该 IP 地址分配到的接口/端口。上面的小 ping 测试让我不太有信心我能用这么简单的东西成功,但我可能会先尝试一下,因为它看起来不太耗时。这个答案(VLANS/NAT 配置)
这个问题听起来像是我想做的事情。我想避免添加更多硬件,但似乎可以通过 VLAN/NAT 编辑来实现,但我需要更多有关这在我的案例中具体是什么样子的信息,因为答案太模糊了,我不知道从哪里开始。网络命名空间/VLAN
这是我在谷歌搜索/询问 chatGPT 时看到的第一个建议,但似乎很多用例都是将同一个 IP 分配给多个接口(与我需要做的相反?)如果我误解了它们在这里如何有用,我希望得到一些澄清。
快速更新:
使用网络命名空间我能够获得一些接近我需要的基本功能:
sudo ip netns add test1
sudo ip netns add test2
sudo ip link set enp1s0f1 netns test1
sudo ip link set enp1s0f2 netns test2
sudo ip netns exec test1 ip addr add X.X.X.1/24 dev enp1s0f1
sudo ip netns exec test2 ip addr add X.X.X.2/24 dev enp1s0f2
sudo ip netns exec test1 ip link set enp1s0f1 up
sudo ip netns exec test2 ip link set enp1s0f2 up
这至少让我能够将两台具有相同 IP 的笔记本电脑连接到同一 NIC 上的两个端口,并按预期对它们进行 ping。在解决这个问题之前,还需要进行一些配置/验证,但目前看来这是最有希望的
为了完整性,我尝试配置一些有关设置的更多信息:
$ lspci | awk '/[Nn]et/ {print $1}' | xargs -i% lspci -ks %
00:14.3 Network controller: Intel Corporation Device 7a70 (rev 11)
DeviceName: Onboard - Ethernet
Subsystem: Intel Corporation Device 0094
Kernel driver in use: iwlwifi
Kernel modules: iwlwifi
01:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Beijing Sinead Technology Co., Ltd. I350 Gigabit Network Connection
Kernel driver in use: igb
Kernel modules: igb
01:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Beijing Sinead Technology Co., Ltd. I350 Gigabit Network Connection
Kernel driver in use: igb
Kernel modules: igb
01:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Beijing Sinead Technology Co., Ltd. I350 Gigabit Network Connection
Kernel driver in use: igb
Kernel modules: igb
01:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Beijing Sinead Technology Co., Ltd. I350 Gigabit Network Connection
Kernel driver in use: igb
Kernel modules: igb
03:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
Subsystem: Micro-Star International Co., Ltd. [MSI] Ethernet Controller I225-V
Kernel driver in use: igc
Kernel modules: igc
05:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Beijing Sinead Technology Co., Ltd. I350 Gigabit Network Connection
Kernel driver in use: igb
Kernel modules: igb
05:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Beijing Sinead Technology Co., Ltd. I350 Gigabit Network Connection
Kernel driver in use: igb
Kernel modules: igb
05:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Beijing Sinead Technology Co., Ltd. I350 Gigabit Network Connection
Kernel driver in use: igb
Kernel modules: igb
05:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Beijing Sinead Technology Co., Ltd. I350 Gigabit Network Connection
Kernel driver in use: igb
Kernel modules: igb
ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 98:b7:85:01:63:22 brd ff:ff:ff:ff:ff:ff
3: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 04:7c:16:df:45:91 brd ff:ff:ff:ff:ff:ff
4: enp1s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 98:b7:85:01:63:23 brd ff:ff:ff:ff:ff:ff
5: enp1s0f2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 98:b7:85:01:63:24 brd ff:ff:ff:ff:ff:ff
6: enp1s0f3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 98:b7:85:01:63:25 brd ff:ff:ff:ff:ff:ff
7: enp5s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 98:b7:85:01:61:06 brd ff:ff:ff:ff:ff:ff
8: enp5s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 98:b7:85:01:61:07 brd ff:ff:ff:ff:ff:ff
9: enp5s0f2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 98:b7:85:01:61:08 brd ff:ff:ff:ff:ff:ff
10: enp5s0f3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 98:b7:85:01:61:09 brd ff:ff:ff:ff:ff:ff
11: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether c8:5e:a9:4e:21:4f brd ff:ff:ff:ff:ff:ff
altname wlp0s20f3
12: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:f0:6e:f3:e9 brd ff:ff:ff:ff:ff:ff
答案1
对于每个具有 mac 地址的设备,您需要分配一个单独的 ip。或者设置简单的 dhcp 服务器并动态分配 ip。您不能将相同的 ip 分配给两个不同的设备,否则会产生冲突。IP 地址分配给网络接口(如以太网设备),以在网络上唯一标识它。当数据发送到特定 IP 地址时,以太网设备使用其 MAC 地址在本地网络上定位适当的硬件并将数据传送到正确的目的地。此过程涉及 ARP(地址解析协议)等协议,以将 IP 地址映射到本地网络内的 MAC 地址。IP 地址和 MAC 地址的组合使网络上的设备之间能够进行通信。
如果你需要测试大量的以太网设备,我会买一个 24 端口交换机或类似的东西,而不是台式机https://www.amazon.com/TP-Link-24-Port-Gigabit-Rackmount-TL-SG1024S/dp/B0779R9LJ3?ref_=ast_sto_dp&th=1&psc=1
您可能还需要设置一些静态路由表来路由到适当的网络端口
答案2
您可能要考虑将端口绑定在一起。可能需要交换机支持才能按您的要求工作。