我有一些桥接网络,我不知道它们来自哪里:
$ ifconfig | grep -o "^br-\w*"
br-4e3069271b9c
br-919ad27f74b2
br-e448c7cbb558
br-e6840866c3b6
br-636926a06053
(我怀疑安装了 docker、vmware 或 virtualbox)。
问题是,这些桥接网络以某种方式干扰一些内网地址,同时其他内网地址仍然有效:
$ ping some.intranet.tld
From 172.21.0.1 icmp_seq=1 Destination Host Unreachable
From 172.21.0.1 icmp_seq=2 Destination Host Unreachable
From 172.21.0.1 icmp_seq=3 Destination Host Unreachable
$ ifconfig | grep -C 1 "172.21.0.1"
br-636926a06053 Link encap:Ethernet HWaddr 02:42:af:36:20:65
inet addr:172.21.0.1 Bcast:172.21.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
发出后sudo ifconfig br-636926a06053 down
一切恢复正常。
PING some.intranet.tld (12.23.45.67) 56(84) bytes of data.
64 bytes from some.intranet.tld (12.23.45.67): icmp_seq=1 ttl=122 time=11.7 ms
但重新启动后问题再次出现,而且我不确定关闭该连接是否会产生任何负面影响。
如何找出哪个程序启动了这些桥接网络以及如何消除该问题?
更新:
这些桥梁似乎来自虚拟机:
$ sudo grep br-636926a06053 /var/log/syslog.1
Aug 7 08:58:56 hostname vmnet-natd: RTM_NEWLINK: name:br-636926a06053 index:7 flags:0x00001002
Aug 7 08:58:56 hostname vmnetBridge: RTM_NEWLINK: name:br-636926a06053 index:7 flags:0x00001002
Aug 7 08:58:56 hostname NetworkManager[1212]: <info> [1533625136.8516] manager: (br-636926a06053): new Bridge device (/org/freedesktop/NetworkManager/Devices/5)
答案1
毫无疑问是 Docker。 VMware 仅检测到它们的出现(例如:将它们显示在 GUI 中或可能更改某些网络规则(natd?)),就像ip monitor link
实时命令一样。
在docker network create
它暗示了这一点:
指定高级选项
当您创建网络时,引擎默认为网络创建一个不重叠的子网。该子网不是现有网络的细分。它纯粹是为了 IP 寻址的目的。您可以覆盖此默认值并使用 --subnet 选项直接指定子网值。在桥接网络上,您只能创建一个子网:
$ docker network create --driver=bridge --subnet=192.168.0.0/16 br0
没有写的是,如果没有另外说明,默认选择从 开始172.17.0.0/16
,每个后续网络都会继续前进。172.31.0.0/16
我无法明确找到它,但大多数示例表明新创建的桥梁都是/16
的一部分172.16.0.0/12
,例如:Multiple Docker Networks
没有明确创建--subnet
两个子网172.29.0.0/16
。172.30.0.0/16
如果提供的话,我很乐意添加对默认行为的明确引用。
为了消除这个问题,您应该检查 Docker 中的哪些自动化部分(可能本身就是一个特权容器等)创建了这些网络(当它们作为接口激活时您已经登录,这可能不是它们最初在 Docker 中创建时的情况)配置,但一个简单的docker network ls
应该确认这一切),以及如何更改其默认网络设置。我确信还有更激进的方法,例如创建一个网络来保留,这样 Docker 就不会创建相同的网络,然后通过 Docker 方法(如果可用)或像您一样将其保留下来ip link set br-somenetworkid down
。