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
相关产品推荐
相关产品推荐

