Linux 系统中 curl ifconfig.me 命令返回空值,该从 DNS 还是防火墙排查?

2025-07-21 0 489 百度已收录

是不是在 Linux 终端里敲了 “curl ifconfig.me”,屏幕就闪了一下,啥都没出来?试了好几次还是空值,挠头想 “到底是 DNS 没解析对,还是防火墙给拦住了?” 小编前阵子帮公司运维排查,他那台 CentOS 服务器就这毛病,查了俩小时才发现是 DNS 配置错了,白耽误干活。其实啊,这命令返回空值,DNS 和防火墙都是嫌疑犯,但排查有先后,今天就把先查啥、后查啥、具体敲啥命令,连老运维都容易踩的坑,全说明白,开发者跟着一步步来,不用再对着黑屏发呆。

一、先查 DNS:八成是它的锅,3 步就能定位问题

为啥先查 DNS?因为 ifconfig.me 这网站得先被解析成 IP 地址,才能返回结果,解析失败直接就空值,这情况太常见了。

  1. 先看看 DNS 配置对不对,别用了无效的服务器
    Linux 的 DNS 配置文件在 “/etc/resolv.conf”,终端里输 “cat /etc/resolv.conf”,看看里面的 “nameserver” 后面是不是有效的 DNS 服务器,比如 “8.8.8.8”(谷歌 DNS)、“114.114.114.114”(国内通用)。小编上次看到有台服务器的 DNS 填的是 “192.168.1.1”,这是路由器地址,有时候会失效,改成 114.114.114.114 立马就好了。
  2. 手动解析一下 ifconfig.me,看能不能拿到 IP
    Linux 系统中 curl ifconfig.me 命令返回空值,该从 DNS 还是防火墙排查?输 “nslookup ifconfig.me”,要是显示 “** server can’t find ifconfig.me: NXDOMAIN**”,说明 DNS 解析不了这域名,就是 DNS 的问题;要是显示 “Address: 104.21.82.118”(类似这样的 IP),说明解析没问题,再去查防火墙。同事那台服务器就是 nslookup 返回找不到,改了 DNS 就好了,你猜怎么着?他之前填的 DNS 服务器早就停用了,自己都忘了。
  3. 临时改个 DNS 试试,不用改配置文件
    要是嫌改配置文件麻烦,终端里输 “curl –resolve ifconfig.me:80:104.21.82.118 ifconfig.me”(后面的 IP 换成 nslookup 查到的有效 IP),这是强制用指定 IP 访问,要是能返回结果,实锤是 DNS 的问题,赶紧把 resolv.conf 里的 DNS 换成有效的。

Linux 系统中 curl ifconfig.me 命令返回空值,该从 DNS 还是防火墙排查?
小编提醒,有些公司内网会强制用自己的 DNS 服务器,这时候可能解析不了 ifconfig.me,得找 IT 要能解析外部域名的 DNS,别硬试。

二、再查防火墙:虽然没 DNS 常见,但拦住了也会空值

要是 DNS 没问题,再查防火墙,它就像个保安,心情不好就不让命令出去,返回空值也正常。

  1. 先看看防火墙开着没,啥规则在生效
    不同 Linux 版本防火墙不一样,CentOS 用 “firewall-cmd –state”,显示 “running” 就是开着的;Ubuntu 用 “ufw status”,显示 “active” 就是开着的。小编那台测试机就是 firewall-cmd 显示运行中,后面排查发现是它在搞鬼。
  2. 试试临时关了防火墙,再敲命令
    别直接改规则,先临时关了测试:CentOS 输 “systemctl stop firewalld”,Ubuntu 输 “ufw disable”,然后再敲 “curl ifconfig.me”。要是这时候有结果了,说明就是防火墙规则拦住了;要是还没结果,那防火墙就不是凶手。同事上次关了防火墙立马就出来了,你说气人不,之前愣是没想到查这个。
  3. 不用关防火墙也行,加条规则放通 80 端口
    要是确认是防火墙的事,不用一直关着,加条允许访问 ifconfig.me 的规则就行。先查 ifconfig.me 的 IP(用 “nslookup ifconfig.me”),假设是 104.21.82.118,CentOS 输 “firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”104.21.82.118″ port port=”80″ protocol=”tcp” accept’ –permanent”,再重启防火墙 “firewall-cmd –reload”;Ubuntu 输 “ufw allow from 104.21.82.118 to any port 80”,这样既能放通,又安全。

三、除了 DNS 和防火墙,这 2 个 “隐藏凶手” 也得看看

有时候俩都不是,是其他小问题,小编遇到过两次,折腾半天没想到是这原因。

  1. curl 没装全?少了 https 支持
    有些精简版 Linux 系统,curl 可能没装 https 模块,虽然 ifconfig.me 用的是 http,但偶尔会因为依赖问题返回空值。输 “curl –version”,看看有没有 “https” 字样,没有的话装全它:CentOS 输 “yum install curl-devel”,Ubuntu 输 “apt install libcurl4-openssl-dev”,装好再试。
  2. 网络本身不通!先 ping 通百度再说
    要是连百度都 ping 不通(输 “ping baidu.com” 显示 “Destination Host Unreachable”),那别查 DNS 和防火墙了,先解决网络连通性问题。插好网线、连好 WiFi,或者找管理员看看是不是 IP 被禁了,网络通了再查其他的。

四、自问自答:开发者最容易懵的 2 个问题

问:为啥 nslookup 能解析,但 curl 还是空值?
答:可能是 DNS 缓存的问题,输 “systemctl restart NetworkManager”(CentOS)或 “systemctl restart systemd-resolved”(Ubuntu)刷新一下缓存,再试试。小编遇到过一次,解析对了但 curl 不行,刷新缓存就好了。
问:排查一圈都没问题,还是空值,咋办?
答:换个类似命令试试,比如 “curl icanhazip.com”“curl ip.cn”,要是这些命令有结果,说明是 ifconfig.me 网站的问题,等它恢复就行;要是这些也没结果,那可能是你服务器的网络出口被限制了,找网络管理员看看吧。

五、小编的实在建议

其实啊,遇到这问题,优先查 DNS,因为它出问题的概率比防火墙高多了,步骤也简单,先 nslookup 再改配置,大多能解决。真要是防火墙的事,临时关了测试一下最直接,确定了再加规则,别上来就瞎改规则。
另外,要是总用 ifconfig.me 出问题,换 “curl icanhazip.com” 呗,小编用了大半年,几乎没掉过链子,响应还快。开发者时间宝贵,别在一个命令上死磕,能解决问题的都是好命令,你说对不?
你要是按这步骤查还没解决,把终端里的错误信息(比如 nslookup 的结果、防火墙状态)记下来,评论区告诉我,咱一起瞅瞅~

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

兔格号 SEO运维 Linux 系统中 curl ifconfig.me 命令返回空值,该从 DNS 还是防火墙排查? https://www.tglzm.com/seo/wei-seo/3103.html

一个独行者,独揽万古

常见问题

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务