Linux主机网络配置实战_地址与网关设置解析【指导】

7次阅读

用 ip 命令临时配置 IPv4 需分两步:先用 ip addr add 添加 IP 地址,再用 ip route add 设置默认网关;缺一不可,否则导致同网段可达但无法访问外网或路由选错出口。

Linux 主机网络配置实战_地址与网关设置解析【指导】

如何用 ip 命令临时配置 IPv4 地址和默认网关

临时配置意味着重启网络服务或系统后失效,适合调试或快速验证。关键不是记命令,而是理解参数含义和顺序。

ip 的地址添加和 路由 添加是两个独立操作,漏掉任一都会导致无法通信:

  • ip addr add 192.168.1.100/24 dev eth0 —— 给 eth0 接口分配 IP 和 子网 掩码(/24 等价于 255.255.255.0
  • ip route add default via 192.168.1.1 dev eth0 —— 添加默认路由,指向网关 192.168.1.1,且明确指定出口设备

常见错误:只配 IP 不配路由 → 能 ping 通同网段,但无法访问外网;配了路由却没指定 dev → 内核可能选错出口,尤其多网卡时。

为什么 /etc/network/interfaces 在 Debian/Ubuntu 上改了不生效

改完文件只是“写入配置”,不会自动应用。必须触发重载,而且不同发行版 reload 方式不同。

Debian/Ubuntu(使用 ifupdown)的正确流程:

  • 先卸载旧配置:ifdown eth0(若提示 interface not configured,说明该接口未被 ifupdown 管理)
  • 再加载新配置:ifup eth0
  • 或者批量重载:systemctl restart networking(但部分新版 Ubuntu 已弃用此服务)

注意:systemctl restart networking 可能失败并中断 SSH 连接——因为 networking 服务会尝试关闭所有非 loopback 接口,包括你正在连的那一个。建议先开一个本地终端或带 console 访问权限再操作。

CentOS/RHEL 8+ 用 nmcli 配置静态 IP 时的三个关键点

NetworkManager 成为默认网络管理器后,直接改 /etc/sysconfig/network-scripts/ifcfg-* 文件可能被覆盖或忽略。必须用 nmcli 或确保 NetworkManager 不接管该连接。

推荐做法(以修改 ens33 为例):

  • 确认连接名:nmcli connection show,找到对应连接(常为接口名或“System ens33”)
  • 设静态 IP:nmcli connection modify "System ens33" ipv4.addresses 192.168.1.100/24
  • 设网关与 DNS:nmcli connection modify "System ens33" ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8" ipv4.method manual
  • 最后激活:nmcli connection down "System ens33" && nmcli connection up "System ens33"

遗漏 ipv4.method manual 是最常见失败原因:不设此项,NetworkManager 仍按 DHCP 行为处理,其他静态参数会被忽略。

验证配置是否真正生效的三步检查法

别只信 ip addr 显示有地址,更要看内核路由表和实际连通性。

依次执行:

  • 查接口状态:ip addr show eth0 —— 确认 UP 状态、有 inet 行、且没有 deprecated 标记(后者表示地址被标记为过期,可能因重复或冲突)
  • 查路由表:ip route show default —— 必须输出类似 default via 192.168.1.1 dev eth0,且 dev 指向正确接口
  • 查连通性:ping -c2 192.168.1.1(网关)、ping -c2 8.8.8.8(公网)、curl -I http://httpbin.org(DNS + HTTP)—— 逐层排除:通网关不通公网 = 路由或 防火墙 问题;通公网不通域名 = DNS 配置错误

很多问题卡在 DNS:/etc/resolv.conf 被 NetworkManager 或 systemd-resolved 自动覆盖,手动改后很快恢复原状。真要固定 DNS,请优先通过 nmcli 设置,或禁用 systemd-resolved 后再改文件。

text=ZqhQzanResources