个人服务器无法连接外网的设置问题(LINUX,NMCLI)
本文为和AI大模型KIMI的对话记录,仅供参考。
解决问题,个人迷你主机设置静态地址后,局域网内其他电脑能连接,但是服务器却无法上网,经过查实是网关设置的问题。另外还有IPV4网络连接类型设置错误的问题。主要使用nmcli(NetworkManager)进行设置。
2025年11月10日
个人服务器无法连接互联网
User: 局域网内设备能ssh连到Linux服务器,但是服务器无法连到互联网。这是什么问题?
Kimi: 局域网设备能正常 SSH 登录 Linux 服务器,但服务器本身无法访问互联网,通常是服务器端网络配置或防火墙策略的问题。根据最新资料,可按以下顺序排查:
✅ 1. 检查默认网关是否配置正确
服务器若能被局域网访问,说明 IP 和子网掩码没问题,但网关配置错误或未生效会导致无法出网。
ip route
应看到类似:
default via 192.168.x.1 dev eth0
如果没有默认路由,或网关地址不对,需修正为局域网路由器的内网 IP(如 192.168.1.1)[2]。
✅ 2. 检查 DNS 配置是否正常
即使网络通,DNS 错误也会导致“无法上网”。
cat /etc/resolv.conf
应包含有效 DNS,如:
nameserver 8.8.8.8
nameserver 114.114.114.114
若为空或错误,可手动设置:
nmcli con mod "连接名称" ipv4.dns "8.8.8.8 114.114.114.114"
nmcli con up "连接名称"
[2]
✅ 3. 测试是否真“无法上网”
先 ping 公网 IP,再 ping 域名:
ping 8.8.8.8
ping www.baidu.com
- 若 IP 通但域名不通,DNS 问题;
- 若 IP 也不通,网关或防火墙问题[2]。
✅ 4. 检查服务器防火墙是否拦截出站流量
部分系统防火墙(如 ufw, firewalld)可能禁止了出站连接。
sudo ufw status
sudo firewall-cmd --list-all
可临时关闭防火墙测试:
sudo ufw disable
若关闭后能上网,说明防火墙规则过严,需放行出站流量或允许 DNS 和 HTTP/HTTPS 端口[3][4]。
✅ 5. 检查是否设置了静态 IP 但网关未持久化
很多用户在图形界面或 nmcli 设置静态 IP 后,重启网络或系统时网关未保存,导致“局域网通但外网不通”[2]。
建议:
nmcli con mod "连接名称" ipv4.gateway "192.168.x.1"
nmcli con up "连接名称"
✅ 6. 检查路由器是否对服务器做了 MAC 隔离或限速
部分企业或家用路由器(如小米、华为)支持MAC 级上网控制,即使局域网可达,也禁止特定设备访问外网。登录路由器后台检查是否对服务器做了限制[5]。
✅ 7. 检查是否未分配公网 IP(云服务器场景)
如果是云服务器(如阿里云、华为云),确认是否购买了公网带宽或绑定了弹性公网 IP。未绑定公网 IP 时,SSH 可通过内网访问,但服务器无法主动访问互联网[4][6]。
✅ 排查顺序建议(按优先级):
| 步骤 | 操作 |
|---|---|
| ① | ip route 查看是否有默认网关 |
| ② | ping 8.8.8.8 测试是否出网 |
| ③ | ping www.baidu.com 测试 DNS |
| ④ | 检查 /etc/resolv.conf DNS 设置 |
| ⑤ | 检查防火墙是否禁止出站 |
| ⑥ | 检查是否静态 IP 配置未保存网关 |
| ⑦ | 登录路由器检查是否被限制上网 |
✅ 总结一句话
局域网能 SSH 但服务器不能上网,99% 是网关、DNS 或防火墙配置问题,按上面顺序排查即可定位。
如你愿意,我可以帮你写一条一键检测脚本,自动输出网关、DNS、ping 测试结果。
发现是网关设置错了
User: ip route执行后看到的是 default via 192.168.5.255
Kimi: 你这条路由写错了!
192.168.5.255 是 192.168.5.0/24 这个网段的 广播地址,根本不能当网关用。
Linux 居然也把它写进了路由表,说明当初配静态 IP 时把「网关」一栏填成了 255,或者 DHCP 服务器发了错误的 Option 3。
结果就是:
- 局域网内目标 MAC 已知(ARP 能查到),所以 SSH 正常;
- 只要跨网段(上网),内核把包扔给 192.168.5.255,没人回,于是“不通外网”。
立即修复(临时生效)
# 先删掉这条错误默认路由
sudo ip route del default via 192.168.5.255# 换成正确的网关(一般是 192.168.5.1,具体看路由器)
sudo ip route add default via 192.168.5.1 dev eth0 # 把 eth0 换成你的网卡名
改完马上再 ping 8.8.8.8,大概率就能通。
永久修复(防止重启又丢)
1. NetworkManager 场景(大多数 CentOS 7/8、RHEL、Ubuntu 20+)
# 查看连接名
nmcli con show
# 假设叫 "Wired connection 1"
nmcli con mod "Wired connection 1" ipv4.gateway 192.168.5.1
nmcli con up "Wired connection 1"
2. 老版 /etc/sysconfig/network-scripts/ifcfg-*(CentOS 6/7)
编辑对应网卡文件,例如 /etc/sysconfig/network-scripts/ifcfg-eth0
把原来那行
GATEWAY=192.168.5.255
改成
GATEWAY=192.168.5.1
保存后
sudo systemctl restart network
3. Debian/Ubuntu 的 /etc/network/interfaces 静态写法
auto eth0
iface eth0 inet staticaddress 192.168.5.xxxnetmask 255.255.255.0gateway 192.168.5.1 # 把这行改对
然后
sudo systemctl restart networking
确认
ip route | grep default
应该只剩一条
default via 192.168.5.1 dev eth0 proto static
再
ping -c 4 8.8.8.8
ping -c 4 www.baidu.com
都能通就说明彻底解决。
DNS也没有设置
User: 我用ip route进行设置后可以ping通8.8.8.8,但是无法ping通www.baidu.com。然后我用nmcli进行了设置,也是一样的。
Kimi: 能 ping 8.8.8.8 却 ping www.baidu.com 不通,说明 IP 层已经出网,但域名解析失败——问题锁定在 DNS。
nmcli 改完“网关”只是修好了路由,并没有自动把 DNS 写对,所以现象依旧。
1. 先看现在系统里到底有没有可用 DNS
cat /etc/resolv.conf
常见两种“空”场景
- 文件里只有
127.0.0.53(systemd-resolved 本地桩),但上游没配; - 干脆是空白 / 注释。
2. 用 nmcli 把 DNS 写进连接并立即生效
# 1. 写上主流公用 DNS
nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1"# 2. 禁止 DHCP 覆盖(关键,很多人漏掉这一步)
nmcli con mod "Wired connection 1" ipv4.ignore-auto-dns yes# 3. 让配置立即生效
nmcli con down "Wired connection 1" && nmcli con up "Wired connection 1"
3. 验证
cat /etc/resolv.conf
现在应该能看到
nameserver 8.8.8.8
nameserver 1.1.1.1
再测
ping -c4 www.baidu.com
host www.baidu.com
nslookup www.baidu.com
任意一个能解析出 39.156.69.79/110.242.68.3 之类地址即成功。
4. 如果还是只有 127.0.0.53
说明系统启用了 systemd-resolved,但 /etc/resolv.conf 是个软链指向 ../run/systemd/resolve/stub-resolv.conf。
有两种做法,任选其一:
A. 继续用 systemd-resolved
把 DNS 写进 resolved 的配置:
sudo tee /etc/systemd/resolved.conf.d/dns.conf <<EOF
[Resolve]
DNS=8.8.8.8 1.1.1.1
EOF
sudo systemctl restart systemd-resolved
B. 不用 systemd-resolved(简单直接)
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
# 把 /etc/resolv.conf 换成普通文件
sudo rm -f /etc/resolv.conf
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf
然后再测。
5. 防火墙/ISP 劫持罕见情况
若以上都做完仍解析失败,可抓包确认:
sudo tcpdump -i any -n port 53 &
nslookup www.baidu.com
- 能看到向外发 53 请求但没回 → 被上游防火墙丢包(公司/校园网常见)。
- 能看到应答但地址还是不通 → 可能是 ISP 返回假 IP,换 DNS over HTTPS/TLS 解决(如
cloudflared、systemd-resolved DoT)。
一句话总结
路由通了但域名不通,100 % 是 DNS 配置问题;用
nmcli写 DNS 并禁止 DHCP 覆盖,或停用systemd-resolved后手动写/etc/resolv.conf就能好。
IPV4连接模式也需要修改
User: 我用nmcli设置dns的时候被提示“此属性不允许用于method=shared”,然后我通过nmcli把属性设置为auto,再执行剩下的nmcli命令就正常了。
Kimi: 你遇到的提示 “此属性不允许用于 method=shared” 是因为之前把该连接设成了 “共享模式”(IPv4.method=shared)。
共享模式是 NetworkManager 的 “把这台机器当路由器” 功能(类似 Windows 的“移动热点”),此时 NM 会:
- 自己启动 dnsmasq 给下游设备发 DHCP;
- 拒绝用户手动写 DNS、网关、地址等参数——所以
ipv4.dns/ipv4.gateway都会报 “not allowed for method=shared”。
你把它改回 method=auto(即普通 DHCP 客户端)以后,自然就能正常写 DNS 了,因此后面一切顺利。
一句话总结
shared 模式是“热点”不是“上网客户端”,想手动改地址/网关/DNS 就必须先切回 auto 或 manual。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/961727.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!