Cách sửa nhanh: Thường là do MTU
Khoảng 90% trường hợp, lỗi này bắt nguồn từ việc sai lệch MTU (Maximum Transmission Unit) của mạng. Khi một gói tin vượt quá giới hạn kích thước của một phân đoạn mạng—thường gặp với VPN, Docker bridge hoặc Cloud VPC—nó sẽ bị phân mảnh. Các giao thức SSL/TLS không thể xử lý tốt việc phân mảnh này, dẫn đến lỗi checksum.
Hành động ngay lập tức: Hạ thấp MTU trên giao diện mạng hoặc mạng Docker của bạn xuống 1400 hoặc 1450. Kiểm tra ngay để xem kết nối có ổn định hay không.
# Hạ thấp MTU xuống 1400 tạm thời để kiểm tra
sudo ip link set dev eth0 mtu 1400
Tại sao điều này xảy ra
Lỗi này báo hiệu sự phá vỡ tính toàn vẹn của dữ liệu. Nó có nghĩa là dữ liệu đến máy khách của bạn không khớp với Mã xác thực thông điệp (MAC) do máy chủ tạo ra. Dữ liệu của bạn có khả năng đã bị hỏng, bị cắt bớt hoặc bị lắp ráp lại không chính xác trong quá trình truyền tải.
Các giao thức SSL/TLS rất khắt khe về tính toàn vẹn. Thậm chí chỉ một byte bị thiếu hoặc một bit bị đảo ngược trong một gói tin cũng sẽ khiến quá trình giải mã thất bại. Không giống như lỗi timeout thông thường, lỗi này chứng minh rằng kết nối đã thành công, nhưng luồng dữ liệu đã bị sụp đổ khi lưu lượng truy cập lớn bắt đầu đổ về.
Những nơi thường xảy ra sự cố
- Docker Containers: Docker mặc định MTU là 1500. Tuy nhiên, nếu máy chủ của bạn sử dụng MTU thấp hơn (như tiêu chuẩn 1460 trên Google Cloud Platform), các gói tin sẽ bị cắt bớt tại bridge.
- VPNs và các đường hầm mã hóa: Các giao thức như IPsec hoặc WireGuard bao bọc dữ liệu của bạn trong các header bổ sung. Điều này để lại ít hơn 1500 byte tiêu chuẩn cho phần dữ liệu thực tế (payload).
- Phần cứng mạng cũ: Đôi khi, một switch cũ hoặc một card mạng (NIC) rẻ tiền sẽ làm đảo ngược các bit khi tải cao.
- Sai lệch thư viện: Sự không tương thích giữa driver cơ sở dữ liệu (như
libpq) và phiên bản OpenSSL của hệ thống có thể gây ra hành vi giải mã thất thường.
Cách khắc phục
1. Hiệu chỉnh MTU
Môi trường đám mây và VPN thường yêu cầu MTU thấp hơn mức 1500 byte tiêu chuẩn. Kiểm tra cài đặt hiện tại của bạn bằng lệnh ip addr. Để tìm giới hạn chính xác mà đường truyền của bạn hỗ trợ, hãy sử dụng ping với cờ "không phân mảnh" (do not fragment):
# Kiểm tra với 1472 byte (1500 - 28 byte cho header ICMP/IP)
ping -M do -s 1472 your-database-host.com
Nếu bạn thấy lỗi "Frag needed", hãy hạ thấp giá trị -s (thử 1430, sau đó là 1400) cho đến khi ping thành công. Cộng thêm 28 vào giá trị thành công đó để xác định MTU tối đa của bạn.
Để lưu thay đổi này lâu dài trên Ubuntu (sử dụng Netplan):
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
mtu: 1400
2. Cấu hình MTU cho mạng Docker
Nếu ứng dụng của bạn chạy trong Docker nhưng kết nối với cơ sở dữ liệu bên ngoài, bạn phải căn chỉnh MTU của bridge trong tệp docker-compose.yml của mình:
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1400
3. Nâng cấp các thư viện máy khách
Đôi khi lỗi phần mềm là nguyên nhân. Nếu bạn đang chạy PostgreSQL, libpq sẽ xử lý các tác vụ SSL nặng. Nâng cấp image gốc của bạn—ví dụ: chuyển từ python:3.9-slim sang python:3.12-slim—thường giải quyết được các lỗi OpenSSL tiềm ẩn.
sudo apt-get update && sudo apt-get install --only-upgrade libpq5 openssl
4. Vô hiệu hóa tính năng Hardware Offloading của NIC
Trên các máy chủ vật lý, Card mạng (NIC) có thể cố gắng tối ưu hóa việc xử lý TCP thông qua Generic Receive Offload (GRO). Đôi khi những tối ưu hóa này làm xáo trộn các gói tin được mã hóa. Hãy tắt chúng để loại trừ sự can thiệp của phần cứng:
sudo ethtool -K eth0 gro off
sudo ethtool -K eth0 lro off
Xác minh cách khắc phục
Các truy vấn nhỏ thường thành công ngay cả khi có vấn đề về MTU vì chúng không chạm tới giới hạn kích thước gói tin. Để kiểm tra kết nối một cách thực sự, hãy chạy một truy vấn trả về hàng nghìn hàng. Điều này buộc mạng phải xử lý các payload lớn và bị phân mảnh.
# Sử dụng psql để lấy một tập dữ liệu lớn
psql "sslmode=require host=your-db.com user=myuser dbname=mydb" -c "SELECT * FROM large_table LIMIT 5000;" > /dev/null
Nếu quá trình này hoàn tất mà không có lỗi bad record mac, đường truyền của bạn cuối cùng đã ổn định.
Mẹo về mạng và phòng ngừa
Một cơ sở dữ liệu tin cậy dựa trên một nền tảng mạng ổn định. Khi thiết kế subnet hoặc VPC, luôn tính đến phần tiêu hao (overhead) của các lớp bảo mật như IPsec.
Tôi dựa vào các công cụ như Subnet Calculator của ToolCraft để lập bản đồ các ranh giới mạng. Nó giúp hình dung các dải CIDR và đảm bảo logic chia subnet không xung đột với các cổng VPN yêu cầu điều chỉnh MTU cụ thể. Việc lập kế hoạch các ranh giới này sớm sẽ ngăn chặn các lỗi giải mã và handshake SSL gây khó chịu về sau.
Cuối cùng, hãy kiểm tra nhật ký tường lửa để tìm các cài đặt "Deep Packet Inspection" (DPI). Một số tường lửa doanh nghiệp cố gắng kiểm tra lưu lượng SSL và vô tình làm hỏng các bản ghi, gây ra chính xác thông báo lỗi này.

