MTU 1420: tại sao một số trang web có thể bị treo và cách khắc phục
MTU là gì, 1420 từ đâu ra, vấn đề “trang treo giữa chừng” trông như thế nào, và cách kiểm tra và khắc phục.
Cập nhật 23 tháng 8, 2026
MTU là kích thước gói tối đa có thể gửi qua mạng mà không bị phân mảnh. Giá trị thông thường trên Ethernet là 1500 byte. Khi lưu lượng đi qua tunnel, phần header riêng của nó chiếm một phần không gian, khiến payload còn lại ít hơn: giá trị điển hình là 1420.
Bản thân điều này không phải vấn đề. Vấn đề bắt đầu khi một bên tin rằng mình có thể gửi 1500, nhưng trên đường đi có một đoạn với 1420 và thông báo về điều đó bị mất.
Triệu chứng trông như thế nào
- SSH kết nối được, lời chào đến, nhưng
lstrong một thư mục lớn làm treo phiên. - Một trang bắt đầu tải và đứng giữa chừng.
curl -I(chỉ header) hoạt động, nhưngcurlđầy đủ bị treo.apt updatethành công,apt upgradeđình trệ khi tải xuống.- Các yêu cầu nhỏ bay vèo, các phản hồi lớn không bao giờ đến.
Dấu hiệu chung đều giống nhau: gói nhỏ đi qua được, gói lớn biến mất mà không có lỗi. Kết nối không ngắt; nó chỉ im lặng.
Nguyên nhân là cơ chế thương lượng kích thước gói dựa vào các thông báo dịch vụ ICMP. Nếu có gì đó lọc chúng trên đường đi, bên gửi sẽ không bao giờ biết rằng gói quá lớn và cứ gửi lại mãi.
Kiểm tra
Gửi một gói với bit don't-fragment được bật và giảm kích thước cho đến khi nó đi qua được:
ping -M do -s 1472 -c 2 1.1.1.1
ping -M do -s 1392 -c 2 1.1.1.1
Kích thước -s được cộng thêm 28 byte header: 1472 tương ứng với MTU 1500, và 1392 tương ứng với MTU 1420. Nếu tùy chọn đầu tiên thất bại và tùy chọn thứ hai thành công, bạn đã tìm ra giới hạn.
Giá trị hiện tại của interface:
ip link show
ip route get 1.1.1.1
Cách khắc phục
Kiểm tra một lần:
ip link set dev eth0 mtu 1420
Vĩnh viễn, qua systemd-networkd — tệp /etc/systemd/network/10-eth0.network:
[Match]
Name=eth0
[Link]
MTUBytes=1420
systemctl restart systemd-networkd
Nếu NetworkManager quản lý mạng:
nmcli connection modify "System eth0" 802-3-ethernet.mtu 1420
nmcli connection up "System eth0"
Kỹ thuật thứ hai, hữu ích khi bạn không thể chạm vào MTU, là clamp kích thước phân đoạn TCP tại ranh giới. Trong nftables:
tcp flags syn tcp option maxseg size set rt mtu
Khi nào điều này ảnh hưởng đến bạn
Trên chính một máy Millida VDS, mạng được cấu hình đúng cách, và bạn thường không cần chạm vào MTU thủ công. Bạn phải xử lý nó khi tự thiết lập một tunnel: WireGuard, OpenVPN, GRE, VPN đến văn phòng, hoặc một liên kết giữa các máy. Bên trong tunnel, MTU luôn nhỏ hơn, và bạn cần đặt nó một cách rõ ràng.
Đối với WireGuard trong phần [Interface]:
MTU = 1420
Lỗi thường gặp
| Lỗi | Hậu quả |
|---|---|
| Chặn hoàn toàn ICMP trong tường lửa | Bạn tự phá vỡ thương lượng kích thước gói cho chính mình |
| Chỉ đặt MTU trên một phía của tunnel | Lưu lượng bị treo theo một hướng |
| Thay đổi MTU một cách ngẫu nhiên | Bạn che giấu nguyên nhân thực sự: mất gói hoặc lỗi dịch vụ |
Đừng chạm vào MTU cho đến khi bạn đã tái hiện triệu chứng bằng lệnh
ping -M do. Nếu không có kiểm tra đó, bạn đang thay đổi một cấu hình đang hoạt động dựa trên phỏng đoán — và nhận được một vấn đề mới thay vì vấn đề cũ. Đừng chặn hoàn toàn ICMP; xem nftables.