我的目标很简单,我想使用我的 Ubuntu 服务器,它有一个物理以太网接口作为桥接网络设备,以便我的虚拟机可以连接到它并与 LAN 和互联网上的其他设备进行通信。我不想使用 NAT。
现在我过去几天面临的问题是,当我让虚拟机在我的 LAN 上运行并与互联网通信时,我的服务器 DNS 变得混乱并且无法连接到互联网。我必须手动调整 dns 设置,我觉得我所做的是一个创可贴解决方案,而不是正确的方法。
我的理解是:桥接接口是一个软件网络交换机,可以为其分配端口。它可以像典型网络一样包含多个 L3 设备。当我使用实用程序创建桥接时ip
,典型的用例场景是使用 Linux 盒子作为交换机并“桥接”其上的多个以太网端口,这些端口可以分别连接到边缘路由器/防火墙和内部 LAN。以太网端口成为虚拟桥接接口的从属接口,该虚拟桥接接口接收进入从属接口的所有数据包。
我认为通过创建这个桥接接口,我将能够将我的单个以太网接口用于我的机器上运行的所有 2 个虚拟机以及我的主机本身。但这里有一个问题:当我为网桥分配静态 IP 地址时,谁会获得该 IP 地址?是交换虚拟接口吗?主人?虚拟机?
使用桥接接口的正确方法是什么?在这种情况下是否需要桥接?谢谢。
答案1
您可以利用桥接接口在一个接口上为多个虚拟机提供 IP,如果您计划让虚拟机与主机位于同一网络上,那么桥接接口是绝对必要的。
当您创建桥接接口并为其分配静态 IP 时,即主机IP。请记住,您需要在桥接口,而不是物理接口本身。brctl addif <bridge> <device>
例如,您只需使用命令将物理接口分配给桥接接口。用于brctl show
确认更改。
然后,当您创建 VM 并将其设置为使用该桥接接口时,您可以在 VM 操作系统内设置其自己的静态 IP(或 DHCP 分配的 IP)。该虚拟机现在将与具有您定义的 IP 的主机位于同一网络上。您应该能够 ping 访客,访客也应该能够 ping 外部。
由于您使用的是 Ubuntu,如果您使用的是 16.04 或更高版本,则可以使用 netplan 非常轻松地实现此设置。假设物理接口被调用并且您想要命名桥接器,那么/etc/netplan/01-netcfg.yaml
(或者您在那里的任何文件也可能是)应该如下所示:50-cloud-init.yaml
eno1
br0
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: no
bridges:
br0:
interfaces: [eno1]
dhcp4: yes
这将创建网桥并在网桥接口上的主机上启用 DHCP。请注意我如何在物理接口上禁用 DHCP eno1
。如果您希望您的主机拥有静态 IP,请参阅这一页了解更多示例。
然后运行netplan apply
以应用更改。如果您随后ip a
在主机上运行,您的物理接口将会有所master br0
指示。物理接口不应有 IP。您现在应该还拥有一个br0
具有您在上面指定的 IP 的接口。
如果您使用的/etc/network/interfaces
是 netplan,请检查这里。