Vagrant配置端口转发后宿主机无法telnet连接虚拟机端口该如何处理?
解决方案
你遇到的是Vagrant端口转发配置正常但服务无法从宿主机访问的典型场景,按以下顺序排查即可:
- 检查虚拟机内1234端口服务的监听地址
大部分情况下问题出在服务仅绑定了虚拟机本地回环地址127.0.0.1,NAT转发的外部请求无法被服务接收。- 进入虚拟机执行命令验证监听地址:
ss -tunlp | grep 1234 - 如果返回结果的Local Address列为
127.0.0.1:1234,修改对应服务的启动配置,将监听地址改为0.0.0.0即可。不同服务修改方式不同,示例:- Node.js服务:启动时添加参数
--host 0.0.0.0 - Nginx:在配置文件中修改监听规则为
listen 0.0.0.0:1234; - Python Flask服务:启动时指定
host='0.0.0.0'
- Node.js服务:启动时添加参数
- 进入虚拟机执行命令验证监听地址:
- 检查虚拟机防火墙规则
Ubuntu 14.04默认开启iptables防火墙,可能拦截外部请求:- 临时关闭防火墙测试:
sudo iptables -F - 若关闭后宿主机可正常访问,执行命令添加放行规则:
sudo iptables -A INPUT -p tcp --dport 1234 -j ACCEPT - 执行
sudo iptables-save > /etc/iptables.rules保存规则,避免重启后失效。
- 临时关闭防火墙测试:
- 显式指定Vagrant端口转发绑定地址
部分Vagrant版本默认仅将转发端口绑定到宿主机的127.0.0.1,可修改Vagrantfile对应配置:
修改后执行dev.vm.network 'forwarded_port', guest: 1234, host: 1234, host_ip: "0.0.0.0"vagrant reload重启虚拟机生效。 - 检查宿主机Mac防火墙设置
进入Mac系统设置>网络>防火墙,临时关闭防火墙测试,若能正常访问,添加规则放行1234端口即可。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

