我正在尝试使用桥接将来宾虚拟机连接到我的网络。我在网上找到了一些资源,但它们似乎已经过时,涉及 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 发生了什么,我会尝试运行tcpdump
或br0
监视eth0
DHCP 流量或来自 mac 地址的任何流量54:52:00:1a:c8:4f
。然后尝试获取 DHCP 地址。您可能需要在网桥上启用 SPT。
我建立自己的网络的原因是为了能够从外部访问我的虚拟机。我运行两个网桥,其中一个托管我的 DMZ。