How to Configure MTU Settings for Optimal Performance
The Maximum Transmission Unit (MTU) defines the largest packet size that can be sent over a network link without fragmentation. Correctly configuring MTU on your Breeze instance prevents packet fragmentation, reduces overhead, and can significantly improve throughput for large data transfers.
Understanding MTU
The standard Ethernet MTU is 1500 bytes. Jumbo frames use MTU values of 9000 bytes or higher. Tunneling protocols like VXLAN, GRE, and VPNs add encapsulation headers that reduce the effective MTU. If a packet exceeds the path MTU and the Don't Fragment (DF) bit is set, the packet is dropped and an ICMP "Fragmentation Needed" message is sent back.
Checking Current MTU
View the MTU setting on all interfaces:
ip link show
# or for a specific interface
ip link show dev eth0 | grep mtu
Discovering Path MTU
Use ping with the Don't Fragment flag to discover the path MTU between your Breeze and a destination:
# Linux: -M do sets DF bit
ping -M do -s 1472 -c 4 destination-host.example.com
Start with 1472 (1500 minus 28 bytes for IP and ICMP headers). If you get "message too long" errors, reduce the size. The largest size that works plus 28 equals your path MTU.
Setting MTU Temporarily
Change the MTU on an interface immediately:
sudo ip link set dev eth0 mtu 1400
This change does not survive a reboot.
Persistent MTU on Ubuntu/Debian (Netplan)
Edit your Netplan configuration in /etc/netplan/:
network:
version: 2
ethernets:
eth0:
mtu: 1400
addresses:
- 203.0.113.10/24
routes:
- to: default
via: 203.0.113.1
Apply with sudo netplan apply.
Persistent MTU on CentOS/RHEL
Use NetworkManager:
sudo nmcli con mod eth0 802-3-ethernet.mtu 1400
sudo nmcli con up eth0
MTU for Common Scenarios
| Scenario | Recommended MTU |
|---|---|
| Standard Ethernet | 1500 |
| WireGuard VPN | 1420 |
| OpenVPN (UDP) | 1400 |
| VXLAN overlay | 1450 (or underlay at 1550) |
| GRE tunnel | 1476 |
| PPPoE connection | 1492 |
| Jumbo frames (LAN only) | 9000 |
Enabling Jumbo Frames
If your network infrastructure supports jumbo frames, enable them for better throughput on large transfers:
sudo ip link set dev eth0 mtu 9000
Every device along the path must support the same MTU. A single link with a lower MTU will cause fragmentation or drops. Verify with:
ping -M do -s 8972 -c 4 peer-host
TCP MSS Clamping
When you cannot change the MTU on all hops, use MSS clamping to ensure TCP segments fit within the path MTU:
sudo iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN \
-o eth0 -j TCPMSS --clamp-mss-to-pmtu
This automatically adjusts the TCP Maximum Segment Size during the handshake, preventing fragmentation without requiring MTU changes across the entire path on your Breeze network.