红联Linux门户
Linux帮助

Ubuntu网卡桥接及桥接后网络不通的解决方法

发布时间:2015-08-17 15:39:17来源:dai451954706作者:Oooover

最近在学习Docker,需要将局域网中不同机器上运行的Docker网络调通,打算使用桥接的方式。下面记录了一些相关的操作及遇到的问题和解决方法。


1. 安装bridge-utils(系统为Ubuntu 15.04)

apt-get install -y bridge-utils


2. 停掉Docker服务

systemctl stop docker.service


3. 删除Docker创建的默认虚拟网卡

ip link set dev docker0 down

brctl delbr docker0


4. 修改网卡的配置文件

vi /etc/network/interfaces      

auto p1p1 
iface p1p1 inet static 
address 10.0.40.11 
netmask 255.255.255.0 
network 10.0.40.0 
broadcast 10.0.40.255 
gateway 10.0.40.1 
dns-nameservers 114.114.114.114 

将上面的内容修改为(完整配置):

source /etc/network/interfaces.d/*

auto lo 
iface lo inet loopback
   
auto p1p1 
iface p1p1 inet manual 

auto br0 
iface br0 inet static 
address 10.0.40.11 
network 10.0.40.0 
netmask 255.255.255.0 
broadcast 10.0.40.255 
gateway 10.0.40.1 
bridge_ports p1p1 
dns-nameservers 114.114.114.114 
# bridge_stp off
bridge_fd 0 
bridge_maxwait 0


5. 重启网卡
/etc/network/networking restart

重启之后,执行 ifconfig ,可以看到会存在一个br0的虚拟网卡


6. 修改docker的桥接配置

echo 'DOCKER_OPTS="-b=br0"' >> /etc/default/docker
systemctl start docker.service


OK,现在桥接已经配置,Docker的桥接已经绑定到br0上了。


遇到的问题:由于参照网上关于网卡桥接的配置,几乎所有的资料都说需要在 /etc/network/interfaces中br0的配置中有一行:  bridge_stp off ,但是每次修改配置文件,重启网卡后,网络就会不通,有时还能通几秒,可以执行几条命令,但是随后又会断网(MD,在逗我玩呢!)。然后,我花了整整一天时间在寻找问题所在,包括检查路由、IP和网关设置、Mac地址绑定等等,但是还是会断网。


最后,查了不知多少资料,偶然在http://blog.csdn.net/cybertan/article/details/8160102中看到一个关于STP的说明:

建立bridge后的状态是让网络接口eth0进入混杂模式(promiscuous mode,接收网络中所有数据包),网桥br0进入转发状态(forwarding state),而且br0和eth0有相同的MAC地址,一般也会得到和eth0相同的IP。“brctl stp br0 on”是打开br0的STP协议,STP是生成树协议(Spanning Tree Protocol),它主要是为了避免在建有bridge的以太网LAN中出现桥回路(bridge loop)。如果不打开STP,则可能出现回路从而导致建有bridge的主机网络不畅通。 


所以,瞬间明白为什么网络不通了:在服务器内部成环了!于是果断将:bridge_stp off 一行注释掉,再重启网卡,瞬间网络就通了。被这个问题折腾了两三天,终于搞定了。


VirtualBox下Ubuntu利用桥接方式上网:http://www.linuxdiyf.com/linux/6345.html

Ubuntu下Docker固定IP配置及桥接:http://www.linuxdiyf.com/linux/10143.html

详细介绍Ubuntu VirtualBox的桥接网络配置:http://www.linuxdiyf.com/linux/273.html