怎么看linux系统下的服务器地址?核心答案:使用ip addr命令首选,其次hostname -I可快速获取内网IP,公网地址需借助curl ifconfig.me等外部服务。
在日常运维中,查询Linux服务器地址是高频操作,很多新手常把内网IP、公网IP、MAC地址混为一谈,导致配置出错,今天这篇内容就带你把Linux下的地址问题一次搞清楚,我会直接从命令行实操切入,结合常见故障场景,帮你建立清晰的排查思路。
服务器地址到底指哪几个地址
在动手敲命令前,先明确概念,Linux服务器涉及三类地址,用途完全不同:
- 内网IP地址:局域网内通信使用,通常为
168.x.x、x.x.x或16.x.x开头,SSH连接同网段机器、访问内部服务全靠它。 - 公网IP地址:互联网上的唯一标识,由运营商分配,部署对外网站或远程办公时必须确认这个地址。
- MAC地址(物理地址):网卡固化的硬件标识,用于局域网数据链路层通信,一般不需要手动配置。
搞清楚这些区别,接下来的查询和故障排查才会有的放矢。
查询内网IP地址的常用命令
大多数场景下,你需要的是内网IP,这里给出从易用到全面的查询方案。
首选方案:ip addr
这是现代Linux系统(CentOS 7+、Ubuntu 16.04+)的内置命令,替代了老旧的ifconfig,执行:
ip addr
输出结果中,重点看inet字段,例如inet 192.168.1.100/24,其中168.1.100就是该网卡的IPv4地址。/24代表子网掩码,表明前24位是网络号。lo接口的0.0.1是本地回环地址,不要把它当作对外服务地址。
极简方案:hostname -I
如果只想要IP地址本身,不需要网卡信息,试试:
hostname -I
这条命令会直接列出服务器所有非回环IP地址,用空格隔开,适合在脚本中调用,或者你只想快速看一眼结果。
传统方案:ifconfig
老系统或习惯用ifconfig的朋友,如果提示命令不存在,先安装:
yum install net-tools -y # CentOS/RHEL apt install net-tools -y # Ubuntu/Debian
安装后执行ifconfig,同样在inet字段查看IP信息,输出格式比ip addr稍显直观,但信息量少一些。
查询公网IP地址的三种姿势
内网IP很好拿,但公网IP属于运营商分配的外部资源,无法直接通过本机命令获取,行业共识来看,必须借助外部服务器来”探测”你的出口地址。
curl命令(最推荐)
curl ifconfig.me curl ip.sb curl cip.cc
这三条任选其一,会直接返回你的公网IP。cip.cc还会附带IP归属地、运营商信息,方便你在排查网络故障时确认业务所在机房段。
老牌在线服务
在浏览器中访问ifconfig.me或ip138.com,页面会显示当前网络的公网IP,注意,这和你服务器用curl看到的结果一致,因为流量都从同一出口走。
DNS解析法(特定环境可用)
如果服务器内网绑定了域名映射,可通过nslookup或dig查询域名解析记录,间接判断公网IP,但该方法受DNS缓存和解析记录影响,仅作辅助参考,完整教程地址关联操作会在后面提到。
查端口监听和地址绑定
很多时候你发现问题不是”服务器没地址”,而是”服务没在正确地址上监听”,这时需确认端口绑定情况。
使用socket统计工具:
ss -tlnp
输出结果的Local Address:Port列,显示的就是服务监听的具体IP和端口,若显示0.0.0:80,说明80端口在所有网卡上监听,任意IP(包括公网)都能访问,若显示0.0.1:3306,说明MySQL只允许本机连接,远程连不上是正常现象。
需要特别留意,如果服务监听在::80,这是IPv6地址的写法,不要误以为没配置好。
通过路由表定位地址出口
假设服务器有多块网卡、多个IP,判断哪些流量走哪个地址,必须看路由表:
ip route show
类似:
default via 192.168.1.1 dev eth0 proto static 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
default via 192.168.1.1:默认网关,所有去往外部网络的流量都发在这里。src 192.168.1.100:表示源地址会使用你的内网IP。
用这个思路排查”服务器能上外网,但外面连不进来”的问题,通常查网关和防火墙就能定位。
快速验证服务器地址连通性
拿到地址后,需要验证它是否真正可用,以下方法适用于不同场景:
测试本机地址是否通
ping -c 3 192.168.1.100
如果收到回包,说明网卡和协议栈正常。
测试外部能否连接(需在另一台机器上执行)
telnet 192.168.1.100 22
能连上说明SSH服务在192.168.1.100这个地址上的22端口有响应,如果连接超时,检查防火墙和SELinux。
确认公网端口映射(在服务器本机使用)
curl http://ifconfig.me # 获取本机出口IP
如果本机访问公网服务正常,而外网访问服务器业务端口失败,问题大概率出在路由器端口转发或云安全组规则上,这部分和服务器地址无关,是网络策略层面的配置。
解析/etc/hosts与DNS地址映射
当你的服务器地址需要绑定域名时,/etc/hosts文件优先级最高,查看方法:
cat /etc/hosts
若出现类似0.113.10 mydomain.com的记录,说明本地指定了域名解析地址,这在测试环境或内网DNS不全时很有用,但生产环境中,优先使用单位内部的DNS服务器,修改网卡DNS配置在/etc/resolv.conf,执行cat /etc/resolv.conf即可查看当前DNS地址。
结合场景:从本机查多个网卡地址
服务器通常不止一块网卡,如云服务器有内网网卡和公网网卡,或物理机有管理网卡和业务网卡,此时用ip addr看到多个接口,怎么快速定位自己需要的那个?
经验做法:
- 接口名
eth0、ens33、enp0s3通常是虚拟机或老的物理网卡命名,对应主网络接口。 - 接口名
eth1、ens34等多为第二块网卡,常见于需要区分内网和外网的服务器。 - 接口名
docker0、virbr0是虚拟化网桥,不是物理网卡,不要当作服务器地址配置到业务里。
通过ip link show可以查看各接口的MAC地址和状态,判断哪个接口连接着物理线路。
查地址时常见的坑与解决
坑1:ifconfig不显示IP但网卡是up状态
大概率是网卡没有获取到地址,执行dhclient eth0(CentOS)或dhcpcd(部分发行版)试试动态获取IP,静态IP配置检查/etc/sysconfig/network-scripts/ifcfg-eth0或Netplan配置,确认没有拼错IP、网关、掩码。
坑2:公网IP和实际有出入
如果服务器前面还有一层负载均衡或CDN,你用curl看到的公网IP是前端设备的回源地址,并非服务器真实公网IP,可登录云控制台查看弹性公网IP绑定情况。
坑3:误把回环地址当成可用IP0.0.1只能代表本机自身,外部无法访问,若服务绑定在0.0.1,外部必然连接失败,检查服务配置文件,如Nginx的listen字段、MySQL的bind-address参数。
整理:一张表搞定地址查询
| 查询目标 | 命令/方法 | 适用场景 |
|---|---|---|
| 内网IPv4 | ip addr |
日常查看所有网卡信息 |
| 内网IP精简列表 | hostname -I |
脚本调用、快速输出 |
| 公网IP | curl cip.cc |
确认出口地址 |
| 监听端口及绑定的IP | ss -tlnp |
排查服务访问不到 |
| 默认出口网卡与网关 | ip route show |
多网卡路由选择 |
表格路径覆盖了绝大多数Linux服务器地址查询需求。
Q&A:服务器地址相关热门疑问
问:Linux怎么查看服务器地址是内网还是公网?
判断方法很简单:先运行ip addr查看本机所有IP,再运行curl ifconfig.me获取公网出口IP,如果这两个结果一致,说明该服务器直接拥有公网IP,可被互联网直接访问;如果两者结果不一致,说明你的服务器在NAT网关或负载均衡之后,外部通过网关映射来访问。
问:服务器配了多个地址,linux查看哪个是默认的出口地址?
执行ip route get 8.8.8.8这条命令,输出结果中,src字段后面的IP就是去往互联网时实际使用的源地址,这是系统按路由策略自动匹配的最优路径,通常与默认网关在同一网段,刻意修改默认源地址的行为容易造成路由混乱,除非有明确理由,不建议调整。
问:远程连接时,linux显示connection refused,是服务器地址错了吗?
connection refused与地址无关,它表示TCP连接已到达目标服务器,但目标端口没有服务在监听,排查顺序为:先用ss -tlnp确认服务是否启动并监听正确端口,再检查监听地址是否为0.0.0而非0.0.1,若是connection timed out,那才需要检查网络路由和防火墙,理解这对区别,能少走不少弯路。怎么看linux系统下的服务器地址?核心答案:使用ip addr命令首选,其次hostname -I可快速获取内网IP,公网地址需借助curl ifconfig.me等外部服务。
在日常运维中,查询Linux服务器地址是高频操作,很多新手常把内网IP、公网IP、MAC地址混为一谈,导致配置出错,今天这篇内容就带你把Linux下的地址问题一次搞清楚,我会直接从命令行实操切入,结合常见故障场景,帮你建立清晰的排查思路。
服务器地址到底指哪几个地址
在动手敲命令前,先明确概念,Linux服务器涉及三类地址,用途完全不同:
- 内网IP地址:局域网内通信使用,通常为
168.x.x、x.x.x或16.x.x开头,SSH连接同网段机器、访问内部服务全靠它。 - 公网IP地址:互联网上的唯一标识,由运营商分配,部署对外网站或远程办公时必须确认这个地址。
- MAC地址(物理地址):网卡固化的硬件标识,用于局域网数据链路层通信,一般不需要手动配置。
搞清楚这些区别,接下来的查询和故障排查才会有的放矢。
查询内网IP地址的常用命令
大多数场景下,你需要的是内网IP,这里给出从易用到全面的查询方案。
首选方案:ip addr
这是现代Linux系统(CentOS 7+、Ubuntu 16.04+)的内置命令,替代了老旧的ifconfig,执行:
ip addr
输出结果中,重点看inet字段,例如inet 192.168.1.100/24,其中168.1.100就是该网卡的IPv4地址。/24代表子网掩码,表明前24位是网络号。lo接口的0.0.1是本地回环地址,不要把它当作对外服务地址。
极简方案:hostname -I
如果只想要IP地址本身,不需要网卡信息,试试:
hostname -I
这条命令会直接列出服务器所有非回环IP地址,用空格隔开,适合在脚本中调用,或者你只想快速看一眼结果。
传统方案:ifconfig
老系统或习惯用ifconfig的朋友,如果提示命令不存在,先安装:
yum install net-tools -y # CentOS/RHEL apt install net-tools -y # Ubuntu/Debian
安装后执行ifconfig,同样在inet字段查看IP信息,输出格式比ip addr稍显直观,但信息量少一些。
查询公网IP地址的三种姿势
内网IP很好拿,但公网IP属于运营商分配的外部资源,无法直接通过本机命令获取,行业共识来看,必须借助外部服务器来”探测”你的出口地址。
curl命令(最推荐)
curl ifconfig.me curl ip.sb curl cip.cc
这三条任选其一,会直接返回你的公网IP。cip.cc还会附带IP归属地、运营商信息,方便你在排查网络故障时确认业务所在机房段。
老牌在线服务
在浏览器中访问ifconfig.me或ip138.com,页面会显示当前网络的公网IP,注意,这和你服务器用curl看到的结果一致,因为流量都从同一出口走。
DNS解析法(特定环境可用)
如果服务器内网绑定了域名映射,可通过nslookup或dig查询域名解析记录,间接判断公网IP,但该方法受DNS缓存和解析记录影响,仅作辅助参考,完整教程地址关联操作会在后面提到。
查端口监听和地址绑定
很多时候你发现问题不是”服务器没地址”,而是”服务没在正确地址上监听”,这时需确认端口绑定情况。
使用socket统计工具:
ss -tlnp
输出结果的Local Address:Port列,显示的就是服务监听的具体IP和端口,若显示0.0.0:80,说明80端口在所有网卡上监听,任意IP(包括公网)都能访问,若显示0.0.1:3306,说明MySQL只允许本机连接,远程连不上是正常现象。
需要特别留意,如果服务监听在::80,这是IPv6地址的写法,不要误以为没配置好。
通过路由表定位地址出口
假设服务器有多块网卡、多个IP,判断哪些流量走哪个地址,必须看路由表:
ip route show
类似:
default via 192.168.1.1 dev eth0 proto static 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
default via 192.168.1.1:默认网关,所有去往外部网络的流量都发在这里。src 192.168.1.100:表示源地址会使用你的内网IP。
用这个思路排查”服务器能上外网,但外面连不进来”的问题,通常查网关和防火墙就能定位。
快速验证服务器地址连通性
拿到地址后,需要验证它是否真正可用,以下方法适用于不同场景:
测试本机地址是否通
ping -c 3 192.168.1.100
如果收到回包,说明网卡和协议栈正常。
测试外部能否连接(需在另一台机器上执行)
telnet 192.168.1.100 22
能连上说明SSH服务在192.168.1.100这个地址上的22端口有响应,如果连接超时,检查防火墙和SELinux。
确认公网端口映射(在服务器本机使用)
curl http://ifconfig.me # 获取本机出口IP
如果本机访问公网服务正常,而外网访问服务器业务端口失败,问题大概率出在路由器端口转发或云安全组规则上,这部分和服务器地址无关,是网络策略层面的配置。
解析/etc/hosts与DNS地址映射
当你的服务器地址需要绑定域名时,/etc/hosts文件优先级最高,查看方法:
cat /etc/hosts
若出现类似0.113.10 mydomain.com的记录,说明本地指定了域名解析地址,这在测试环境或内网DNS不全时很有用,但生产环境中,优先使用单位内部的DNS服务器,修改网卡DNS配置在/etc/resolv.conf,执行cat /etc/resolv.conf即可查看当前DNS地址。
结合场景:从本机查多个网卡地址
服务器通常不只一块网卡,如云服务器有内网网卡和公网网卡,或物理机有管理网卡和业务网卡,此时用ip addr看到多个接口,怎么快速定位自己需要的那个?
经验做法:
- 接口名
eth0、ens33、enp0s3通常是虚拟机或老的物理网卡命名,对应主网络接口。 - 接口名
eth1、ens34等多为第二块网卡,常见于需要区分内网和外网的服务器。 - 接口名
docker0、virbr0是虚拟化网桥,不是物理网卡,不要当作服务器地址配置到业务里。
通过ip link show可以查看各接口的MAC地址和状态,判断哪个接口连接着物理线路。
查地址时常见的坑与解决
坑1:ifconfig不显示IP但网卡是up状态
大概率是网卡没有获取到地址,执行dhclient eth0(CentOS)或dhcpcd(部分发行版)试试动态获取IP,静态IP配置检查/etc/sysconfig/network-scripts/ifcfg-eth0或Netplan配置,确认没有拼错IP、网关、掩码。
坑2:公网IP和实际有出入
如果服务器前面还有一层负载均衡或CDN,你用curl看到的公网IP是前端设备的回源地址,并非服务器真实公网IP,可登录云控制台查看弹性公网IP绑定情况。
坑3:误把回环地址当成可用IP0.0.1只能代表本机自身,外部无法访问,若服务绑定在0.0.1,外部必然连接失败,检查服务配置文件,如Nginx的listen字段、MySQL的bind-address参数。
整理:一张表搞定地址查询
| 查询目标 | 命令/方法 | 适用场景 |
|---|---|---|
| 内网IPv4 | ip addr |
日常查看所有网卡信息 |
| 内网IP精简列表 | hostname -I |
脚本调用、快速输出 |
| 公网IP | curl cip.cc |
确认出口地址 |
| 监听端口及绑定的IP | ss -tlnp |
排查服务访问不到 |
| 默认出口网卡与网关 | ip route show |
多网卡路由选择 |
表格路径覆盖了绝大多数Linux服务器地址查询需求。
Q&A:服务器地址相关热门疑问
问:Linux怎么查看服务器地址是内网还是公网?
判断方法很简单:先运行ip addr查看本机所有IP,再运行curl ifconfig.me获取公网出口IP,如果这两个结果一致,说明该服务器直接拥有公网IP,可被互联网直接访问;如果两者结果不一致,说明你的服务器在NAT网关或负载均衡之后,外部通过网关映射来访问。
问:服务器配了多个地址,linux查看哪个是默认的出口地址?
执行ip route get 8.8.8.8这条命令,输出结果中,src字段后面的IP就是去往互联网时实际使用的源地址,这是系统按路由策略自动匹配的最优路径,通常与默认网关在同一网段,刻意修改默认源地址的行为容易造成路由混乱,除非有明确理由,不建议调整。
问:远程连接时,linux显示connection refused,是服务器地址错了吗?
connection refused与地址无关,它表示TCP连接已到达目标服务器,但目标端口没有服务在监听,排查顺序为:先用ss -tlnp确认服务是否启动并监听正确端口,再检查监听地址是否为0.0.0而非0.0.1,若是connection timed out,那才需要检查网络路由和防火墙,理解这对区别,能少走不少弯路。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/774974.html


