如果想在KVM 的虚拟机上使用桥接网络需要在宿主机上添加一个网桥设备, 然后让新建虚拟机就可以使用网桥来和外网通讯, 在外部看来没有任何区别


简单画个草图:


        Internet

           |

         route

           |

         bridge0 -binding- eth0 (bridge设备是虚拟出来的绑定在 eth0 上)

           |

         vnet(N)  ----- (这个就是虚拟机用来通讯的虚拟网卡,他用来连接 虚拟机的eth(N) ) 


注意 :最好用console 连接 或者本地操作,因为bind网卡的时候可能会与主机失联


一 . 命令的方式创建


# brctl addbr br0         //新建网桥 br0

# brctl addif br0 eth0    //为网桥 br0 添加一块网口,是网口因为 添加网桥后就相当于虚拟了一个桥设备,但是这个设备没有网口我们需要为他添加一块网卡作为它的网口


# ifconfig br0 10.10.10.254/16    //为这个网桥设备指定IP,用来管理机器

# ifconfig eth0 0.0.0.0           //因为eth0 已经是个网口了 就不需要IP了

添加路由表

# route add default gw 10.10.10.1 dev br0   // 10.10.10.1 是我的网络网关,走 br0 设备

# echo 1 >  /proc/sys/net/ipv4/ip_forward   // 启用转发功能

# sysctl -p

# brctl show        //以下信息是虚拟机启动后 vnet0 已经在 br0 下工作了

bridge name bridge id STP enabled interfaces

br0 8000.00e04c05d9c1 yes eth0

vnet0


此时再创建虚拟机就可以看到可以使用网桥设备作为网卡了


二 . 或者用编辑配置文件的方式, 文件修改完之后重启网络服务 , 执行 sysctl -p


eth0 文件改为:


/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

HWADDR=00:e0:4c:05:d9:c1

ONBOOT=yes

BRIDGE=br0                   //桥设备为 br0

#IPADDR=10.10.250.250

#NETMASK=155.155.0.0

#GATEWAY=10.10.10.1

-------------------------------

新建 br0 配置文件


/etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0              //设备名 br0

ONBOOT=yes

TYPE=Bridge             //设备类型为Bridge

BOOTPROTO=none

IPADDR=10.10.250.1

NETMASK=255.255.0.0

GATEWAY=10.10.10.1

STP=on

DELAY=0

------------------------------


在 sysctl.conf 文件添加这些条目,或者编辑这些条目为下面的值

/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

------------------------------