sam*_*ers 7 vmware virtualbox bridge nat docker
TL;DR - 当 Docker 看起来很像 NAT 网络时,为什么将它的默认网络称为桥接网络。
让我们先看看如何 -
1) VMWare 或 VirtualBox处理虚拟机的网络。假设主机 IP 是一些随机的 152.50.60.21,网络 CIDR 是 152.50.60.0/24。
桥接网络- 通过此接口连接的任何 VM 都可以在主机所连接的网络上拥有任何空闲 IP。因此,如果 IP 152.50.60.30 空闲,则 VM 可以绑定到此 IP。同样,如果 IP 是免费的,则第二个 VM 可以拥有 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/端口转发配置除外)。但是VM可以通过HOST提供的SNAT访问外部世界/互联网/内联网,即IP'
VMWare Doc 的参考:Understanding Common Networking Configurations
接下来,我们来看看 Docker 端
——Docker 的默认网络
当镜像在 HOST(上面的 IP 为 152.50.60.21)上运行时,使用 Docker 的默认网络(它称之为 Bridge Network),新容器可以获得一个 IP (比如说)来自网络的 172.17.0.13 - 172.16.0.0/12(至少在我的环境中)。同样,第二个容器可以获得 IP 172.17.0.23。为了访问互联网,这些容器依赖于 HOST 提供的 SNAT。除非通过 HOST 提供的端口转发,否则 Internet/Intranet 上的任何机器都无法访问 Container。因此,除了 HOST 之外,容器对世界不可见。看着这个,我会假设 Docker 提供的默认网络是 NAT 网络,但 Docker 喜欢称它为桥接网络。
那么,有人能说一下哪里出了问题,或者我是如何看待桥接/NAT 网络的吗?
Docker 相当于 VMWare 或 VirtualBox 桥接网络的是macvlan。
\n\n\n\n...您可以使用 macvlan 网络驱动程序为每个容器\xe2\x80\x99s 虚拟网络接口分配 MAC 地址,使其看起来像是直接连接到物理网络的物理网络接口。在这种情况下,您需要在 Docker 主机上指定用于 macvlan 的物理接口,以及 macvlan 的子网和网关。您甚至可以使用不同的物理网络接口隔离 macvlan 网络。
\n
\n\n创建 macvlan 网络时,它可以处于桥接模式或 802.1q 主干桥接模式。
\n
\n\n在桥接模式下,macvlan 流量通过主机上的物理设备。
\n
在简单的桥接示例中,您的流量流经 eth0,Docker 使用容器的 MAC 地址将流量路由到容器。对于网络上的网络设备来说,您的容器似乎物理连接到网络。
\n\n$ docker network create -d macvlan \\\n --subnet=172.16.86.0/24 \\\n --gateway=172.16.86.1 \\\n -o parent=eth0 \\\n my-macvlan-net\nRun Code Online (Sandbox Code Playgroud)\n此命令在 eth0 之上创建 MacVLAN 网络,网络名称为 my-macvlan-net。
\n\n\n在 802.1q 主干桥接模式下,流量通过 Docker 动态创建的 802.1q 子接口。这使您可以更精细地控制路由和过滤。
\n
在 802.1q 中继桥接示例中,您的流量流经 eth0 的子接口(在下面的示例中称为 eth0.10),并且 Docker 使用其 MAC 地址将流量路由到您的容器。对于网络上的网络设备来说,您的容器似乎物理连接到网络。
\n\n$ docker network create -d macvlan \\\n --subnet=172.16.86.0/24 \\\n --gateway=172.16.86.1 \\\n -o parent=eth0.10 \\\n my-8021q-macvlan-net\nRun Code Online (Sandbox Code Playgroud)\n这将创建 macvlan 网络,并具有父 eth0.10。
\n对于来自 VMWare 或 VirtualBox 的人来说,这个命名似乎令人困惑,但它确实存在。
\n您可以在此处查看 macvlan 的另一个教程(包括为容器分配 IP 地址)。
\n| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |