实现在两台宿主机下的docker container 中实现多机器通讯
基于我的实验背景
上位机:ubuntu 20.04 (docker humble 22.04)
下位机:ubuntu 22.04(docker noetic 20.04)
目标:实现在上位机中的docker container 容器的22.04环境去成功远程访问 非同网段的下位机的20.04的container容器
具体的参考链接
参考连接
参考链接
参考链接
参考链接
实现流程
我的下位机再此命名为:sunrise
我的上位机在此命名为:zhaobojun
构建自定义网桥:目的是实现在不同网段的docker 通讯
构建网桥
zhaobojun
#创建网桥
docker network create --driver bridge --ipam-driver default --subnet 192.168.20.0/24 --gateway 192.168.20.1 docker-net-bridge
# 查看网桥
docker network ls
3fc08758bacc docker-net-bridge bridge local
sunrise
#创建网桥
docker network create --driver bridge --ipam-driver default --subnet 192.168.25.0/24 --gateway 192.168.25.1 docker-net-bridge
构建网桥能够避免修改docker 0 的默认固定的172.17.0.1的网段 我觉得有一定的好处
添加路由规则
zhaobojun
#上位机zhaobojun中添加下位机的路由规则(主机2的IP和网段)
route add -net 192.168.25.0/24 gw 192.168.31.67
sunrise
#创建网桥(在主机2中添加主机1的ip和网段)
route add -net 192.168.20.0/24 gw 192.168.31.105
参考防火墙规则
最终参考文章
添加防火墙规则
zhaobojun
#开启路由转发
iptables -P FORWARD ACCEPT
iptables -P FORWARD ACCEPT
iptables -A FORWARD -s 192.168.31.0/24 -j ACCEPT #允许下位机的网关
#配置上位机zhaobojun的iptables规则
iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -d 192.168.25.0/24 -j MASQUERADE
sunrise
sudo route add -net 192.168.20.0/24 gw 192.168.31.105
sudo iptables -t nat -F POSTROUTING
sudo iptables -A FORWARD -s 192.168.31.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.25.0/24 -d 192.168.20.0/24 -j MASQUERADE
路由持久化
zhaobojun
sudo vim / etc/rc.local
route add -net 192.168.25.0/24 gw 192.168.31.105
sunrise
sudo vim / etc/rc.local
route add -net 192.168.20.0/24 gw 192.168.31.67
每个容器内部需要的net工具包
#安装测试工具
apt-get update
#安装ping工具
apt-get install inetutils-ping -y
#安装ip查看工具
apt-get install net-tools -y
#通过nmtui去配置网桥是很好的方法 ——推荐
sudo nmtui
然后添加网桥即可
zhaobojun
sunrise
最后成功通讯的结果
超宝藏博客
# 查看是否开启ip转发,如果为1则开启
cat /proc/sys/net/ipv4/ip_forward