答案1
解决此问题的最佳方法是使用带有 tcp 数据包的 traceroute。使用此命令检查数据包被阻止的位置:
traceroute -T -p 25 -n <myVMip>
下一步 - 在虚拟机上运行 tcpdump 并检查传入数据包。tcpdump 捕获数据包前防災墙。
tcpdump -ni <iface> 'port 25'
因此,如果您在转储中看到数据包,但没有任何效果,请检查防火墙。默认情况下,iptables 命令仅列出表filter
。最好使用该iptables-save -c
命令显示带有规则计数器的完整规则集。
然后检查端口是否真的被监听。使用netstat -tlnp
或ss -tlnp 'sport == :25'
命令。您应该会看到监听的套接字和您的程序。
如果以上步骤都完成了,但是服务还是没有工作,请运行strace -p <pid>
命令检查,服务确实从socket中获取了数据。