最靠谱查当前mtu值的方式是运行ip link show dev eth0 | grep mtu,因ifconfig已弃用、ip addr show可能省略mtu字段;回环口lo的65536为特例,不可作物理网卡参考。

直接改 ip link set dev eth0 mtu 1450 很可能没反应,不是命令错,而是被 NetworkManager 拉回、接口状态不对,或链路本身不支持。关键得先查准、再测实、最后写对位置。
怎么查当前 MTU 值才靠谱
别用 ifconfig——它已弃用,容器或精简内核里甚至不可用。ip addr show 有时省略 mtu 字段,输出不稳定。唯一可靠方式是:
- 查单个网卡:运行
ip link show dev eth0 | grep mtu(注意是link,不是addr) - 查所有网卡:运行
ip link show,逐行找含mtu的行 - 回环口
lo的 mtu 65536 是特例,不能当物理网卡参考
临时改完 ping 不通?先盯这三件事
执行 sudo ip link set dev eth0 mtu 1450 没报错,但 ping -M do -s 1422 8.8.8.8 失败,大概率是:
- 接口必须是
state UP,DOWN 状态下命令静默失败 - 被 NetworkManager 或 systemd-networkd 覆盖:几秒后自动还原,可临时停用验证:
sudo systemctl stop NetworkManager - 1450 仍大于路径最小 MTU:用
ping -M do逐步试探,真实 MTU = 最大成功-s值 + 28(IP 头 20 字节 + ICMP 头 8 字节)
永久生效不能只改一个地方
重启就失效的临时修改只是调试。要持久化,必须写对系统对应的配置文件:
- Ubuntu/Debian(Netplan):改
/etc/netplan/*.yaml,在对应网卡下加mtu: 1450,再运行sudo netplan apply - RHEL/CentOS:改
/etc/sysconfig/network-scripts/ifcfg-eth0,添加MTU=1450,再sudo systemctl restart network - 统信 UOS / 麒麟 KOS:优先用
sudo nmcli connection modify "有线连接" 802-3-ethernet.mtu 1450,然后 down + up 连接
验证是否真生效?别信配置写了就等于改了
尤其在有 systemd-networkd、cloud-init 或容器环境里,覆盖逻辑很隐蔽。改完务必再跑一次:
-
ip link show dev eth0 | grep mtu—— 看输出是否真变成你设的值 - 进对应网络命名空间(如容器)单独检查,host 上改了,netns 里未必同步
- 驱动或虚拟化平台(如旧版 VMware)可能不支持非标 MTU,设了也无效











