在Linux系统中,查看设备连接外网时的公网IP地址是常见需求,例如用于网络调试、服务器配置或安全验证,公网IP是由网络服务提供商(ISP)分配的,在互联网上唯一标识设备的地址,而本地IP(如192.168.x.x、10.x.x.x)是局域网内部地址,需通过NAT转换后才可访问外网,以下介绍几种常用方法,涵盖命令行和图形界面场景,并分析其适用场景和优缺点。

使用curl或wget访问公共IP查询服务
curl和wget是Linux中常用的网络工具,通过访问提供IP查询服务的网站,可直接获取公网IP,这是最简单高效的方式,适合命令行操作和自动化脚本。
操作步骤:
-
安装工具(若未安装):
- Ubuntu/Debian:
sudo apt update && sudo apt install curl wget - CentOS/RHEL:
sudo yum install curl wget
- Ubuntu/Debian:
-
执行命令:
- 使用
curl(推荐,轻量且输出简洁):curl -s https://ipinfo.io/ip # 静默模式,仅返回IP地址 curl -s https://ifconfig.me # 另一个常用服务,同样简洁 curl -s https://ip.cn # 中文服务,返回IP和地理位置
- 使用
wget:wget -qO- https://ipinfo.io/ip # -q静默,-O-输出到标准输出
- 使用
示例输出:
45.67.89
优点:
- 命令简单,无需额外配置,适合快速查询。
- 大部分公共IP服务响应速度快(通常在1秒内)。
缺点:
- 依赖外部服务,若目标网站被屏蔽或不可用(如国内网络访问某些海外服务可能较慢),则无法获取结果。
- 若系统通过代理上网,需确保代理配置正确(或暂时禁用代理),否则可能返回代理服务器的IP。
通过DNS查询获取公网IP
DNS(域名系统)不仅用于域名解析,也可通过特定域名的查询结果获取公网IP,OpenDNS和Google DNS等公共DNS服务提供了专门用于查询公网IP的域名。
操作步骤:
-
使用
dig命令(推荐,功能强大):dig +short myip.opendns.com @resolver1.opendns.com # 使用OpenDNS服务器查询 dig +short o-o.myaddr.l.google.com @ns1.google.com # 使用Google DNS服务器查询
+short参数简化输出,仅返回IP地址。- 后指定DNS服务器,确保查询可到达。
-
使用
nslookup命令(兼容性更好):nslookup myip.opendns.com resolver1.opendns.com
输出结果中“Address:”后的字段即为公网IP。

示例输出:
45.67.89
优点:
- 相比HTTP服务,DNS查询通常更稳定,且不易被防火墙拦截。
- 无需安装额外工具(
dig和nslookup一般预装在Linux系统中)。
缺点:
- 部分DNS服务器可能返回缓存结果,导致IP不准确(极少见)。
- 输出格式相对
curl稍复杂,需结合+short参数简化。
查看本地网络接口并确认外网IP
本地网络接口(如eth0、ens33)显示的是设备的内网IP,需结合路由表判断是否通过NAT上网,但无法直接获取公网IP,可通过以下步骤间接确认:
操作步骤:
-
查看本地IP:
ip addr show # 推荐使用(现代Linux系统) ifconfig # 传统工具,需安装`net-tools`(`sudo apt install net-tools`)
输出中
inet字段后的IP即为内网IP(如168.1.100)。 -
检查路由表:
ip route show
若输出中包含
default via 192.168.1.1 dev eth0(168.1.1为网关),说明设备通过网关(路由器)NAT上网,此时公网IP需通过网关或外部服务获取。
优点:
- 无需网络访问,可快速查看本地网络配置。
- 适用于排查本地网络问题(如IP冲突、网关连通性)。
缺点:
- 仅能获取内网IP,无法直接确认公网IP,需结合其他方法验证。
图形界面方式查询(适合桌面用户
若使用Linux桌面环境(如Ubuntu、GNOME、KDE等),可通过浏览器访问IP查询网站,或查看系统网络设置中的外网IP。
操作步骤:
-
浏览器访问IP查询网站:
打开Firefox、Chrome等浏览器,访问https://ipinfo.io、https://whatismyipaddress.com或国内服务https://ip.cn,页面会直接显示公网IP及地理位置信息。
-
查看系统网络设置:
以Ubuntu GNOME为例:进入“设置”>“网络”>“已连接的WiFi/有线”,点击“齿轮图标”>“详细信息”,在“IPv4”或“IPv6”标签页中,部分系统会显示“公共IP”(若提供);若无,需通过上述外部服务查询。
优点:
- 直观易懂,适合不熟悉命令行的普通用户。
- 浏览器方式可同时查看IP的地理位置、运营商等附加信息。
缺点:
- 依赖图形界面和浏览器,服务器版Linux(无GUI)无法使用。
- 需手动操作,不适合自动化场景。
不同方法对比
以下为上述方法的总结对比,便于根据场景选择:
| 方法 | 命令/操作 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| curl/wget访问HTTP服务 | curl -s https://ipinfo.io/ip |
命令行、自动化脚本 | 简单快速、输出简洁 | 依赖外部服务、可能受代理影响 |
| DNS查询 | dig +short myip.opendns.com @resolver1.opendns.com |
无curl/wget、需稳定查询 | 不易被拦截、无需安装工具 | 输出稍复杂、可能缓存 |
| 本地接口查看 | ip addr show |
排查本地网络问题 | 无需网络、快速查看内网IP | 无法直接获取公网IP |
| 图形界面 | 浏览器访问ip.cn或系统设置 |
桌面用户、非技术人员 | 直观、可查看附加信息 | 依赖GUI、不适合服务器 |
相关问答FAQs
问题1:为什么用ip addr查到的IP地址和用curl获取的不一样?
解答:ip addr查到的是设备在局域网内的内网IP(如168.1.100),仅在同一局域网内可见;而curl通过外部服务获取的是经过路由器NAT(网络地址转换)后的公网IP(如45.67.89),这是互联网上识别设备的真实地址,简单说,内网IP是“本地门牌号”,公网IP是“互联网身份证”,两者层级不同,因此不一致。
问题2:我的Linux服务器设置了代理,如何获取真实的外网IP而不是代理服务器的IP?
解答:若当前环境通过HTTP/HTTPS代理上网,直接使用curl等方法会返回代理服务器的IP,获取真实外网IP的方法有两种:一是暂时禁用代理,执行unset http_proxy https_proxy后(取消代理环境变量),再用curl或dig查询;二是使用非HTTP协议的查询方式,如dig命令(dig +short myip.opendns.com @resolver1.opendns.com),因为DNS查询通常不经过HTTP代理,能直接获取真实公网IP。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23478.html