我使用的是 Ubuntu xenial (16.04 LTS),因为我使用虚拟化,所以我决定建立一个桥接网络。
我像这样创建了这座桥/etc/network/interfaces
:
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
在我创建 Tap 设备之前,互联网工作正常。当我像这样为虚拟机添加 Tap 设备时:
$ user=anyone
$ dev=tap0
$ ip tuntap add $dev mode tap user $usr
$ ip link set $dev up
$ ip link set $dev master br0
我可以使用 Tap 设备从我的虚拟化客户机顺利访问互联网,并且有时,我仍然可以通过我的主机正常访问互联网(即 DNS 正在运行)。
然而,我的主机系统上的 DNS 经常会失败(我通过 ping 远程主机的 IP 进行测试,结果成功,但使用其名称则会失败)。只要我移除 Tap 设备,我的主机系统上的一切就会恢复正常。
我不认为这些是外部网络问题,因为我在 Fedora 上的设置非常相似,并且运行完美。需要说明的是,无论我是否启动虚拟机都没有区别,一旦 Tap 启动,我就会丢失主机上的 DNS,而一旦我移除 Tap 设备,它就会再次运行。
我在 中找不到任何有用的东西dmesg
,syslog
也ip route
找不到任何能帮助我的东西。所以我在这里问,有人知道哪里出了问题吗?
亲切的问候
答案1
好的,我解决了。问题是桥接设备默认使用其子设备的最低 mac 地址编号作为自己的 mac 地址。由于 tap 设备的 mac 地址或多或少是随机的,它有时会更改桥接器的 mac,有时则不会。随机 MAC 被我网络中的 DNS 阻止。
幸运的是,如果你为网桥分配了一个 MAC 地址,它会保留它。所以我需要像这样为网桥添加一个永久的 MAC 地址
ip link set br0 address {MAC-ADDRESS}
或者在启动时添加它我可以添加张贴行至/etc/network/interfaces
iface br0 inet dhcp
bridge_ports eth0
.
.
.
post-up ip link set br0 address {MAC-ADDRESS}
如需了解更多信息,请参阅http://backreference.org/2010/07/28/linux-bridge-mac-addresses-and-dynamic-ports/