现象 无法访问虚拟机自己的校园网IP
联通云因为是云架构,自己有一套自己的内网IP,可以额外绑定一个校园网IP。
对于虚拟主机自己,如果观察ifconfig返回的网卡结果,可以发现,虚拟主机自己只知道自己的内网IP,是不清楚自己的校园网IP的。
图上是ifconfig的结果,其中红圈为联通云内网ip

上图可以看到我这台虚拟机主机的校园网IP
展示问题复现方式
1 | #启动一个最小化的http服务 |
根因归属:我没有那么懂网络,如果按照我个人理解,这一层NAT转换应该联通云来做。
什么场景会触发这个问题
如果因为是用了外部的服务注册与发现框架导致的,那么因为你拿到的ip是校园网ip,自己内部部署了两个以上的微服务,这两个微服务互相访问就会出现问题。
如果同一台机器内部署了多个应用,其中还绑定了不同的域名,就很容易出现这个问题。
解决方法
利用iptables来增加一层本机的NAT,先用下面的命令确认自己现在的转发情况
如果安装过docker会有一个docker的转发,剩下没特殊设置应该是空的
1 | iptables -t nat -L OUTPUT |
增加一条NAT路由规则
1 | iptables -t nat -A OUTPUT -d 192.168.165.86 -j DNAT --to-destination 127.0.0.1 |
操作完之后,测试,应该就可以了
1 | #这个命令现在会正常返回nginx首页了 |
把上面的iptable的操作配置为开机自启动
1 | #保存当前的iptable到配置中 |