TL; DR -为什么当Docker看起来很像NAT Network时,为什么将它称为默认网络称为Bridge Networking。
让我们先来看看-
1) VMWare或VirtualBox 处理虚拟机的网络。假设主机IP是随机的152.50.60.21,网络CIDR是152.50.60.0/24。
桥接网络-通过此接口连接的任何VM可以在主机连接到的网络上具有任何空闲IP。因此,如果IP 152.50.60.30可用,则VM可以绑定到该IP。同样,如果该第二个虚拟机是免费的,则其IP可能为152.50.60.32。
桥接网络将虚拟机的连接连接到主机所连接的同一网络。 Internet上的任何计算机都可以访问VM,VM可以直接访问Internet(当然,如果HOST网络已连接到Internet)。
NAT网络-NAT是与主机连接的网络不同的网络。而且VMWare可以接受任何有效的CIDR(为了不使事情复杂化,我仅指私有保留块。尽管正确,任何CIDR都可以。)安全地,这个新的NAT网络在主机上创建并且只能在主机上访问可以具有CIDR 10.0.0.0/8或172.16.0.0/12或192.168.0.0/16(或这些网络的任何子网)。我选择10.0.0.0/8。
因此,在主机上旋转并通过NAT网络连接的两个VM可以具有IP 10.0.3.3和10.0.3.6
在NAT网络上,VM对主机以外的外部世界是不可见的,即,VM对外部世界是不可访问的(主机上的DNAT /端口转发配置除外)。但是,尽管HOST提供了SNAT,但VM仍可以访问外部世界/互联网/内联网,即VM的IP永远不会暴露给外部世界。
VMWare Doc的参考:了解常见的网络配置
接下来,让我们看一下Docker方面-
Dockers默认网络
当使用Docker的默认网络(其称为网桥网络)在HOST(其上层IP为152.50.60.21)上运行映像时,新容器可以从网络中获取IP(例如)172.17.0.13-172.16。 0.0 / 12(至少在我的环境中)。同样,第二个容器可以获得IP 172.17.0.23。这些容器依赖于HOST提供的SNAT来访问Internet。除非通过HOST提供的端口转发,否则Internet / Intranet上的任何计算机都无法访问容器。因此,除了HOST,这些容器对世界是不可见的。
对此,我假设Docker提供的默认网络是NAT Network,但是Docker喜欢将其称为Bridge Network。
那么,谁能说出事情搞砸了,或者我怎么看待网桥/ NAT网络呢?
答案 0 :(得分:0)
Docker等同于VMWare或VirtualBox桥接网络为 macvlan 。
...您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其看起来像是直接连接到物理网络的物理网络接口。在这种情况下,您需要在Docker主机上指定一个物理接口以用于macvlan,以及macvlan的子网和网关。您甚至可以使用不同的物理网络接口隔离macvlan网络。
创建macvlan网络时,它可以处于桥接模式或802.1q中继桥接模式。
在桥接模式下,macvlan流量通过主机上的物理设备。
在简单的网桥示例中,您的流量流经eth0,而Docker使用其MAC地址将流量路由至您的容器。对于网络上的网络设备,您的容器似乎已物理连接到网络。
Example of macvlan bridge mode:
$ docker network create -d macvlan \
--subnet=172.16.86.0/24 \
--gateway=172.16.86.1 \
-o parent=eth0 \
my-macvlan-net
此命令在eth0顶部使用网络名称my-macvlan-net创建MacVLAN网络。
在802.1q中继桥接模式下,流量通过Docker动态创建的802.1q子接口。这样,您就可以更精细地控制路由和过滤。
在802.1q中继网桥示例中,您的流量流经eth0的子接口(在下面的示例中称为eth0.10),并且Docker使用其MAC地址将流量路由到您的容器。对于网络上的网络设备,您的容器似乎已物理连接到网络。
Example of macvlan 802.1q trunk bridge mode:
$ docker network create -d macvlan \
--subnet=172.16.86.0/24 \
--gateway=172.16.86.1 \
-o parent=eth0.10 \
my-8021q-macvlan-net
这将创建macvlan网络,并具有父eth0.10。
命名似乎使来自VMWare或VirtualBox的人感到困惑,但是它确实存在。
您可以看到macvlan的另一本教程(包括为容器分配IP地址)here.