造成原因及解决方法说明
原因是部署 openWRT 系统时使用到了 docker 的 macvlan 模式,这个模式通俗一点讲就是在一张物理网卡上虚拟出两个虚拟网卡,具有不同的MAC地址,可以让宿主机和docker同时接入网络并且使用不同的ip,此时 docker 可以直接和同一网络下的其他设备直接通信,相当的方便,但是这种模式有一个问题,宿主机和容器是没办法直接进行网络通信的,如宿主机ping容器的ip,尽管他们属于同一网段,但是也是ping不通的,反过来也是。因为该模式在设计的时候,为了安全禁止了宿主机与容器的直接通信,不过解决的方法其实也很简单——宿主机虽然没办法直接和容器内的 macvlan 接口通信,但是只要在宿主机上再建立一个 macvlan,然后修改路由,使数据经由该 macvlan 传输到容器内的 macvlan 即可,macvlan 之间是可以互相通信的。
具体步骤记录
新增一个mynet的 macvlan 接口 (注意不要和原容器的macvlan网卡重名)
ip link add mynet link eth0 type macvlan mode bridge
为该接口分配ip,并启用
ip addr add 192.168.8.10 dev mynet
ip link set mynet up
添加静态路由使宿主机与openWRT的通信报文使用mynet进行
ip route add 192.168.8.111 dev mynet
测试效果
docker exec -it openwrt ping 192.168.8.102 -c 3
PING 192.168.8.102 (192.168.8.102): 56 data bytes
64 bytes from 192.168.8.102: seq=0 ttl=64 time=0.508 ms
写入开机自启动脚本中
cat >> /etc/rc.local << EOF
ip link add mynet link eth0 type macvlan mode bridge
ip addr add 192.168.8.10 dev mynet
ip link set mynet up
ip route add 192.168.8.111 dev mynet
EOF
确保开机自启脚本添加了 可执行 权限
chmod a+x /etc/rc.local
ip link add mynet link enp2s0 type macvlan mode bridge
ip addr add 192.168.0.133 dev mynet
ip link set mynet up
ip route add 192.168.0.111 dev mynet
无回应:“docker安装openwrt和宿主机不通问题解决”