企业内网服务器host与ifconfig返回IP不一致问题咨询
内部服务器Flask访问异常?来一步步排查解决!
先给你理理当前的场景,方便咱们精准定位问题:
当前场景梳理
- 咱们用的是企业内部服务器
server_name.corp.com,仅能通过VPN访问,未暴露至公网 - 服务器上运行的Flask服务配置为监听
0.0.0.0:5000,理论上应该接受所有网卡的请求 - 本地执行命令后得到的结果存在矛盾:
- 用
host server_name.corp.com查询DNS,返回IP1(10.*.*.*) - 在服务器上执行
ifconfig,得到本地网卡IP2(10.*.*.*) - 本地执行
ping server_name.corp.com时,返回的却是IP2 - 当前可通过IP1 SSH登录服务器,也能访问
IP1:5000的Flask服务,但估计你是遇到了用域名server_name.corp.com:5000无法访问服务,或者搞不懂IP解析结果不一致的问题?
- 用
核心问题根源
这种IP解析“打架”的情况,十有八九是内部DNS配置或者本地hosts映射导致的:
host命令是直接查询企业DNS服务器获取结果,所以返回IP1;但ping可能优先读取本地hosts文件,或者调用了另一个DNS缓存源,因此返回IP2- 虽然Flask监听了
0.0.0.0(相当于绑定所有网卡),但如果server_name.corp.com解析到的IP2对应的网卡未开放VPN访问路由,或者服务器防火墙限制了该IP的5000端口,就会导致域名访问服务失败
一步步排查解决
1. 检查本地hosts文件
先看看你的VPN客户端机器(比如个人电脑)的hosts有没有手动绑定过该域名:
- Windows:以管理员权限打开
C:\Windows\System32\drivers\etc\hosts - Linux/macOS:打开
/etc/hosts
如果文件内存在server_name.corp.com对应IP2的条目,要么删除该条目(让DNS自动解析),要么修改为IP1,这样ping和host的解析结果就能统一了。
2. 验证服务器端的DNS解析
通过IP1 SSH登录服务器后,自己也检查一下服务器对该域名的解析结果:
host server_name.corp.com ping server_name.corp.com
如果服务器自身解析结果为IP1,说明问题出在本地解析缓存或hosts文件;如果服务器也解析到IP2,那就是企业内部DNS服务器的配置问题,需要联系IT运维调整域名映射。
3. 确认Flask服务的监听状态
虽然你说配置了 0.0.0.0:5000,但咱们还是验证一下更放心:
# 老系统用netstat netstat -tulpn | grep 5000 # 新系统用ss更高效 ss -tulpn | grep 5000
只要输出中能看到 0.0.0.0:5000 或者 :::5000(IPv6),就说明服务确实绑定了所有网卡,这部分没问题。
4. 测试IP2的访问权限
既然 ping 能通IP2,不妨试试直接访问 http://IP2:5000,如果无法访问,大概率是IP2对应的网卡未开放VPN路由,或者服务器防火墙限制了端口:
- 先临时关闭防火墙测试:
# Ubuntu/Debian系 sudo ufw disable # CentOS/RHEL系 sudo systemctl stop firewalld
如果关闭防火墙后能正常访问,就给防火墙添加允许规则:
# Ubuntu/Debian:允许VPN网段访问5000端口 sudo ufw allow from 你的VPN网段(比如10.0.0.0/24) to any port 5000 # CentOS/RHEL sudo firewall-cmd --add-port=5000/tcp --permanent sudo firewall-cmd --reload
5. 清除本地DNS缓存
要是上面的步骤都没问题,可能是本地DNS缓存导致的解析异常,清除缓存即可:
- Windows:打开命令提示符,执行
ipconfig /flushdns - Linux:根据发行版选择命令,比如
systemd-resolve --flush-caches或service nscd restart - macOS:执行
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
内容的提问来源于stack exchange,提问作者Ankit Vallecha
相关产品推荐
相关产品推荐

