使用 kvm 桥接网络

使用 kvm 桥接网络

我正在尝试使用桥接将来宾虚拟机连接到我的网络。我在网上找到了一些资源,但它们似乎已经过时,涉及 xen 或 Ubuntu,或者似乎不完整。主机运行 CentOS 5.5,我使用 libvirt 来管理虚拟机,因此我使用它来创建虚拟机并启动和停止它们。我已经创建了网桥 (br0) 并将 eth0 连接到它。虚拟机似乎没有获得 IP 地址,我想使用 DHCP 获取地址,我将为虚拟机设置静态租约。

来自主机的 ifconfig:

br0   Link encap:Ethernet  HWaddr 00:1A:4D:53:C3:A6  
      inet addr:192.168.1.121  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::21a:4dff:fe53:c3a6/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:5222 errors:0 dropped:0 overruns:0 frame:0
      TX packets:470 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:753743 (736.0 KiB)  TX bytes:47868 (46.7 KiB)

eth0  Link encap:Ethernet  HWaddr 00:1A:4D:53:C3:A6  
      inet6 addr: fe80::21a:4dff:fe53:c3a6/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:103200 errors:0 dropped:0 overruns:0 frame:0
      TX packets:116575 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:13605883 (12.9 MiB)  TX bytes:63269448 (60.3 MiB)
      Interrupt:217 Base address:0xc000 

 eth1 Link encap:Ethernet  HWaddr 00:1B:21:0A:25:AA  
      inet addr:192.168.1.91  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::21b:21ff:fe0a:25aa/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:3124648 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1693433 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:100 
      RX bytes:4531121842 (4.2 GiB)  TX bytes:119907573 (114.3 MiB)

 lo   Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:16436  Metric:1
      RX packets:27294 errors:0 dropped:0 overruns:0 frame:0
      TX packets:27294 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:34266420 (32.6 MiB)  TX bytes:34266420 (32.6 MiB)

virbr0 Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
       inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
       inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:51332 errors:0 dropped:0 overruns:0 frame:0
       TX packets:89020 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0 
       RX bytes:2916963 (2.7 MiB)  TX bytes:132997389 (126.8 MiB)

vnet0  Link encap:Ethernet  HWaddr FE:52:00:1A:C8:4F  
       inet6 addr: fe80::fc52:ff:fe1a:c84f/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:25 errors:0 dropped:0 overruns:0 frame:0
       TX packets:518 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:500 
       RX bytes:4226 (4.1 KiB)  TX bytes:51190 (49.9 KiB)

的输出brctl show

bridge name bridge id       STP enabled interfaces
br0         8000.001a4d53c3a6       no              vnet0
                                                    eth0
virbr0      8000.000000000000       yes

输出来自route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     0      0        0 br0
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0
169.254.0.0     *               255.255.0.0     U     0      0        0 br0
default         DD-WRT          0.0.0.0         UG    0      0        0 br0

最后,这是我尝试配置的虚拟机的网络部分:

<interface type='bridge'>
  <mac address='54:52:00:1a:c8:4f'/>
  <source bridge='br0'/>
</interface>

答案1

正如您已经发现的那样,您一切都正确......这是防火墙问题。您可以通过添加允许流量的规则(就像您所做的那样)、完全关闭防火墙,或者像在较新版本的 Fedora 和 RHEL 中所做的那样,将以下内容添加到 /etc/sysctl.conf 来解决这个问题:

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

然后运行sysctl -p以应用这些更改。

答案2

KVM建立自己的网桥。这就是桥virbr0。您应该能够配置其联网方式。

在虚拟机上,接口应该显示在而eth0不是桥上。这将是设备的另一侧vnet0

我在 Ubuntu 上工作,其中 KVM 将为桥接网络启动 DNSMasq 服务器来分发 DHCP 地址。 KVM 还将用于iptables配置虚拟机的网络访问。

尝试删除您创建的桥并重新启动虚拟机。从我看到的配置来看,我希望它能获得 192.168.122.0 范围内的地址。

我不喜欢 KVM 与我的防火墙交互的方式,我自己的也是如此KVM手动联网。我的配置使用未连接到以太网接口的虚拟网桥。这KVM 网络页面Ubuntu 社区的内容可能会帮助您了解 KVM 现在是如何进行网络的。

编辑:我再次查看了桥接网络。我不确定为什么你的 上有 192.168.1.x 地址eth1。你的配置看起来和我预期的差不多。尝试在虚拟机上设置静态地址,看看是否可以通信。

为了测试 DHCP 发生了什么,我会尝试运行tcpdumpbr0监视eth0DHCP 流量或来自 mac 地址的任何流量54:52:00:1a:c8:4f。然后尝试获取 DHCP 地址。您可能需要在网桥上启用 SPT。

我建立自己的网络的原因是为了能够从外部访问我的虚拟机。我运行两个网桥,其中一个托管我的 DMZ。

相关内容