我在同一个 Proxmox 节点上运行了 3 个主机,每个主机都有两个网络接口。每个节点上的第一个网络接口位于 10.100.59.0/24 子网上,10.100.59.1 是默认网关,第二个接口位于 10.0.0.0/24 子网上,也是前一个默认网关。
问题在于,在 10.100.59.0/24 子网上,所有三台主机都可以 ping 通并互相看到对方,但在 10.0.0.0/24 子网上,只有三个节点中的两个可以互相看到对方。其他主机无法通过此子网访问第三个节点,但它会在 nmap 扫描此子网时显示出来。
需要注意以下几点:
- 是的,三个节点上的防火墙都已禁用。
- 是的,我检查过 IP 冲突,没有任何问题。
以下是每个节点的 netplan 配置文件:
节点1:
---
network:
version: 2
ethernets:
ens18:
dhcp4: no
dhcp6: no
addresses:
- 10.100.59.215/24
routes:
- to: default
via: 10.100.59.1
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
ens19:
dhcp4: no
dhcp6: no
vlans:
br-mgmt-vlan:
id: 10
link: ens19
br-storage-vlan:
id: 20
link: ens19
br-vxlan-vlan:
id: 30
link: ens19
bridges:
br-mgmt:
dhcp4: no
dhcp6: no
interfaces:
- br-mgmt-vlan
addresses:
- 10.0.0.11/24
- 10.0.0.12/24
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
parameters:
forward-delay: 0
stp: no
br-vxlan:
dhcp4: no
dhcp6: no
interfaces:
- br-vxlan-vlan
addresses:
- 10.0.0.32/24
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
parameters:
forward-delay: 0
stp: no
br-storage:
interfaces:
- br-storage-vlan
parameters:
forward-delay: 0
stp: no
br-vlan:
interfaces:
- ens19
parameters:
forward-delay: 0
stp: no
节点2:
---
network:
version: 2
ethernets:
ens18:
dhcp4: no
dhcp6: no
addresses:
- 10.100.59.216/24
routes:
- to: default
via: 10.100.59.1
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
ens19:
dhcp4: no
dhcp6: no
vlans:
br-mgmt-vlan:
id: 10
link: ens19
br-storage-vlan:
id: 20
link: ens19
br-vxlan-vlan:
id: 30
link: ens19
bridges:
br-mgmt:
dhcp4: no
dhcp6: no
addresses:
- 10.0.0.13/24
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
interfaces:
- br-mgmt-vlan
parameters:
forward-delay: 0
stp: no
br-storage:
dhcp4: no
dhcp6: no
addresses:
- 10.0.0.23/24
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
interfaces:
- br-storage-vlan
parameters:
forward-delay: 0
stp: no
br-vxlan:
dhcp4: no
dhcp6: no
addresses:
- 10.0.0.33/24
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
interfaces:
- br-vxlan-vlan
parameters:
forward-delay: 0
stp: no
br-vlan:
interfaces:
- ens19
parameters:
forward-delay: 0
stp: no
节点 3:
---
network:
version: 2
ethernets:
ens18:
dhcp4: no
dhcp6: no
addresses:
- 10.100.59.217/24
routes:
- to: default
via: 10.100.59.1
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
ens19:
dhcp4: no
dhcp6: no
vlans:
br-mgmt-vlan:
id: 10
link: ens19
br-storage-vlan:
id: 20
link: ens19
br-vxlan-vlan:
id: 30
link: ens19
bridges:
br-mgmt:
interfaces:
- br-mgmt-vlan
parameters:
forward-delay: 0
stp: no
dhcp4: no
dhcp6: no
addresses:
- 10.0.0.14/24
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
br-storage:
interfaces:
- br-storage-vlan
parameters:
forward-delay: 0
stp: no
dhcp4: no
dhcp6: no
addresses:
- 10.0.0.24/24
nameservers:
addresses:
- 195.130.90.35
- 195.130.90.45
br-vlan:
interfaces:
- ens19
parameters:
forward-delay: 0
stp: no
br-vxlan:
interfaces:
- br-vxlan-vlan
parameters:
forward-delay: 0
stp: no
节点 1 和 2 可以通过任一网络接口成功通信,但节点 3 只能与 10.100.59.0/24 子网上的另外两个节点通信。
答案1
你有二三个使用相同子网号的独立子网。“mgmt”VLAN 和“storage”VLAN(仔细观察,甚至某些主机上的“vxlan”VLAN)都配置了属于同一 10.0.0.0/24 的地址,虽然它们代表三个独立的广播域。
然而,子网并不像你想象的那样隔离,因为所有三个br-*
接口仍然在同一台机器上,在同一网络命名空间中,在同一个 VRF 中。由于您有多个具有相同前缀的接口,因此有三个自动“10.0.0.0/24”子网路由,因此只有其中一个将用于全部/24 中的地址(操作系统不会尝试从所有三个地址中“猜测”),并且对于哪一个地址实际上具有优先级,通常是碰运气的。
现在,您的检查表明,在两台主机上,10.0.0.0/24 dev br-vxlan
路由优先,而第三台主机通过选择路由dev br-mgmt
。(重启后可能会有所不同。)主机可以接收来自其他主机的入站数据包,但由于默认启用了“rp_filter”,因此很可能丢弃它们;如果连接不对称(例如,并非所有主机都是“存储”VLAN 的一部分),则响应将完全错误。
简而言之,不要“为了一致性”而使用相同的子网号。如果接口代表不同的广播域,则它们也需要不同的子网号。
在大多数情况下,唯一合理的例外是默认的 IPv6 fe80::/64
,它被认为是“链接范围”,并且在 Linux 上需要将出站接口明确指定为地址的一部分(尽管在 Windows 上,内核做尝试通过发送 NDP 探测来猜测接口)。