遇到两台机器 同局域网,
一台部署spring-gateway(gateway-host), 一台是一般服务(service-host 端口8080)。
gateway报错,提示 no route to host.

1. 查看状况

在gateway-host上执行:
试探端口, 不通:

telnet service-host 8080
> ** no route to host.

ping服务机器, 通:

ping service-host

切换到service-host执行:
查看端口,是开着的

netstat -antp|grep :8080

telnet也是通的

telnet localhost 8080

机器网络是通的,但是端口不通。

2. 寻找外援

找运维同学看,查了下,说可能是服务绑在IpV6上了(结果不是这个原因)。
有两种绑定IpV4解决方式:

  1. 运行服务时增加命令行参数
java -jar -Xmx2048m -Xms2046m -d64 -server Djava.net.preferIPv4Stack=true service.jar > /dev/null 2>&1 &
  1. 或者application.yaml配置(对应到tomcat是
server:
  address: 0.0.0.0

然后再尝试telnet service-host 8080, 依然不通, 应该是问题不在此

3. 解决

怀疑是防火墙拦了,运维同学不同意。
查看防火墙

service iptables status

> Redirecting to /bin/systemctl status iptables.service
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
   Active: active (exited) since Fri 2022-03-04 07:04:10 CST; 1 weeks 5 days ago
  Process: 634 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
 Main PID: 634 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/iptables.service

尝试关闭了防火墙:

service iptables stop

再次尝试, 通了。

4. 总结

之前没有认为是防火墙的问题,是因为

iptables -L

没有规则。
至于原因,运维同学解释说应是centos7 iptables的bug(尚没有查到信息),后续了解了补上。

打赏
支付宝 微信
上一篇 下一篇