You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu服务器间通信故障:Server3可Ping通Server1但无法连接MongoDB

Ubuntu服务器间通信故障:Server3可Ping通Server1但无法连接MongoDB

兄弟,我太懂这种明明能Ping通但服务连不上的憋屈了!毕竟Ping用的是ICMP协议,而MongoDB走的是TCP,这俩完全是两码事,我帮你梳理几个最可能的排查点,按顺序试一遍应该能解决:

1. 先确认MongoDB到底在监听啥地址

你先去Server1上看看MongoDB的配置文件,一般是/etc/mongod.conf,找到net模块里的bindIp参数:

sudo nano /etc/mongod.conf

默认情况下MongoDB只绑定127.0.0.1,也就是只能本地访问。Server2能连的话,肯定是改了这个配置,但说不定只加了Server2的IP,没加Server3的网段?

  • 要是想先测试的话,直接改成bindIp: 0.0.0.0(允许所有IP访问,之后再改成特定网段更安全)
  • 改完重启MongoDB服务:sudo systemctl restart mongod
  • 验证监听状态:ss -plntu | grep mongod,看看输出里是不是有0.0.0.0:27017,而不是只有127.0.0.1:27017

2. 重点检查Server1的iptables规则顺序

你说已经加了允许Server3的规则,但iptables是从上到下匹配的,如果这条ACCEPT规则放在了DROP/REJECT规则的后面,那根本不会生效!

  • 先看Server1的INPUT链完整规则:sudo iptables -L INPUT --line-numbers
  • 找到你加的那条server3的规则,看看它的行号是不是在所有DROP/REJECT规则的前面
  • 如果在后面,直接把它插到最前面:sudo iptables -I INPUT 1 -s 10.100.116.62/32 -m comment --comment server3 -j ACCEPT
  • 另外,也可以单独加一条针对MongoDB端口的规则更保险:sudo iptables -A INPUT -s 10.100.116.62/32 -p tcp --dport 27017 -j ACCEPT

3. 先跳过MongoDB,直接测试TCP端口连通性

别先纠结应用报错,先在Server3上用基础工具测试端口能不能通:

  • 用nc测试:nc -zv 10.100.116.65 27017,如果输出显示Connection to 10.100.116.65 27017 port [tcp/*] succeeded!,说明网络是通的,那问题出在应用配置或者MongoDB认证上
  • 如果连nc都连不上,那肯定是网络层的问题,回到前面的防火墙和监听配置排查

4. 检查Server3的出站路由和规则

虽然Ping能通,但也要确认Server3的出站规则没限制TCP流量:

  • 查看OUTPUT链:sudo iptables -L OUTPUT --line-numbers,确保没有拒绝到10.100.116.65的流量
  • 用ip route get 10.100.116.65确认路由路径,看看是不是真的走enp1s0f1接口,避免路由配置有冲突

5. 确认netplan配置没有冲突

你在Server3用netplan加了LAN IP,再检查一下配置文件有没有写错,比如子网掩码是不是和Server1一致,然后再重新应用一遍:

sudo netplan apply

再用ifconfig或者ip addr确认enp1s0f1的IP确实是10.100.116.62/24

按这个顺序排查,大概率能找到问题——我遇到过好几次这种情况,基本都是MongoDB没开外部监听,或者iptables规则顺序搞反了导致的。

备注:内容来源于stack exchange,提问作者Julien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 09:18:05