In computer networking, the Maximum Transmission Unit (MTU) specifies the maximum size in bytes of an unfragmented layer 3 packet (such as IPv4 or IPv6) that a network interface can physically transmit or receive over a link. Standard Ethernet networks enforce a default MTU of 1500 bytes. However, modern storage networks, virtualisation clusters, and encapsulated VPN tunnels frequently require custom MTU configurations.
For example, storage area networks (SANs) and Network Attached Storage (NAS) devices running iSCSI or NFS benefit substantially from Jumbo Frames (typically 9000 bytes), which reduce CPU interrupt overhead by bundling more payload data into fewer frames. Conversely, virtual private networks and encapsulated tunnels (such as WireGuard, GRE, or PPPoE) require smaller MTUs (such as 1420 or 1476 bytes) to prevent packet fragmentation. Here is how to inspect, change, test, and persist network interface MTU in Linux using ip link.
Step 1: Check the Current Network Interface MTU
To view your network interfaces and their currently assigned MTU values, use the modern ip link command:
ip link show
To inspect a specific network adapter (for example, eth0 or enp3s0), specify the device name:
ip link show dev eth0
The console output displays the interface state and technical boundaries:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
The value following mtu represents your adapter’s current transmission ceiling in bytes.
Step 2: Change the MTU Temporarily at Runtime
To modify the MTU on an active network interface, execute ip link set with root privileges, specifying the device and desired byte size:
Enabling Jumbo Frames (MTU 9000) for Storage and High-Speed LANs
sudo ip link set dev eth0 mtu 9000
Note: Jumbo frames require every intermediate network component—including network switches, routers, and peer devices—to support and be configured for 9000-byte frames. If an intermediate switch does not support jumbo frames, oversized packets will be dropped silently.
Reducing MTU for Encapsulated VPNs or PPPoE (MTU 1420 or 1476)
sudo ip link set dev eth0 mtu 1420
Lowering the MTU prevents packet fragmentation across WAN paths where tunnel encapsulation headers consume extra payload space.
Step 3: Verify the New MTU Configuration
Check the device state again to confirm the kernel has accepted the new MTU parameter:
ip link show dev eth0
Verify that the output now reflects your updated byte count (e.g. mtu 9000).
Step 4: Test Path MTU and Packet Fragmentation with Ping
To verify that packets of your target size can transit your local network or router without fragmentation, use ping with the Don’t Fragment (DF) bit set using the -M do flag:
ping -M do -s 8972 -c 4 192.168.1.100
Understanding the math: Ethernet packets add 28 bytes of overhead (20 bytes for IPv4 header + 8 bytes for ICMP header). Therefore, an MTU of 9000 accepts an ICMP payload size of 8972 bytes (9000 – 28 = 8972). If you test standard 1500 MTU, use a payload size of 1472 bytes (1500 – 28 = 1472).
If the path does not support the packet size, Linux returns:
ping: local error: message too long, mtu=1500
Step 5: Persisting MTU Across System Reboots
Changes made using ip link are runtime-only and vanish when the system restarts. To make your MTU configuration permanent, apply it in your distribution’s network configuration manager:
Netplan (Ubuntu / Debian)
Edit your primary Netplan configuration file (e.g. /etc/netplan/01-netcfg.yaml) and add the mtu property under your physical adapter:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
mtu: 9000
Apply the change using sudo netplan apply.
systemd-networkd (Arch Linux, Fedora, Alpine)
Edit your network matching profile in /etc/systemd/network/10-eth0.network and specify MTUBytes under the [Link] section:
[Match]
Name=eth0
[Link]
MTUBytes=9000
[Network]
DHCP=yes
Commit the persistent configuration with sudo systemctl restart systemd-networkd.
NetworkManager (Rocky Linux, RHEL, CentOS, OpenSUSE)
If your system relies on NetworkManager, configure the connection profile using nmcli:
sudo nmcli connection modify "eth0" 802-3-ethernet.mtu 9000
sudo nmcli connection up "eth0"