内网: 172.21.16.8
外网:140.143.38.68
在服务器部署了dubbo服务和 一个提供方
启动后dubbo看到的提供方的ip是172.21.16.8:20880
这样消费服务从其他服务器访问该dubbo服务,就无法调用,由于172.21.16.8是内网。
这是由于dubbo绑定的本机ip
InetSocketAddress address = new InetSocketAddress(port);
Channel serverChannel = bootstrap.bind(address);
public InetSocketAddress(int port) {
this(InetAddress.anyLocalAddress(), port);
}
InetAddress.anyLocalAddress()一般就是0.0.0.0/0.0.0.0,如果我们有两块网卡,一块内网,一块外网,那么都能访问这个socket,这通常是不安全的。
InetAddress.getLocalHost().getHostAddress()取回的 结果是 hostname 这个结果,结果拿到的就是内网172.21.16.8
要解决这个问题需要在/etc/hosts 加入外网ip
140.143.38.68 test
127.0.0.1 localhost
::1 localhost localhost.localdomain
这样hostname 取到的结果就是外网IP