Linux 网络配置基础与高级技巧

5次阅读

ip命令替代ifconfig需分清addr/link/route子命令;地址增删须带CIDR;路由不持久需写配置文件;systemd-networkd要求文件名和网卡名严格匹配;nmcli修改后须down/up生效。

Linux 网络配置基础与高级技巧

ip 命令替代 ifconfig 的实操要点

现在 ifconfig 已被标记为废弃,ip 是唯一推荐的网络配置工具。它不是“更好用的 ifconfig”,而是设计逻辑完全不同——地址、路由、链路状态分属不同子命令,混用会直接失效。

  • ip addr show 查 IP,但 ip addr add 192.168.1.10/24 dev eth0 不会自动 up 接口,必须额外执行 ip link set eth0 up
  • 删除地址不能只写 ip addr del,必须带完整 CIDR:ip addr del 192.168.1.10/24 dev eth0,漏掉 /24 会报 RTNETLINK answers: Invalid argument
  • ip route 默认不持久化,重启即丢;想永久生效得写进 /etc/network/Interfacesdebian)或 /etc/sysconfig/network-scripts/route-eth0(RHEL)

systemd-networkd 配置静态 IP 的常见失败点

systemd-networkd 时,.network 文件看似简单,但路径、优先级、依赖顺序稍错就静默不生效。

  • 文件必须放在 /etc/systemd/network/ 下,且后缀严格为 .networketh0.network.baketh0.conf 都会被忽略
  • DHCP 和静态 IP 不能共存于同一文件:启用 [DHCP] 后再写 [Address],systemd-networkd 会跳过静态配置,不报错也不提示
  • 网卡名要和 ip link show 输出完全一致,eno1 写成 enp0s3eth0,服务启动时日志里只有 Could not generate persistent MAC address 这种误导信息

route 命令和 ip route 的兼容性陷阱

route 是老工具,输出格式固定,但内核路由表实际由 ip route 管理;两者显示结果可能不一致,尤其在多路径或策略路由场景下。

  • route -n 不显示 metric、scope、protocol 字段,而 ip route show table all 才能看到完整路由决策链
  • route add -host 10.0.0.5 gw 192.168.2.1 添加的路由,ip route 里会显示为 10.0.0.5 via 192.168.2.1 dev eth0 proto Static scope link,其中 scope link 表示该路由仅限直连,若网关不可达,这条路由不会触发 ARP,也不会 fallback
  • 脚本中混用 routeip route 清理路由,容易漏删某条规则——route del 不支持 table 指定,而 ip route flush table 100 可精准清除策略路由表

nmcli 修改连接后不生效的典型原因

nmcli 操作的是 NetworkManager 的运行时配置,但底层是否真正下发,取决于 connection 的 autoconnectinterface-name 和设备当前状态。

  • 改完 nmcli connection modify "Wired connection 1" ipv4.addresses "192.168.3.20/24" 后,必须 nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1",只 reload 不触发重协商
  • 如果网卡已被 systemd-networkdifupdown 占用,NetworkManager 会自动禁用该连接,nmcli device status 显示 unmanaged,此时任何 nmcli connection modify 都无效
  • ipv4.method manual 必须显式设置,否则即使填了 addresses,NM 仍按 auto 处理,会尝试 DHCP 并覆盖你的静态配置

网络配置的麻烦不在命令记不住,而在每个工具背后都有一套隐含的状态机——ip link 管物理层,ip addr 管协议地址,ip route 管转发路径,systemd-networkd 管声明式定义,NetworkManager 管桌面交互生命周期。它们可以共存,但边界一旦模糊,问题就藏在日志最不显眼的那一行里。

text=ZqhQzanResources