LXD 容器彼此之间丢弃 ICMP

LXD 容器彼此之间丢弃 ICMP

所以我偶然发现了一个我无法解决的问题。我设置了两台主机,每台都有两个 LXD VM 容器。两台都通过 Snap 运行 LXD。一台主机运行 Ubuntu 22.04,带有两个 Ubuntu 22.04 容器。另一台主机运行 Debian 12,带有两个 Debian 12 容器。我在容器上设置了 netplan,并在两台主机上安装了 bridge-utils 等。然后我在两台主机上配置了网桥,并在这些主机上配置了容器以使用它们,所有这些都使用完全相同的配置。

主办方

ip link add dev lxdbr0 type bridge
ip addr add 172.16.0.254/16 broadcast 172.16.255.255 dev lxdbr0
ip link set lxdbr0 up

LXD 容器 1

LXD 配置

devices:
  lxdbr0:
    hwaddr: 00:16:3e:fb:7d:1c
    nictype: bridged
    parent: lxdbr0
    type: nic  

网络计划

network:
  version: 2

  ethernets:
    enp0s0:
      match:
        macaddress: 00:16:3e:fb:7d:1c
      set-name: enp0s0
      dhcp4: false
      addresses:
        - 172.16.0.1/16
      routes:
        - to: 172.16.0.0/16
          via: 172.16.0.254

LXD 容器 2

LXD 配置

devices:
  lxdbr0:
    hwaddr: 00:16:3e:fb:7d:8d
    nictype: bridged
    parent: lxdbr0
    type: nic

网络计划

network:
  version: 2

  ethernets:
    enp0s0:
      match:
        macaddress: 00:16:3e:fb:7d:8d
      set-name: enp0s0
      dhcp4: false
      addresses:
        - 172.16.0.2/16
      routes:
        - to: 172.16.0.0/16
          via: 172.16.0.254

这在 Ubuntu 主机上运行良好,但在 Debian 主机上遇到了一些问题。普通 TCP 运行良好,但由于某种原因,它会在容器之间丢弃 ICMP。我可以从主机 ping 每个容器,但无法从另一个容器 ping 一个容器。起初我以为存在一般连接问题,但我尝试在其中一个容器上安装 nginx,而该容器可以通过curl另一个容器完全访问。

就像我上面提到的那样。每个主机及其容器上的两种配置都相同。也许 Ubuntu 的 Cloud Init 是它只在 Ubuntu 上工作的原因?但为什么只有 ICMP?

没有进行任何 iptables 配置,也没有安装和配置 ufw 或其他防火墙。

我尝试了所有ip我能想到的命令检查,所有命令都显示两个安装之间的配置相同。我尝试了 tcpdump 和我能找到的各种其他监控选项,但无法弄清楚这些数据包丢失的原因和位置。

答案1

似乎我的 Ubuntu 安装net.ipv4.conf.all.forwarding=1在某个地方配置了。不确定在哪里,因为我查看了/etc/sysctl.conf/etc/sysctl.d/。但默认情况下,所有内容都启用了转发,而 Debian 安装中并非如此。启用此功能确实可以解决问题,尽管我不确定为什么这只影响 ICMP 请求数据包。我并不是一个真正的网络专家,但是“curl”http 请求不是以 ARP 数据包开头的吗?发现curl可以通过但ping不能通过的奇怪现象。

相关内容