Xây dựng Mesh VPN tốc độ cao với Netmaker: Kết nối Multi-Cloud hiệu quả vượt trội

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

Nỗi lo về kết nối Multi-Cloud

Quản lý một dàn máy chủ rải rác trên AWS, Google Cloud và các trung tâm dữ liệu on-premise thường là một cơn ác mộng. Tôi từng tham gia một dự án với cụm Kubernetes trải dài trên ba khu vực (region) khác nhau.

Ban đầu chúng tôi sử dụng mô hình Hub-and-Spoke VPN tiêu chuẩn với OpenVPN, nhưng chỉ trong vòng hai tuần, độ trễ đã trở thành vấn đề nghiêm trọng. Mọi gói tin đi từ máy chủ web ở Frankfurt đến cơ sở dữ liệu ở Singapore đều phải đi vòng qua một hub trung tâm ở New York. Hiệu ứng ‘hairpinning’ này không chỉ làm ứng dụng bị lag mà còn khiến chi phí truyền tải dữ liệu (egress cost) tăng gần 30% do các bước nhảy (hop) dữ liệu không cần thiết.

Với bất kỳ kỹ sư DevOps nào, giải quyết vấn đề này giống như một thử thách bắt buộc để trưởng thành. Bạn cần các node giao tiếp trực tiếp với nhau mà không cần thông qua trung gian. Mặc dù Tailscale là giải pháp “mì ăn liền” cho việc này, nhưng nó là một sản phẩm SaaS, có thể không phù hợp với các chính sách bảo mật khắt khe hoặc ngân sách hạn hẹp. Netmaker cung cấp một giải pháp thay thế tự vận hành (self-hosted). Nó sử dụng WireGuard ở cấp nhân (kernel-level) để mang lại băng thông cực lớn mà không tốn phí thuê bao hàng tháng theo người dùng.

Tại sao VPN truyền thống lại chậm chạp trong các hệ thống hiện đại

Hiệu năng thường bị ảnh hưởng do kiến trúc lỗi thời. Các thiết lập truyền thống như IPsec hoặc OpenVPN dựa trên mô hình Hub-and-Spoke. Nếu Node A muốn gửi một tệp cho Node B, nó phải đi qua Hub. Điều này tạo ra một điểm yếu duy nhất (single point of failure) và là nút thắt cổ chai về băng thông. Trong các thử nghiệm của tôi, điều này đã làm tăng thêm hơn 150ms độ trễ không cần thiết cho các yêu cầu liên vùng.

Ngoài ra còn có vấn đề về tài nguyên tiêu hao (overhead). OpenVPN chạy trong user-space. Mỗi khi một gói tin được mã hóa, nó phải luân chuyển giữa kernel của Linux và ứng dụng. Việc chuyển đổi ngữ cảnh (context switching) này tiêu tốn chu kỳ CPU và làm giảm tốc độ. Các hệ thống hiện đại cần cách tiếp cận ngang hàng (Mesh). Việc mã hóa nên diễn ra trực tiếp trong kernel của Linux để đạt tốc độ tối ưu.

Đánh giá các lựa chọn VPN

Tôi đã thử nghiệm ba hệ thống khác nhau trước khi quyết định chọn một giải pháp:

  • Tailscale: Có giao diện người dùng tuyệt vời, nhưng nó sử dụng một máy chủ điều phối đóng. Với mức giá 20 USD mỗi người dùng cho một số gói nhất định, chi phí cho một cụm 100 node sẽ tăng lên rất nhanh.
  • WireGuard thủ công: Cực kỳ nhanh và nhẹ. Tuy nhiên, việc quản lý WireGuard thủ công cho hơn 50 node một cách thủ công là công thức dẫn đến sự cố lúc 3 giờ sáng. Chỉ cần một lỗi đánh máy trong tệp cấu hình cũng có thể làm sập toàn bộ mạng của bạn.
  • Netmaker: Đây chính là control plane mà WireGuard còn thiếu. Bạn nhận được tốc độ thực tế của WireGuard — thường đạt hơn 800 Mbps trên đường truyền gigabit — cùng với một dashboard trung tâm để quản lý mọi thứ. Nó tự động hóa việc trao đổi peer để bạn không phải làm thủ công.

Netmaker độc đáo ở chỗ bạn giữ quyền sở hữu 100% dữ liệu của mình. Bạn không phải phụ thuộc vào hạ tầng của bên thứ ba để điều hướng metadata của mình.

Cài đặt Netmaker: Cách tiếp cận chuyên nghiệp

Bạn sẽ cần một máy chủ Linux (Ubuntu 22.04 là tốt nhất) có IP công cộng để cài đặt bộ điều khiển (controller) Netmaker. Lưu ý rằng máy chủ này không truyền tải lưu lượng dữ liệu thực tế giữa các node. Nó chỉ đóng vai trò là “bộ não” để điều phối các kết nối.

1. Triển khai Controller

Cách nhanh nhất để bắt đầu là sử dụng script cài đặt chính thức. Nó sẽ tự động thiết lập Docker, Nginx và API cho bạn. Hãy đảm bảo bạn đã mở các cổng 80, 443 và dải UDP 51821-51830 trên firewall của đám mây.

# Chạy trình cài đặt nhanh
wget -qO - https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/nm-quick.sh | bash

Sau khi script hoàn tất, hãy truy cập vào dashboard và tạo một mạng có tên “prod-mesh”. Sử dụng dải IP không trùng lặp như 10.50.0.0/16 để tránh xung đột định tuyến với các VPC hiện có của bạn.

2. Kết nối các Node bằng Netclient

Tiếp theo, chúng ta cần đưa các node worker vào hệ thống. Cài đặt agent netclient trên bất kỳ máy chủ Linux nào bạn muốn tham gia vào mesh. Agent này sẽ xử lý các tác vụ phức tạp trong việc cấu hình giao diện WireGuard cục bộ.

# Cài đặt agent
curl -sL https://rpm.netmaker.org/install.sh | sudo bash

# Tham gia vào mạng
sudo netclient join -t <MÃ_TRUY_CẬP_CỦA_BẠN>

Sau khi tham gia, node sẽ xuất hiện trên giao diện người dùng ngay lập tức. Nó tự tạo các khóa riêng, chia sẻ khóa công khai với controller và tự động học cách kết nối tới mọi node khác trong mạng.

Tối ưu hiệu năng cho môi trường Production

Đừng chỉ cài đặt rồi để đó. Một vài tinh chỉnh nhỏ có thể tạo ra sự khác biệt lớn về độ ổn định, đặc biệt nếu bạn đang chạy các tác vụ sao chép cơ sở dữ liệu nặng.

Điều chỉnh MTU

WireGuard thêm một header nhỏ vào mỗi gói tin. Nếu nhà cung cấp đám mây của bạn sử dụng MTU tiêu chuẩn là 1500 và WireGuard cố gắng gửi gói tin 1500 byte đầy đủ, mạng sẽ chia nhỏ (fragment) gói tin đó. Điều này làm giảm hiệu năng nghiêm trọng. Tôi khuyên bạn nên đặt MTU thành 1420 trong cài đặt Netmaker. Đây là con số tối ưu cho hầu hết các môi trường đám mây.

Bật IP Forwarding

Nếu bạn muốn một node cụ thể đóng vai trò là gateway truy cập internet hoặc mạng LAN văn phòng, bạn phải cho phép Linux chuyển tiếp lưu lượng. Chạy các lệnh sau:

echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Giải quyết các vấn đề về NAT

Đôi khi các node bị kẹt sau các tường lửa doanh nghiệp khắt khe ngăn chặn kết nối P2P. Tính năng “Relay” của Netmaker sẽ giải quyết vấn đề này. Hãy chỉ định một node có IP công cộng làm relay. Các node khác sẽ chỉ sử dụng nó như một phương án dự phòng, đảm bảo bạn không bao giờ mất kết nối mà không làm ảnh hưởng đến tốc độ của phần còn lại trong mạng mesh.

Lời kết

Việc chuyển từ VPN trung tâm sang mesh tự quản lý với Netmaker đã thay đổi cách tôi nhìn nhận về mạng multi-cloud. Nó loại bỏ những hạn chế về độ trễ của mô hình hub-and-spoke cũ. Bạn có được sự kiểm soát chi tiết mà các đội ngũ bảo mật yêu cầu mà không phải trả chi phí cho dịch vụ SaaS. Bằng cách kết hợp tốc độ của WireGuard với khả năng tự động hóa của Netmaker, hệ thống đám mây toàn cầu của bạn sẽ mang lại cảm giác như một mạng nội bộ văn phòng duy nhất. Đừng quên kiểm tra băng thông của bạn bằng iperf3 sau khi thiết lập — kết quả thường sẽ tự chứng minh tất cả.

Share: