macvlan 網絡隔離和連通 - 天天5分鐘玩轉 Docker 容器技術(57)

上一節咱們建立了兩個 macvlan 並部署了容器,網絡結構以下:docker

本節驗證 macvlan 之間的連通性。

網絡

bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4。即:同一 macvlan 網絡能通訊。學習

bbox1 沒法 ping 通 bbox2 和 bbox4。即:不一樣 macvlan 網絡之間不能通訊。但更準確的說法應該是:不一樣 macvlan 網絡不能 在二層上 通訊。在三層上能夠經過網關將 macvlan 連通,下面咱們就啓用網關。操作系統

咱們會將 Host 192.168.56.101 配置成一個虛擬路由器,設置網關並轉發 VLAN10 和 VLAN20 的流量。固然也可使用物理路由器達到一樣的效果。首先確保操做系統 IP Forwarding 已經啓用。ip

輸出爲 1 則表示啓用,若是爲 0 可經過以下命令啓用:路由

sysctl -w net.ipv4.ip_forward=1部署

在 /etc/network/interfaces 中配置 vlan sub-interface:table

auto eth2容器

iface eth2 inet manual配置

auto eth2.10

iface eth2.10 inet manual

vlan-raw-device eth2

auto eth2.20

iface eth2.20 inet manual

vlan-raw-device eth2


啓用 sub-interface:

ifup eth2.10

ifup eth2.20


將網關 IP 配置到 sub-interface:

ifconfig eth2.10 172.16.10.1 netmask 255.255.255.0 up

ifconfig eth2.20 172.16.20.1 netmask 255.255.255.0 up


添加 iptables 規則,轉發不一樣 VLAN 的數據包。

iptables -t nat -A POSTROUTING -o eth2.10 -j MASQUERADE

iptables -t nat -A POSTROUTING -o eth2.20 -j MASQUERADE

 

iptables -A FORWARD -i eth2.10 -o eth2.20 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -i eth2.20 -o eth2.10 -m state --state RELATED,ESTABLISHED -j ACCEPT

 

iptables -A FORWARD -i eth2.10 -o eth2.20 -j ACCEPT

iptables -A FORWARD -i eth2.20 -o eth2.10 -j ACCEPT


當前網絡拓撲以下圖所示:

如今 host1 上位於 mac_net10 的 bbox1 已經能夠與 host2 上位於 mac_net20 的 bbox4 通訊了。

下面咱們分析數據包是如何從 bbox1(172.16.10.10)到達 bbox4(172.16.20.11)的。整個過程以下圖所示:

① 由於 bbox1 與 bbox4 在不一樣的 IP 網段,跟據 bbox1 的路由表:

數據包將發送到網關 172.16.10.1。

② 路由器從 eth2.10 收到數據包,發現目的地址是 172.16.20.11,查看本身的路由表:

因而將數據包從 eth2.20 轉發出去。

③ 經過 ARP 記錄的信息,路由器可以得知 172.16.20.11 在 host2 上,因而將數據包發送給 host2。

④ host2 根據目的地址和 VLAN 信息將數據包發送給 bbox4。

macvlan 網絡的連通和隔離徹底依賴 VLAN、IP subnet 和路由,docker 自己不作任何限制,用戶能夠像管理傳統 VLAN 網絡那樣管理 macvlan。

至此,macvlan 就討論完了,恭喜你們又學完一個網絡方案,下一節咱們開始學習 flannel。

二維碼+指紋.png

相關文章
相關標籤/搜索