KVM 桥接(二)

先前写的一篇总结只是说了下原理 , 对于实际的生产应用并不可行 . 下面我将分 Ubuntu(10.04) 和 CentOS(5.5) 来分别说明如何在启动时加载 .
二者的原理是相同的 , 只不过实现的方式有些小差异 :

Ubuntu

下面是我的 /etc/network/interfaces 文件 , 根据你的实际情况修改即可
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static

auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user root

auto br0
iface br0 inet static
       address 10.20.156.203
       netmask 255.255.255.0
       gateway 10.20.156.20
       bridge_ports eth0
       bridge_stp off
       bridge_maxwait 5
       bridge_fd 5

注意 : 开机后要将 network-manager 关闭
# service network-manager stop

CentOS

# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=10.20.156.203
NETMASK=255.255.255.0
ONBOOT=yes

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0

重启网络服务
# service network restart

注意1 : 如果你是远程执行的 , 在最后重启 network 之前 , 一定要确保配置文件的正确 ! 一旦错误 , 你只能跑到物理机上去重启了 :(
注意2 : KVM 不支持 32 位的 CentOS ; 安装 CentOS 的时候不要将 Xen 的虚拟化包选中 ! 我之前没注意选了 Xen 的虚拟方式 , 导致最后安装的是 Xen 的内核 .

我的服务器上装的是 64 位的 CentOS 5.5 . 使用 VNC 连接 , 在重启网络的时候 , VNC 不到 3秒的样子就恢复了 .

下面是我的 ifconfig
br0    Link encap:Ethernet  HWaddr 00:22:19:CD:2D:98
         inet addr:10.20.156.5  Bcast:10.20.156.255  Mask:255.255.255.0
         inet6 addr: fe80::222:19ff:fecd:2d98/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:472651 errors:0 dropped:0 overruns:0 frame:0
         TX packets:302088 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:383581004 (365.8 MiB)  TX bytes:388976898 (370.9 MiB)

eth0  Link encap:Ethernet  HWaddr 00:22:19:CD:2D:98
         inet6 addr: fe80::222:19ff:fecd:2d98/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:452979 errors:0 dropped:0 overruns:0 frame:0
         TX packets:297859 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:390617986 (372.5 MiB)  TX bytes:111711416 (106.5 MiB)
         Interrupt:169 Memory:f8000000-f8012800

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:222686 errors:0 dropped:0 overruns:0 frame:0
         TX packets:222686 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:268036887 (255.6 MiB)  TX bytes:268036887 (255.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:1763 errors:0 dropped:0 overruns:0 frame:0
         TX packets:535 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:121537 (118.6 KiB)  TX bytes:97564 (95.2 KiB)

vnet0 Link encap:Ethernet  HWaddr B6:35:67:FC:D0:EA
         inet6 addr: fe80::b435:67ff:fefc:d0ea/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:27163 errors:0 dropped:0 overruns:0 frame:0
         TX packets:219988 errors:0 dropped:0 overruns:0 carr

  • adam

    单独一个虚拟姬的话,br0是不需要的。br0主要是用在多个虚拟姬的情况下,把多个tap接口做成一个交换设备,然后通过br0做成一个相当于思科里面的vlan口参与三层的nat。
    tap的配置可以不用系统自带的脚本。
    kvm启动参数中的-if tap,[name=NAME][,script=SCRIPT][,downscript=SCRIPT]中的SCRIPT来指定启动/关闭设备的脚本路径。不配置的话默认是用/etc/qemu-ifup,/etc/qemu-ifdown的脚本