上一节咱们建立了两个 macvlan 并部署了容器,网络结构以下:docker
本节验证 macvlan 之间的连通性。网络
root@host1:~# docker exec bbox01 ping -c 2 172.16.10.11 root@host1:~# docker exec bbox02 ping -c 2 172.16.20.11 不通
bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4。即:同一 macvlan 网络能通讯。ui
root@host1:~# docker exec bbox01 ping -c 2 172.16.10.10 PING 172.16.10.10 (172.16.10.10): 56 data bytes 64 bytes from 172.16.10.10: seq=0 ttl=64 time=0.059 ms 64 bytes from 172.16.10.10: seq=1 ttl=64 time=0.042 ms root@host1:~# docker exec bbox02 ping -c 2 172.16.20.10 PING 172.16.20.10 (172.16.20.10): 56 data bytes 64 bytes from 172.16.20.10: seq=0 ttl=64 time=0.084 ms 64 bytes from 172.16.20.10: seq=1 ttl=64 time=0.061 ms
bbox1 没法 ping 通 bbox2 和 bbox4。即:不一样 macvlan 网络之间不能通讯。但更准确的说法应该是:不一样 macvlan 网络不能 在二层上 通讯。在三层上能够经过网关将 macvlan 连通,下面咱们就启用网关。操作系统
咱们会将 Host 10.0.0.20 配置成一个虚拟路由器,设置网关并转发 VLAN10 和 VLAN20 的流量。固然也能够使用物理路由器达到一样的效果。首先确保操做系统 IP Forwarding 已经启用。code
cuiyongchao@cuiyongchao:~$ sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1 cuiyongchao@cuiyongchao:~$ 输出为 1 则表示启用,若是为 0 可经过以下命令启用: sysctl -w net.ipv4.ip_forward=1
在 /etc/network/interfaces 中配置 vlan sub-interface:blog
auto eth38 iface eth38 inet manual auto eth38.10 iface eth38.10 inet manual vlan-raw-device eth38 auto eth38.20 iface eth38.20 inet manual vlan-raw-device eth38
启用 sub-interface:ip
ifconfig eth38.10路由
ifconfig eth38.20部署
将网关 IP 配置到 sub-interface:table
ifconfig eth38.10 172.16.10.1 netmask 255.255.255.0 up ifconfig eth38.20 172.16.20.1 netmask 255.255.255.0 up
添加 iptables 规则,转发不一样 VLAN 的数据包。
iptables -t nat -A POSTROUTING -o eth38.10 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth38.20 -j MASQUERADE iptables -A FORWARD -i eth38.10 -o eth38.20 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth38.20 -o eth38.10 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth38.10 -o eth38.20 -j ACCEPT iptables -A FORWARD -i eth38.20 -o eth38.10 -j ACCEPT
如今 host1 上位于 mac_net10 的 bbox1 已经能够与 host2 上位于 mac_net20 的 bbox4 通讯了。
下面咱们分析数据包是如何从 bbox1(172.16.10.10)到达 bbox4(172.16.20.11)的。整个过程以下图所示: