博主的系统是 Ubuntu 20.04.3 LTS,用于登录校园网的浏览器是 Google Chrome版本是 92.0.4515.159。在浏览器中输入校园网登录链接,结果一直返回的是 无法访问此网站,如下图所示:

docker 网络拥堵 docker网段冲突_docker 网络拥堵

01 检查网络连接

1.1 物理链接

出现这种情况,我的第一反应就是可能是线缆或者路由器出了问题。

首先,我插拔了几次主机的网线,没有解决问题,仍然弹出一样的报错页面。

然后,检查了路由器连接情况,并重启了路由器,仍然没有解决。

最后,我将接入本机的线缆插到一台 Windows 系统的主机上,发现可以顺利打开校园网登录页面,由此得出物理连接并没有问题。

1.2 网络链接

进一步考虑,网络链接故障也有可能是防火墙或者网络代理导致的

使用如下命令先关闭防火墙:

sudo iptables -F

浏览器重试校园网登录链接之后仍然报错,然后如下图尝试关闭网络代理,也无法解决问题,由此得出网络连接也没有问题。

docker 网络拥堵 docker网段冲突_校园网_02

02 检查浏览器

检查浏览器是否存在问题直接方法就是换一个浏览器访问,我将校园网登录链接复制到本机的Firefox浏览器上进行访问,仍然报错且更加抽象,不过也证明了应该不是浏览器的问题。

如果你更换浏览器后可以成功登录,那么可以推断出是原浏览器的问题,而且 Chrome 的报错是ERR_ADDRESS_UNREACHABLE,根据这个保存百度可以得到一些解决方法,主要的操作就是清缓存。

2.1 Cookie 缓存

首先可以尝试清除 Chrome 的数据缓存,在选项栏中选择设置 -> 隐私设置和安全性 -> 清除浏览数据。

docker 网络拥堵 docker网段冲突_校园网_03

2.2 DNS 缓存

如果,仍不能解决问题,可以尝试情况 Chrome 的 DNS 缓存,在浏览器中输入 URL chrome://net-internals/#dns,然后点击 clean 清除 dns 缓存,如下图所示

docker 网络拥堵 docker网段冲突_docker_04

03 检查网络接口

对浏览器的缓存清理之后,仍然没有解决我无法访问校园网登录页面的问题,最终考虑到是否可能存在校园网登录服务器IP与本机的网络接口存在冲突的问题。

使用 ifconfig 命令查看本机网络接口如下,可以看到第一个网络接口的网段与校园网登录的访问IP172.18.18.60 冲突,导致本机一直无法正确访问校园网登录链接

docker 网络拥堵 docker网段冲突_ubuntu_05


尝试使用 ifconfig 关闭冲突的网络接口 ifconfig <interface name> up/down,up 是打开网路接口,down是关闭网络接口

sudo ifconfig br-4f97b10a424b down

执行上述命令之后,可以看到冲突网络接口已经被关闭

docker 网络拥堵 docker网段冲突_网络_06


再次尝试使用浏览器打开校园网登录链接,终于见到了期待已久的页面,问题解决!!!

docker 网络拥堵 docker网段冲突_ubuntu_07

04 解决后记-Docker虚拟网卡网段冲突

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host,网络也是docker的弱势所在,往往会带来很多问题,网段冲突就是其中之一。Docker 网络原理可以参考Docker网络详解——原理篇

所以使用 ifconfig 命令列出的 br-xxx 的网桥一般是docker创建的

还是以上面的例子他的虚拟网卡名称为 br-4f97b10a424b

在终端中使用命令 docker network ls 查看 docker 的网络如下

docker 网络拥堵 docker网段冲突_docker 网络拥堵_08


可以看到冲突的虚拟网卡,使用如下命令可查看有哪些容器在使用

docker inspect <网桥id>
# 或者
docker network inspect <网桥id>

docker 网络拥堵 docker网段冲突_docker 网络拥堵_09


如果没有容器使用可以使用如下命令删掉它:

docker network rm <网桥id或名字>

参考资料

Linux (ifconfig/docker) 移除网桥/虚拟网卡

Docker网络详解——原理篇