linux【Docker】容器macvlan网络模式下容器与宿主机互通
0x00
一般在macvlan模式下同网段的其他机器可以和容器互通,但宿主不能和容器互通,这是在macvlan模式设计的时候为了安全而禁止了宿主机和容器直接通信。
如果想要实现互通,有个曲线救国的方法,就是macvlan与macvlan之间可以互通,只需要在宿主机再创建一个macvlan网络,然后修改路由,让数据经过这个macvlan达到互通的目的。
0x01
假设现有网段为192.168.1.0/24
的网络:
名字 | ip | 接口 |
---|---|---|
宿主机 | 192.168.1.10 | eth0 |
容器 | 192.168.1.20 | macvlan |
建立一个名为macvlan2
的macvlan
接口,并分配一个ip:
名字 | ip | 接口 |
---|---|---|
macvlan2 | 192.168.1.15 | macvlan |
命令:
ip link add macvlan2 link eth0 type macvlan mode bridge
ip addr add 192.168.1.15 dev macvlan2
ip link set macvlan2 up
修改路由,让宿主机到容器(192.168.1.20)
的数据经过macvlan2
:
ip route add 192.168.1.20 dev macvlan2
0x02
宿主机 访问 容器的ip:192.168.1.20
容器 访问 宿主机ip:192.168.1.15
0x03
保存网络设置
编辑vi /etc/rc.local
sudo ip link add macvlan2 link eth0 type macvlan mode bridge
sudo ip addr add 192.168.10.10 dev macvlan2
sudo ip link set macvlan2 up
sudo ip route add 192.168.10.6 dev macvlan2
sleep 5
sudo mount -t nfs -o nosuid,noatime,nodiratime,nodev,noexec,rsize=131072,wsize=131072 -o tcp 192.168.10.100:/mnt/user/Media /mnt/disk0
sudo service docker restart
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。