初赛
以下内容适用于Ubuntu 12.04。在测试时,应禁用计算机的防火墙,以免受到干扰。
/ etc / default / qemu-kvm文件应与最初安装的文件相同。
您将需要安装bridge-utils qemu-kvm和libvirt-bin。任何使用虚拟机的用户都应添加到libvirtd组中。
似乎不再需要添加CAP_NET_ADMIN功能。
网络设置
默认的网络模式是用户模式,也称为SLIRP。它使用预定义的virbr0桥,该桥被NAT路由到来宾计算机。NAT路由使用内核的ip_forwarding功能和iptables。桥接模式使用来宾中的虚拟桥接器(未编号的以太网接口)连接到该桥接器,并且主机和来宾都具有其网络接口。
下图可能使区别更加清楚:
您可以看到如何通过以下方式定义默认用户网络:
virsh net-dumpxml default
我可以使用以下方法设置桥接模式:
在/ etc / network / interfaces中(从您在问题中提到的帖子的桥接部分开始):
自动搜索
iface lo inet回送
#auto eth0
#iface eth0 inet dhcp
自动eth0
iface eth0 inet手册
自动br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp关闭
bridge_fd 0
bridge_maxwait 0
重启; 并确保无线网络未处于活动状态。使用检查默认的IP路由ip route
。它必须使用br0接口。
注意:如果在进行此更改时未连接以太网,则需要插入以太网电缆并获得载体,否则引导将挂起两分钟,并且您将无法使用网络功能,这是因为eth0接口在此文件中之前,必须先启动,然后才能正常进行引导。
注意:通常,您不能使用无线网络代替eth0,因为它们无法使用多个MAC地址(我推断它们需要第二个用于桥接)。
或者,您可以禁用以太网,并确保它没有IP地址,并且没有使用设置默认路由ip route
。然后:
sudo ifconfig eth0 0.0.0.0 up
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0 &
您还可以在此处提供静态IP地址,以及定义默认路由和DNS地址。对于此示例,请dhclient
执行此操作。
这是我的路线表:
$ ip路由列表
默认通过192.168.1.1 dev br0 metric 100
169.254.0.0/16 dev br0范围链接指标1000
192.168.1.0/24 dev br0 proto内核作用域链接src 192.168.1.45
192.168.122.0/24 dev virbr0原型内核作用域链接src 192.168.122.1
使用kvm
然后,我可以使用以下命令引导桥接的kvm机器:
$ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
该-netdev tap
参数要求sudo。在启动虚拟机时,qemu-kvm运行以下命令:
ifconfig vnet0 0.0.0.0以上
brctl addif brctl addif br0 vnet0
这是通过/ etc / qemu-ifup完成的
VM的vnet0接口已添加到br0网桥,因为上面的默认路由使用该网桥接口。如果不存在,则将tap接口添加到virbr0接口。由于未连接到Internet,在我的实验中,将使用NAT将来宾连接到主机和Internet。您可以将vnet0定向到/ etc / default / qemu-kvm中的特定网桥。使用下面的virt-manager,您可以显式地指示要连接到的网桥。
由于qemu-kvm发出的上述命令和该-netdev tap,id=tunnel,ifname=vnet0
参数,vm虚拟机已连接到vnet0隧道,而该隧道已连接到br0网桥。
现在,我可以从网络上的另一台计算机直接SSH到该来宾VM。
我的主机ifconfig
(请注意,VM运行时在网络上显示的vnet0接口):
$ ifconfig
br0链接encap:以太网HWaddr 00:1e:33:88:07:e5
inet地址:192.168.1.45广播:255.255.255.255掩码:255.255.255.0
inet6地址:fe80 :: 21e:33ff:fe88:7e5 / 64范围:链接
UP广播多播MTU:1500公制:1
RX数据包:6526错误:0丢弃:0超限:0帧:0
TX数据包:7543错误:0掉落:0超限:0运营商:0
冲突:0 txqueuelen:0
接收字节:2712940(2.7 MB)发送字节:1071835(1.0 MB)
eth0链接encap:以太网HWaddr 00:1e:33:88:07:e5
UP广播多播MTU:1500公制:1
RX数据包:7181错误:0掉落:0超限:0帧:0
TX数据包:7740错误:0掉落:0超限:0运营商:0
碰撞:0 txqueuelen:1000
接收字节:2974585(2.9 MB)发送字节:1096580(1.0 MB)
中断:43个基地址:0x6000
lo链接封套:本地环回
inet地址:127.0.0.1掩码:255.0.0.0
inet6 addr::: 1/128范围:主机
上环运行MTU:16436公制:1
RX数据包:10个错误:0掉落:0超限:0帧:0
TX封包:10个错误:0掉落:0超限:0载波:0
冲突:0 txqueuelen:0
RX字节:664(664.0 B)TX字节:664(664.0 B)
vnet0链接encap:以太网HWaddr ca:0c:73:c3:bc:45
inet6 addr:fe80 :: c80c:73ff:fec3:bc45 / 64范围:链接
UP广播多播MTU:1500公制:1
RX数据包:226错误:0掉落:0超限:0帧:0
TX封包:429个错误:0掉落:0超限:0载波:0
碰撞:0 txqueuelen:500
接收字节:26919(26.9 KB)发送字节:58929(58.9 KB)
virbr0链接encap:以太网HWaddr d6:18:22:db:ff:93
inet地址:192.168.122.1广播:192.168.122.255掩码:255.255.255.0
广播多播MTU:1500公制:1
RX数据包:0错误:0丢弃:0超限:0帧:0
TX数据包:0错误:0掉线:0超限:0运营商:0
冲突:0 txqueuelen:0
RX字节:0(0.0 B)TX字节:0(0.0 B)
我在运行VM时的网桥配置:
$ brctl显示
桥接名称桥接ID STP启用的接口
br0 8000.001e338807e5否eth0
vnet0
virbr0 8000.000000000000是
请注意,虚拟机的vnet0接口和eth0接口都连接到br0网桥。
MAC位于br0接口上:
$ brctl showmacs br0
端口号mac addr是本地端口吗?老化计时器
1 00:05:5d:cf:64:61否2.54
1 00:19:d2:42:5d:3f否36.76
1 00:19:df:da:af:7c否2.86
1 00:1e:33:88:07:e5是0.00
1 00:60:0f:e4:17:d6否0.79
2 52:54:00:12:34:56否0.80
1 58:6d:8f:17:5b:c0否5.91
1 c8:aa:21:be:8d:16否167.69
2 ca:0c:73:c3:bc:45是0.00
请注意,br0接口将我的主机连接到来宾使用的同一网桥。
您可以使用来检查是否已桥接,而不是将NAT路由到自己的网络traceroute 8.8.8.8
。如果第一个节点是您网络的路由器而不是来宾的IP地址,则您的网络应该可以正常工作。
请参阅本文档。
经理
确保已安装virt-manager
和hal
。该hal
软件包是建议的依赖项,virt-manager
用于在创建或编辑来宾时确定系统的网络配置。
在如上所述定义br0桥的同时,我使用virt-manager创建了一个虚拟机,如下所示:
我能够直接从此访客访问我的家庭网络的其余部分并访问Internet。我还能够从家庭网络中的另一台(非主机,非来宾)Ubuntu计算机上下载该文件。
这是kvm
virt-manager运行的很长的命令(用于与EApubs或其他对此有麻烦的人进行比较):
/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1,套接字= 1,内核= 1,线程= 1-精确命名-uuid f057a729-eda6-4b85-84dc-f100c9ae3789- nodefconfig -nodefaults -chardev套接字,id = charmonitor,path = / var / lib / libvirt / qemu / precise.monitor,server,nowait -mon chardev = charmonitor,id = monitor,mode = control -rtc base = utc -no-关闭-驱动器文件= / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2,如果=无,id =驱动器-ide0-0-0,格式= qcow2-设备ide-drive,总线= ide.0 ,unit = 0,驱动器=驱动器-ide0-0-0,id = ide0-0-0,bootindex = 1 -netdev tap,fd = 18,id = hostnet0 -device rtl8139,netdev = hostnet0,id = net0,mac = 52:54:00:0e:da:9b,bus = pci.0,addr = 0x3 -chardev pty,id = charserial0 -device isa-serial,chardev = charserial0,id = serial0 -usb -vnc 127.0.0.1: 0 -vga cirrus-设备intel-hda,id =声音0,bus = pci.0,addr = 0x4-设备hda-duplex,id =声音0-codec0,bus =声音0.0,cad = 0-设备virtio-balloon-pci,id = balloon0,bus = pci.0,addr = 0x5
这是/etc/libvirt/qemu/quantal.xml中虚拟机描述的网络部分
<interface type='bridge'>
<mac address='52:54:00:b0:8e:aa'/>
<source bridge='br0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
根据此链接,出于性能和可靠性的考虑,最好将网络设备型号设置为virtio
,您可以在virt-viewer中通过按i按钮,转到NIC设置,然后设置“设备型号”来执行此操作。到virtio
。您还可以通过添加以下行将其添加到上面的XML中:
<model type='virtio'/>
综上所述
12.04采取的所有措施是:
- 安装virt-manager,bridge-utils,qemu-kvm和相关软件包
- 确保每个希望使用kvm的用户都在libvirtd组中。
- 如上定义/ etc / network / interfaces(与引用的文章匹配)
- 重新启动,确保已插入以太网并且无线(如果有)已关闭。
- 例如
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
,直接使用来对映像运行kvm ,或者使用virt-manager创建虚拟机,并在“步骤4->高级选项”面板下指定网络Bridge br0。
无需进一步更改网络,功能,模板或配置。
要将新访客中的服务公开到Internet,您应该:
- 准备并配置您需要的任何防火墙服务。
- 在来宾配置或DHCP服务中分配静态地址。
- 如果您使用的是NAT路由器,请打开要实现的服务的端口,将其定向到来宾的IP地址。
记住要测试并重新启用主机的防火墙服务。它可能需要任何条目才能将流量转发给访客。
见https://help.ubuntu.com/community/KVM/Installation,https://help.ubuntu.com/community/KVM/Networking和https://help.ubuntu.com/12.04/serverguide/libvirt。 html。
ifconfig
,brctl show
,brctl showmacs br0
,和ip route
。在来宾:ifconfig
,ip route
,ping 8.8.8.8
,ping <your internet router>
,和traceroute 8.8.8.8
。我不能说我已经按照您的方式配置了kvm,但是我已经开始使用该kvm
命令进行桥接。我确实必须断开无线连接,以便主机可以连接到Internet,并且,如您所引用的说明所述,您需要使用以太网连接到Internet。