同一主机上VirtualBox虚拟机与Docker容器的双向无NAT网络通信配置方案咨询
同一主机上VirtualBox虚拟机与Docker容器的双向无NAT网络通信配置方案咨询
问题概述
我是一名后端开发者,网络知识有限。现在需要在本地Linux主机上测试一套由多个组件(各类SIP和媒体元素、SIP UA)组成的SIP系统。当前的情况是:部分系统组件以VirtualBox虚拟机(Windows和Linux客户机)形式存在,另一部分以Docker容器形式运行。我需要配置本地主机(不涉及家庭路由器)、虚拟机和Docker客户机,实现虚拟机与Docker容器的双向通信。
我的核心需求:
- 每个系统组件都能通过独立IP地址访问(很多SIP组件依赖默认的5060端口)
- 理想情况下(非强制但能大幅简化配置)可以预先指定IP地址(类似Docker自定义网桥),因为很多SIP服务器需要预先配置监听IP
- 可以实现无NAT的跨通信(NAT会给媒体协议带来额外麻烦)
现有环境细节
主机环境
- Linux主机(PopOS 22.04)
- 本地网络IP:
192.168.200.232 - 主机路由表(执行
netstat -r输出):
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 192.168.200.1 0.0.0.0 UG 0 0 0 wlp1s0 link-local 0.0.0.0 255.255.0.0 U 0 0 0 wlp1s0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.200.0 0.0.0.0 255.255.255.0 U 0 0 0 wlp1s0
VirtualBox虚拟机环境
- VirtualBox 6.1,Windows 11客户机
- 防火墙已关闭
- 网络设置:桥接适配器(绑定wlp1s0),Intel PRO/1000 MT Server,混杂模式已启用
- 虚拟机IP:
192.168.200.88
Docker容器环境
- Docker 24.0.2,Linux容器
- 网络设置:使用默认Docker网桥网络
- 容器IP:
172.17.0.4 - 容器路由表(执行
netstat -r输出):
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default _gateway 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
当前测试情况
- Docker容器可以正常ping通虚拟机:
# ping 192.168.200.88 PING 192.168.200.88 (192.168.200.88) 56(84) bytes of data. 64 bytes from 192.168.200.88: icmp_seq=1 ttl=127 time=0.476 ms 64 bytes from 192.168.200.88: icmp_seq=2 ttl=127 time=0.677 ms
- 虚拟机无法ping通Docker容器:
ping 172.17.0.4
Pinging 172.17.0.4 with 32 bytes of data:
Request timed out.
我尝试在Windows客户机添加静态路由(192.168.200.232是主机IP):
route add 172.17.0.0 MASK 255.255.0.0 192.168.200.232
添加后Windows客户机路由表(执行netstat -r输出):
=========================================================================== Interface List 15...08 00 27 7c 0c be ......Intel(R) PRO/1000 MT Network Connection 1...........................Software Loopback Interface 1 =========================================================================== IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.200.1 192.168.200.88 25 127.0.0.0 255.0.0.0 On-link 127.0.0.1 331 127.0.0.1 255.255.255.255 On-link 127.0.0.1 331 127.255.255.255 255.255.255.255 On-link 127.0.0.1 331 172.17.0.0 255.255.0.0 192.168.200.232 192.168.200.88 26 192.168.200.0 255.255.255.0 On-link 192.168.200.88 281 192.168.200.88 255.255.255.255 On-link 192.168.200.88 281 192.168.200.255 255.255.255.255 On-link 192.168.200.88 281 224.0.0.0 240.0.0.0 On-link 127.0.0.1 331 224.0.0.0 240.0.0.0 On-link 192.168.200.88 281 255.255.255.255 255.255.255.255 On-link 127.0.0.1 331 255.255.255.255 255.255.255.255 On-link 192.168.200.88 281 =========================================================================== Persistent Routes: None IPv6 Route Table =========================================================================== Active Routes: If Metric Network Destination Gateway 1 331 ::1/128 On-link 15 281 fe80::/64 On-link 15 281 fe80::b2b0:9f8f:be31:e695/128 On-link 1 331 ff00::/8 On-link 15 281 ff00::/8 On-link =========================================================================== Persistent Routes: None
但配置后仍然无法实现双向通信,我猜测可能是缺少家庭路由器上的静态路由,但我希望避免修改路由器配置,因为需要在不同环境中复现方案,所有配置最好只在主机上完成。
核心疑问
是否可以在仅修改本地主机配置的前提下,实现虚拟机与Docker容器的双向无NAT通信?如果可以,希望能得到相关配置指引!
备注:内容来源于stack exchange,提问作者IvanR
相关产品推荐
相关产品推荐

