使用通常的方式创建macvlan,容器关联macvlan网络,网内其他主机都可以互通访问,但唯独host和container是无法互通的,这是并不是一个错误,而是macvlan特性决定的,网上能搜到解决方法,在这里记录备忘。
解决方案
由于流量无法回传而导致无法互通,所以解决方案就是在host再创建一个macvlan网络,使用这个接口当作一个路由,这样就可以实现网络互通了。
ip link add macvlan-router link eth0 type macvlan mode bridge
ip addr add 192.168.10.33/32 dev macvlan-router
ip link set macvlan-router up
ip route add 192.168.10.32/28 dev macvlan-router
静态地址设置为前一篇文章内--aux-address
设置的ip。
经过上面设置host和container就可以互通了,但是主机重启后设置会丢失,看网上有说可以写到/etc/network/interfaces
里面,但是我用的arch,并没有这个文件,使用下面的方式也是可以的。
使用NetworkManager设置
nmcli con add con-name macvlan-router type macvlan ifname macvlan-router ip4 192.168.10.33/32 dev eth0 mode bridge
nmcli con mod macvlan-router +ipv4.routes "192.168.10.32/28"
以上命令中的网络接口、ip请根据实际情况进行调整
https://kcore.org/2020/08/18/macvlan-host-access/
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_host_configuration_and_guest_installation_guide/app_macvtap