仅可访问 netplan 配置中的最后一个 NIC

仅可访问 netplan 配置中的最后一个 NIC

服务器有 4 个 NIC 和一个网桥(与讨论无关),由 netplan 配置。运行后,netplan apply --debug我得到以下合并配置:

DEBUG:Merged config:
network:
  bonds: {}
  bridges:
    br0:
      dhcp4: true
      dhcp6: true
      interfaces:
      - enp4s0f3
  ethernets:
      enp4s0f0:
      dhcp4: true
      dhcp6: false
      link-local: []
    enp4s0f1:
      dhcp4: false
      dhcp6: true
    enp4s0f2:
      dhcp4: true
      dhcp6: true
    enp4s0f3:
      dhcp4: false
      dhcp6: false

我尝试netcat在不同的 IP 上运行并监听,为了简单起见,这里只给出了两个 NIC 启用 IPv4 的情况:enp4s0f0enp4s0f2
路由表如下:

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.31.100.1     0.0.0.0         UG    100    0        0 enp4s0f2
0.0.0.0         10.31.100.1     0.0.0.0         UG    100    0        0 enp4s0f0
0.0.0.0         10.31.100.1     0.0.0.0         UG    100    0        0 br0
10.31.100.0     0.0.0.0         255.255.254.0   U     0      0        0 enp4s0f2
10.31.100.0     0.0.0.0         255.255.254.0   U     0      0        0 enp4s0f0
10.31.100.0     0.0.0.0         255.255.254.0   U     0      0        0 br0
10.31.100.1     0.0.0.0         255.255.255.255 UH    100    0        0 enp4s0f2
10.31.100.1     0.0.0.0         255.255.255.255 UH    100    0        0 enp4s0f0
10.31.100.1     0.0.0.0         255.255.255.255 UH    100    0        0 br0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

如您所见,生成了 3 条默认路由。最上面的默认路由使用接口enp4s0f2,这是服务器响应客户端的唯一情况。以下是部分 IP 列表

2: enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 10:60:4b:9a:bd:7c brd ff:ff:ff:ff:ff:ff
    inet 10.31.100.70/23 brd 10.31.101.255 scope global dynamic enp4s0f0
       valid_lft 28703sec preferred_lft 28703sec
    inet6 fe80::1260:4bff:fe9a:bd7c/64 scope link
       valid_lft forever preferred_lft forever
4: enp4s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 10:60:4b:9a:bd:7e brd ff:ff:ff:ff:ff:ff
    inet 10.31.100.63/23 brd 10.31.101.255 scope global dynamic enp4s0f2
       valid_lft 28703sec preferred_lft 28703sec
    inet6 fe80::1260:4bff:fe9a:bd7e/64 scope link
       valid_lft forever preferred_lft forever

netcat我确实在监听 IPenp4s0f0和 IP if时运行了两个测试。我在两种情况下都enp4s0f2运行了。 这是第一种情况,使用IPtcpdump
enp4s0f010.31.100.70

nc -l -p 33333 -s 10.31.100.70

通过在不同机器上运行的客户端进行连接

nc 10.31.100.70 33333

tcpdump显示如下:

sudo tcpdump -i any -nn -vv port 33333
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:20:54.744837 IP (tos 0x2,ECT(0), ttl 114, id 5558, offset 0, flags [DF], proto TCP (6), length 52)
    10.47.240.156.41078 > 10.31.100.70.33333: Flags [SEW], cksum 0x2a91 (correct), seq 1636906657, win 8192, options [mss 1380,nop,wscale 8,nop,nop,sackOK], length 0
11:20:54.744837 IP (tos 0x2,ECT(0), ttl 114, id 5558, offset 0, flags [DF], proto TCP (6), length 52)
    10.47.240.156.41078 > 10.31.100.70.33333: Flags [SEW], cksum 0x2a91 (correct), seq 1636906657, win 8192, options [mss 1380,nop,wscale 8,nop,nop,sackOK], length 0

由于客户端没有收到打开套接字的回复,这种情况持续发生。
我停止了 netcat 并开始监听enp4s0f2IP10.31.100.63

nc -l -p 33333 -s 10.31.100.63

并运行客户端

nc 10.31.100.63 33333

客户端已连接并tcpdump显示从服务器到客户端的套接字打开应答。

sudo tcpdump -i any -nn -vv port 33333
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
16:51:39.033834 IP (tos 0x2,ECT(0), ttl 114, id 23066, offset 0, flags [DF], proto TCP (6), length 52)
    10.47.240.156.41180 > 10.31.100.63.33333: Flags [SEW], cksum 0xce53 (correct), seq 2777304710, win 8192, options [mss 1380,nop,wscale 8,nop,nop,sackOK], length 0
16:51:39.033906 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
    10.31.100.63.33333 > 10.47.240.156.41180: Flags [S.], cksum 0x6950 (incorrect -> 0x1c2a), seq 467254207, ack 2777304711, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
16:51:39.068784 IP (tos 0x0, ttl 114, id 23067, offset 0, flags [DF], proto TCP (6), length 40)
    10.47.240.156.41180 > 10.31.100.63.33333: Flags [.], cksum 0x53ed (correct), seq 1, ack 1, win 1024, length 0
16:52:18.202401 IP (tos 0x0, ttl 114, id 23069, offset 0, flags [DF], proto TCP (6), length 40)
    10.47.240.156.41180 > 10.31.100.63.33333: Flags [R.], cksum 0x57e9 (correct), seq 1, ack 1, win 0, length 0

强调回应:10.31.100.63.33333 > 10.47.240.156.41180:。对我来说,这似乎与路由表没有问题。当在 netplan 配置中使用除最后一个 IP 以外的任何其他 IP 时,不会向套接字打开请求发送任何响应。
我不知道发生了什么,也不知道如何配置 netplan 以便能够监听所有地址。
计划是使用专用 NIC 给 Docker,另一个用于桥接,一个用于管理。所有 NIC 都连接到同一个交换机、同一个虚拟网络。我尝试在 netplan 中逐一配置它们并启用,并且我能够从远程计算机连接到任何 IP(但仅当此 NIC 是生成的 netplan 配置文件中的唯一 IP 或最新 IP 时)。

相关内容