0%

在ubuntu中搭建网桥——虚拟机相关

这个是常识了。

  虚拟机跟宿主机通常有三种连接方式:NAT,网桥,host-only。简单的说,NAT(地址转换)是宿主机连接外网,同时充当NAT交换机,虚拟机都从宿主机连接外网,外网看不到虚拟机。网桥是在宿主机前加一个虚拟网桥,虚拟机和宿主机都连接到这个网桥上,此时虚拟机和宿主机处于同一个水平,也就是说,虚拟机和宿主机都可通过网桥连接外网,外网也可看到虚拟机和素主机。host-only的话就是虚拟机(>=1个)和宿主机(1个)搭建一个虚拟局域网,宿主机本身和外网连接,这样有一个虚拟局域网和一个外网网络,宿主机同时出现在这两个网当中,不过这两个网络不相连,所以是host-only。简单的表格如下:

    宿主机可连外网	虚拟机可连外网	宿主机可连虚拟机	外网可连虚拟机
NAT	      Y	         Y	           Y	         N
网桥	      Y	         Y	           Y	         Y
host-only     Y	         N	           N	         N
  1. 处理network manager
      linux别的版本中不知道,在在ubuntu12.04中搭建网桥是要关掉network manager,就是平时联网用的那个东西:

     sudo service network-manager stop
    

平时关闭开启服务都用`service someting stop/start/restart`,要再打开只用把stop改成start就可以。有人说也可以用:

    sudo stop network-manager

这个命令比较新,还是不推荐了。关闭该服务是因为它会重置你手动配置的网桥。

  1. 配置文件
      设置网桥有两种情况,一个是本身联网使用动态ip地址,二是使用静态ip地址。一般都是使用动态的,就先说动态的:
    sudo gedit /etc/network/interfaces

用vim还是gedit都行,只要能改。如果开始没动该文件,你会看到它像这样:
auto lo
iface lo inet loopback
要改成这样:
auto lo
iface lo inet loopback

    # The primary network interface
    #auto eth0
    #iface eth0 inet dhcp

    auto br0
    iface br0 inet dhcp
            bridge_ports eth0
            bridge_fd 9
            bridge_hello 2
            bridge_maxage 12
        	bridge_stp off

有的源文件中有auto eth0 iface eth0 inet dhcp这两行,注释掉。
接下来静态的,只要把interfaces文件修改成这样:
auto lo
iface lo inet loopback

    # The primary network interface
    #auto eth0
    #iface eth0 inet dhcp

    auto br0
    iface br0 inet static
            address 192.168.1.200
            broadcast 192.168.1.255
            netmask 255.255.255.0
            gateway 192.168.1.254
            bridge_ports eth0
            bridge_fd 9
            bridge_hello 2
            bridge_maxage 12
            bridge_stp off

地址那里设置成符合自己网络的地址。

  1. 重启联网服务
    sudo /etc/init.d/networking restart

查是否设置成功: `$ifconfig`
看到有br0之后就是网桥设置成功了。

  1. 遇到的问题
  • 关闭network-manager后我试着重开启该服务,然后再关闭,告诉我`no such instance: ,重启后解决。网上说的找到运行的进程杀掉,没试,因为我找到好几个跟这个服务相关的进程。
  • 出错后删除网桥步骤是:把修改的文件还原,再运行:
    #ip link set br0 down
    #brctl delbr br0

解决。