【混合云组网实战】Docker部署内网互通服务实现本地网段访问公有云VPC私网前言在企业混合云架构、本地开发环境对接云端资源的场景中本地局域网与云端VPC内网互通是高频刚需。相比于复杂的专线方案用Docker快速搭建轻量内网互通工具成本低、部署快、易维护完美适配开发测试、小规模内网互联场景。本文手把手教你基于Docker完成部署全程命令可直接复制附带真实部署验证结果实现本地192.168.42.0/24网段所有主机无缝访问公有云VPC10.0.0.0/16内网资源新手也能一步到位适用场景本地开发机访问云端内网服务、混合云内网互通、局域网设备统一访问云端资源核心优势Docker容器化部署、一键启动、配置简单、无需额外硬件一、部署环境准备1.1 服务器信息梳理设备角色内网IP公网IP所属网段核心作用云端服务节点公有云CVM10.0.12.1042.136.159.8810.0.0.0/16公有云VPC部署内网互通服务端本地网关节点本地虚拟机192.168.42.128-192.168.42.0/24本地局域网部署客户端做流量转发网关本地测试主机192.168.42.129-192.168.42.0/24本地局域网验证全网段互通效果1.2 前置必备条件云端节点、本地网关节点均已安装Docker Docker Compose且服务正常启动公有云安全组放通1194/udp端口允许公网访问该端口本地网关节点内核支持tun虚拟网卡执行ls /dev/net/tun可查看到对应设备所有操作均使用root账户避免权限不足导致部署失败二、云端服务端部署公有云10.0.12.10首先在公有云服务器上部署服务端生成客户端接入配置这是整个组网的核心基础。2.1 创建服务端编排配置新建部署目录并编写docker-compose.yml命令如下# 创建部署目录并进入 mkdir -p /opt/network-server cd /opt/network-server # 查看并编写docker-compose.yml cat docker-compose.yml配置文件内容services: openvpn: image: kylemanna/openvpn:latest container_name: network-server cap_add: - NET_ADMIN ports: - 1194:1194/udp volumes: - ./data:/etc/openvpn restart: always sysctls: - net.ipv6.conf.all.forwarding1 - net.ipv6.conf.default.forwarding12.2 初始化服务配置绑定云端公网IP生成基础服务配置# 替换为云端服务器公网IP生成服务配置 docker compose run --rm openvpn ovpn_genconfig -u udp://42.136.159.882.3 初始化证书体系采用无密码模式简化部署流程适合内网环境# 初始化证书无密码模式 docker compose run --rm openvpn ovpn_initpki nopass2.4 启动服务端容器# 后台启动服务 docker compose up -d # 查看容器状态确保为Up状态 docker ps | grep network-server2.5 生成客户端接入文件创建客户端凭证并导出配置文件后续需传输到本地网关节点# 创建客户端身份凭证 docker compose run --rm openvpn easyrsa build-client-full client1 nopass # 导出客户端配置文件 docker compose run --rm openvpn ovpn_getclient client1 client1.ovpn关键操作将生成的client1.ovpn文件通过scp/ftp等方式传输到本地网关节点的部署目录下。三、本地网关节点部署192.168.42.128在本地虚拟机部署客户端作为局域网流量转发网关必须使用host网络模式。3.1 创建客户端编排配置新建部署目录放入传输过来的client1.ovpn编写配置文件# 创建部署目录并进入 mkdir -p /opt/network-client cd /opt/network-client # 查看并编写docker-compose.yaml cat docker-compose.yaml配置文件内容services: openvpn-client: # 国内镜像源解决拉取失败问题 image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kylemanna/openvpn:latest container_name: network-client cap_add: - NET_ADMIN network_mode: host # 必选配置不可修改 devices: - /dev/net/tun volumes: - ./client1.ovpn:/etc/openvpn/client1.ovpn command: openvpn --config /etc/openvpn/client1.ovpn restart: always3.2 启动客户端容器# 后台启动客户端 docker compose up -d # 查看容器运行状态 docker ps | grep network-client四、单节点连通性验证网关节点本机先验证网关节点与云端VPC的连通性确保单点连接正常再配置全网段互通。在本地网关节点192.168.42.128执行以下命令[rootkube 123]# [rootkube 123]# ping 10.0.12.10 PING 10.0.12.10 (10.0.12.10) 56(84) bytes of data. 64 bytes from 10.0.12.10: icmp_seq1 ttl63 time20.1 ms 64 bytes from 10.0.12.10: icmp_seq2 ttl63 time14.7 ms ^C --- 10.0.12.10 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev 14.731/17.418/20.106/2.690 ms [rootkube 123]# [rootkube /]# [rootkube /]# curl ip.sb 42.136.159.88 [rootkube /]#✅验证结果能正常ping通云端内网IP内网通道建立成功出口IP切换为公有云公网IP流量转发正常单节点部署无问题可进行下一步全网段配置五、全网段互通配置核心步骤目标让本地192.168.42.0/24网段所有主机都能通过网关节点访问公有云VPC需配置内核转发、地址伪装和静态路由。伪装成 本地网关的 IP192.168.42.1285.1 开启内核IP转发永久生效# 开启内核转发永久生效 echo net.ipv4.ip_forward1 /etc/sysctl.conf # 加载配置 sysctl -p5.2 添加地址伪装规则关键实现本地网段流量通过网关转发至云端VPC仅支持单向访问# 配置SNAT实现本地42网段访问云端10网段 iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -j MASQUERADE5.3 保存iptables规则重启不失效# 永久保存防火墙规则 iptables-save /etc/iptables/rules.v45.4 本地主机添加静态路由以本地测试主机192.168.42.129为例配置路由指向网关节点# 访问云端10.0.0.0/16网段流量走本地网关192.168.42.128 ip route add 10.0.0.0/16 via 192.168.42.128小贴士如需永久生效将该命令加入/etc/rc.local开机自启文件六、全网段互通效果验证在本地测试主机192.168.42.129执行命令验证全网段互通效果roottest:~# hostname -i 192.168.42.129 roottest:~# roottest:~# ping 10.0.12.10 PING 10.0.12.10 (10.0.12.10) 56(84) bytes of data. 64 bytes from 10.0.12.10: icmp_seq1 ttl62 time12.1 ms 64 bytes from 10.0.12.10: icmp_seq2 ttl62 time14.5 ms ^C --- 10.0.12.10 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev 12.132/13.292/14.452/1.160 ms roottest:~# roottest:~# ping 10.0.0.9 PING 10.0.0.9 (10.0.0.9) 56(84) bytes of data. 64 bytes from 10.0.0.9: icmp_seq1 ttl61 time13.2 ms 64 bytes from 10.0.0.9: icmp_seq2 ttl61 time13.2 ms ^C --- 10.0.0.9 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev 13.186/13.188/13.191/0.002 ms roottest:~# roottest:~# ip route default via 192.168.42.2 dev ens33 proto dhcp src 192.168.42.129 metric 100 10.0.0.0/16 via 192.168.42.128 dev ens33 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 192.168.42.0/24 dev ens33 proto kernel scope link src 192.168.42.129 metric 100 192.168.42.2 dev ens33 proto dhcp scope link src 192.168.42.129 metric 100 roottest:~#✅最终效果本地任意主机可直接ping通云端VPC内所有内网IP路由表配置正常流量转发无丢包、延迟稳定本地整个网段均可无缝访问云端内网资源部署完成七、常见问题排查容器启动失败检查tun设备是否存在执行modprobe tun加载模块确认端口1194未被占用无法连通云端检查公有云安全组是否放通1194/udp端口公网IP填写是否正确本地网段无法访问确认内核转发已开启、NAT规则已添加、客户端为host网络模式重启后失效重新执行sysctl -p加载转发配置检查iptables规则是否保存八、总结本文通过Docker容器化部署快速实现了本地局域网与云端VPC的内网互通全程无复杂配置命令直接复用非常适合中小企业和开发人员使用。核心要点回顾服务端绑定公网IP生成客户端配置文件客户端必须用host网络模式保证流量转发内核转发NAT伪装静态路由实现全网段互通容器化部署启停方便不占用系统额外资源如果本文对你有帮助欢迎点赞、收藏、留言交流CSDN标签混合云组网、Docker、内网互通、公有云VPC、局域网访问云端、运维实战