端口已启动但是对外无法访问

270 阅读1分钟

一、问题背景

原先物理机下,UIP 和 BP 部署在同一主机上,UIP 转发请求到 BP 没问题
容器化后,UIP 和 BP 部署在不同的主机上,配置文件相同时,UIP 无法转发请求到 BP

二、问题描述

UIP 容器上 telnet {BP:IP} {BP:PORT} 提示 Connection Refuse
BP 容器上 telnet {BP:IP} {BP:PORT} 提示 Connection Refuse
BP 容器上 telnet 127.0.0.1 {BP:PORT} 能够正常连接

23b2181d2b092f3a1dabe63a56f0047f.png

三、相关代码及配置

BP 启动配置文件

<?xml version="1.0" encoding="UTF-8"?>
<uip> 
  <servers>
    <params> 
      <needFluxControl>true</needFluxControl>  
      <fluxControlFileDir>/ztesoft/zsmart/webframework/R3.0/bp/flux/</fluxControlFileDir> 
    </params> 
    
    <adapter name="JMXServer" comments="JMXServer" parent="JMXBp" state="1">
                <params>
                        <ip>127.0.0.1</ip>
                        <port>9288</port>
                </params>
        </adapter>
    
    <adapter name="MockBPServer" parent="BP" required="1" state="1">
      <params>
        <ip>127.0.0.1</ip>
        <port>18999</port>
      </params>
    </adapter>
  </servers>
</uip>

四、排查思路

1. 容器不互联

UIP 容器上 ping BP 容器可以正常通信

2. 端口未开放

切换端口未 9888 后仍然无法 telnet 正常连接

五、问题原因

127.0.0.1

IPV4 地址中,127 开头的都属于回环地址,也是 IPV4 的特殊地址,而127.0.0.1众多回环地址中的一个
在IPV4下的回环地址是 127.0.0.1,在IPV6下,表达为 ::1

回环地址只能监听来自本机地址的请求

localhost

localhost 不是 IP,它是一个域名,代表着本机地址,默认会经过 /etc/hosts 文件解析成 127.0.0.1 

 localhost 是不经网卡传输,不受网络防火墙和网卡相关的的限制。

0.0.0.0

0.0.0.0 最特殊的一个ip地址,不能ping通,代表本机所有的IP地址的集合

如果监听本机的0.0.0.0,就等于监听机器上的所有ip

本机IP

六、问题修复

将配置文件中的 127.0.0.1 变更为 0.0.0.0