解决容器在macvlan模式下容器和宿主机同网段但不通的情况

Docker项目 · 2023-10-06 · 113 人浏览

解决方法来源:https://smalloutcome.com/2021/07/18/Docker-%E4%BD%BF%E7%94%A8-macvlan-%E7%BD%91%E7%BB%9C%E5%AE%B9%E5%99%A8%E4%B8%8E%E5%AE%BF%E4%B8%BB%E6%9C%BA%E7%9A%84%E9%80%9A%E4%BF%A1%E8%BF%87%E7%A8%8B/

原因

  • 宿主机在物理层,默认通过 eth0 转发同网段流量
  • 容器在macvlan0层,通过->macvlan0->eth0传递流量
    从上面来看,其实从容器到宿主机是可以发出去的,但是从宿主机到容器却直接从eth0发出去了。

解决思路:

  • 建立一个虚拟网卡,桥接macvlan0和host的物理网卡eth0
  • 通过路由将容器IP指向虚拟网卡,这样来回就都通了。

配置命令

# 开启宿主机网卡的混杂模式,这样可以同一接口使用不同MAC地址
ip link set eth0 promisc on

# 添加一个虚拟网卡,将eth0和macvlan网络层桥接起来
ip link add link eth0 macvlan0-host type macvlan mode bridge
# 启用网卡
ip link set dev macvlan0-host up

# 再添加一个表态路由,将容器流量通过桥接网卡转发到macvlan网络层
ip route add 10.1.1.11 dev macvlan0-host
# 这样配置完成之后,就通过路由分流,将10.1.1.11的流量转发到macvlan网络层了。
鲁公安备37050202371261号 | 鲁ICP备2021032059号-1