使用网桥的具有公共 IP 的 KVM - 访客无连接

使用网桥的具有公共 IP 的 KVM - 访客无连接

前言:

  • 显示的 IP 地址位于 RFC1918 空间中,但实际上是公共 IP,我只是改变了第一个八位字节
  • 主机与互联网之间的连接正常
  • 主机运行的是 Debian Jessie,下面是 uname -a

Linux titan 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux

我有一台服务器,在 /27 内分配了多个地址。这些详细信息如下:

Network: 10.9.114.64
Gateway: 10.9.114.65
Host:    10.9.114.80
Guest:   10.9.114.81
Bcast:   10.9.114.85

还有更多 IP 可供更多访客使用,但目前我只使用单个访客 IP。

我的计划是桥接 eth0 和虚拟网络适配器,以便客户机可以直接与主机和网关通信。

在主机上,我将寻址移至桥接接口 br0,如下所示:

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
 address   10.9.114.80
 netmask   255.255.255.224
 gateway   10.9.114.65
 bridge_ports eth0
 bridge_stp off
 bridge_fd 0
 bridge_maxwait 0

已使用 ifconfig 进行了验证:

br0       Link encap:Ethernet  HWaddr 54:04:a6:7e:e5:e2
          inet addr:10.9.114.80  Bcast:10.9.114.95  Mask:255.255.255.224
          inet6 addr: 2a01:4f8:151:6456::/64 Scope:Global
          inet6 addr: fe80::5604:a6ff:fe7e:e5e2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4349285 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3342075 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:631623791 (602.3 MiB)  TX bytes:4483323274 (4.1 GiB)

eth0      Link encap:Ethernet  HWaddr 54:04:a6:7e:e5:e2
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5130227 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5612825 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:763224208 (727.8 MiB)  TX bytes:4676628982 (4.3 GiB)

然后我使用 virt-install 设置了一个 debian VM。它最初设置为使用 NAT(因为我还无法使桥接网络工作),但当前的接口配置如下所示:

(取自“virsh dumpxml jessie-amd64”) <interface type='bridge'> <mac address='52:54:00:06:f1:d6'/> <source bridge='br0'/> <target dev='vnet0'/> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </interface>

(摘自“virsh edit jessie-amd64”) <interface type='bridge'> <mac address='52:54:00:06:f1:d6'/> <source bridge='br0'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </interface>

应用桥接配置后,我按照 libvirt 网站上的说明重新启动了虚拟机。

我可以通过“brctl show”确认物理主机接口和虚拟适配器都在桥接器中

bridge name     bridge id               STP enabled     interfaces
br0             8000.5404a67ee5e2       no              eth0
                                                        vnet0

在客户机上,我在 /etc/network/interfaces 中有以下配置:

# The primary network interface
auto eth0
iface eth0 inet static
  address  10.9.114.91
  netmask  255.255.255.224
  gateway  10.9.114.65

已使用 ifconfig 进行了验证:

eth0      Link encap:Ethernet  HWaddr 52:54:00:06:f1:d6
          inet addr:10.9.114.91  Bcast:10.9.114.95  Mask:255.255.255.224
          inet6 addr: fe80::5054:ff:fec3:14e0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:32690 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2978342 (2.8 MiB)  TX bytes:4550 (4.4 KiB)

根据我的理解,这应该意味着主机和客户机本质上共享连接到网关的虚拟交换机。

但是,从主机到客户机的 ping 操作不起作用,如下所示:

pricetx@titan:/home/pricetx>ping 10.9.114.91
PING 10.9.114.91 (10.9.114.91) 56(84) bytes of data.
^C
--- 10.9.114.91 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 6999ms

我决定检查 ARP 表以查看主机是否至少可以通过网桥进行 arp:

pricetx@titan:/home/pricetx>sudo arp -an
? (10.9.114.91) at 52:54:00:06:f1:d6 [ether] on br0
? (10.9.114.65) at f4:cc:55:4b:55:7b [ether] on br0

它显然可以看到客人(和网关)。

但是,检查来宾的 arp 表时,我似乎看不到任何内容:

root@kvmtest:~# arp -an
? (10.9.114.65) at <incomplete> on eth0

我的问题似乎是客人无法在桥上看到其他主机。欢迎提出任何建议!

我将继续研究这个问题,如果我找到解决方案,我会更新这篇文章。

答案1

根据我使用 libvirt 创建客户机接口的经验,所需的只是源桥、MAC 地址和模型类型。其他所有内容都是在客户机启动时动态命名/创建的。libvirt 文档中可以看到一个示例:wiki.libvirt.org/page/Networking#Guest_configuration_2

看看是否可行。另外,看看如何使用 virtio 作为 NIC 模型,因为 rtl 仿真非常“简单”。Debian Jessie 客户机很好地支持 virtio。

答案2

我现在已经成功连接,证据如下:

来自嘉宾:

root@kvmtest:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=14.0 ms

root@kvmtest:~# arp -an
? (10.9.114.65) at f4:cc:55:4b:55:7b [ether] on eth0
? (10.9.114.80) at 54:04:a6:7e:e5:e2 [ether] on eth0

对我来说,问题出在服务器提供商 Hetzner 身上。显然他们的网关路由器不允许随机 MAC 地址发送/接收流量。相反,您需要访问他们的网站,生成一个地址,然后将其应用于 virsh 配置。

在 Hetzner 控制面板中,我进行了以下操作:

IP 地址

重置独立 MAC

在“virsh edit jessie-amd64”中配置

<interface type='bridge'> <mac address='00:50:56:00:1e:aa'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </interface>

相关内容