临时修改MTU的话,应当使用sudo ip link set dev eth0 mtu 1400这条命令。为什么呢?因为ifconfig在CentOS 7中已经被废弃了,而且它的mtu参数不太稳定。这里要注意,必须确保接口处于UP状态才行哦。等修改生效后,我们可以用ip link show dev eth0 | grep mtu来进行验证。不过得提醒一下,这种临时修改的方式,在重启后就会失效啦。

临时修改MTU用ip link set,别再用ifconfig
ifconfig在CentOS 7里已被标记为废弃工具,虽然还能运行,但不保证所有功能(比如mtu参数)稳定生效。真正可靠、推荐的方式是ip link set:
执行命令:sudo ip link set dev eth0 mtu 1400
验证是否生效:ip link show dev eth0 | grep mtu —— 输出中mtu 1400即表示已改成功
- 这个操作立即生效,无需重启网卡或网络服务
- 仅对当前运行时有效,系统重启或
systemctl restart network后会还原 - 不能用于未启用的接口(
DOWN状态),需先ip link set eth0 up - MTU值必须在接口硬件支持范围内(常见范围:552–9000;低于552多数驱动拒绝设置)
永久修改必须写入/etc/sysconfig/network-scripts/ifcfg-*
CentOS 7仍沿用传统ifcfg-配置文件机制(哪怕启用了NetworkManager,只要没用nmcli接管该连接,就以该文件为准):
编辑对应接口文件,例如sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
添加或修改这一行:MTU="1400"(注意:等号两边不加空格,值用双引号包裹更稳妥)
- 不要写成
mtu=1400或MTU=1400(无引号),某些版本的network服务会忽略 - 修改后必须重启网络服务:
sudo systemctl restart network(不是systemctl restart NetworkManager) - 如果该接口由NetworkManager管理(
ONBOOT=yes且TYPE=Ethernet),建议统一用nmcli,否则可能被NM覆盖
用nmcli永久设置MTU的前提是接口由NetworkManager托管
如果你的接口配置里有DEVICE=eth0但没写TYPE=Ethernet,或者ONBOOT=no,NetworkManager很可能根本没管它——此时nmcli无效。
确认方式:nmcli connection show,看输出里是否有对应连接名(如System eth0)
若有,就执行:sudo nmcli connection modify "System eth0" 802-3-ethernet.mtu 1400
"System eth0"必须和nmcli connection show输出的名称完全一致(含空格、大小写)- 修改后需断开重连:
sudo nmcli connection down "System eth0" && sudo nmcli connection up "System eth0" - 不建议混合使用
nmcli和ifcfg-文件修改同一接口,容易冲突
MTU设错会导致连不上网,但错误现象不报MTU相关字眼
MTU过小(如设成500)会让TCP握手SYN包都发不出去;过大(如设成9000但中间链路只支持1500)则触发ICMP “Fragmentation needed”却被丢弃——结果都是“能ping通网关但无法访问外网”或“SSH连接卡在密码输入后”。排查时优先跑这句:ping -M do -s 1392 192.168.1.1(假设网关是192.168.1.1)
-M do强制不分片,-s指定ICMP数据部分大小,总长 =s + 28(IP头20B + ICMP头8B)- 如果返回
Packet needs to be fragmented but DF set,说明当前MTU太小;如果超时但ping -s 1300成功,说明MTU应在1328左右 - 别依赖
ethtool eth0查MTU——它显示的是底层驱动允许的最大值,不是当前生效值
systemctl restart network,而不是ifdown && ifup——后者在CentOS 7里可能跳过MTU重载逻辑。