How to Change Network Interface MTU in Linux Using ip link

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"

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.