上一节我们
创建了两个 macvlan 并部署了容器
,网络结构如下:
本节验证 macvlan 之间的连通性。
bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4。即:同一 macvlan 网络能通信。
bbox1 无法 ping 通 bbox2 和 bbox4。即:不同 macvlan 网络之间不能通信。但更准确的说法应该是:不同 macvlan 网络不能
在二层上
通信。在三层上可以通过网关将 macvlan 连通,下面我们就启用网关。
我们会将 Host 192.168.56.101 配置成一个虚拟路由器,设置网关并转发 VLAN10 和 VLAN20 的流量。当然也可以使用物理路由器达到同样的效果。首先确保操作系统 IP Forwarding 已经启用。
输出为 1 则表示启用,如果为 0 可通过如下命令启用:
sysctl -w net.ipv4.ip_forward=1
在 /etc/network/interfaces 中配置 vlan sub-interface:
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)的。整个过程如下图所示: