-1

我最近更改了底层主机网络配置(将 VLAN 标记从主机移动到交换机),它似乎完全阻止了我的 VM 的任何类型的网络连接。

我在 Ubuntu 16.04 上运行 OpenNebula 5.4.6。

我有 4 个物理网络接口,它们曾经在主机上配置如下:

auto br_admin
iface br_admin inet dhcp
    bridge_ports eno1
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto br_service
iface br_service inet dhcp
    bridge_ports eno2
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto eno2.20
iface eno2.20 inet manual

auto eno2.30
iface eno2.30 inet manual

auto br_public
iface br_service inet dhcp
    bridge_ports eno2.20
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto br_data
iface br_service inet dhcp
    bridge_ports eno2.30
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

我能够将 VLAN 网桥移动到单独的接口上,而不是其他两个网桥未修改......

auto br_admin
iface br_admin inet dhcp
    bridge_ports eno1
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto br_service
iface br_service inet dhcp
    bridge_ports eno2
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto br_public
iface br_service inet dhcp
    bridge_ports eno3
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto br_data
iface br_service inet dhcp
    bridge_ports eno4
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

我的虚拟机都没有使用 br_public 或 br_data,它们也不构成 OpenNebula 配置的任何部分,所以当我发现我的虚拟机在此更改后失去连接时,我感到非常震惊。我重新启动了所有虚拟机,然后重新启动了主机,但问题仍然存在。

我在 OpenNebula 中删除并重新创建了虚拟网络,分离了旧网卡,并将新网卡添加到虚拟机中。即使从头开始创建全新的虚拟机,我似乎也无法恢复任何网络连接。

有任何想法吗??提前致谢...

4

1 回答 1

0

经过多次调试后,tcpdump我发现我的主机桥正在接收来自 M 的数据包,但没有转发它们。我运行了以下命令并再次开始获取网络连接。

# echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables

我检查并发现以下内容/etc/sysctl.d/50-bridge-nf-call.conf

net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0

仔细阅读,我发现了 Ubuntu 中的一个非常古老的错误,它导致 sysctl 配置在启动过程中“过早”加载,因此无法为尚未加载的模块应用设置。在 Ubuntu在线 sysctl.d 手册页的示例部分中,明确解释了如何在正确加载模块后使用 udev 规则来设置网桥过滤。

添加后,我重新启动主机并确认虚拟机将保持连接。

于 2018-02-08T21:08:52.740 回答