Skip to content
VDS · Mạng, địa chỉ IP và tên miền

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 ls trong 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ưng curl đầy đủ bị treo.
  • apt update thà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ỗiHậu quả
Chặn hoàn toàn ICMP trong tường lửaBạ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 tunnelLưu lượng bị treo theo một hướng
Thay đổi MTU một cách ngẫu nhiênBạ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.