Các cải tiến WireGuard của Fly.io
- Fly.io chuyển container thành VM và chạy chúng trên phần cứng toàn cầu bằng sức mạnh của Firecracker.
- Fly.io sử dụng WireGuard rất nhiều, và giờ đây nó đã trở thành một phần trong API khách hàng.
- Mỗi khi chạy CLI
flyctl, hệ thống tạo một ngăn xếp TCP/IP và giao tiếp trực tiếp với Fly Machines bằng một địa chỉ IPv6 duy nhất.
- Cách tiếp cận này có những ưu và nhược điểm riêng, và đã có một số cải tiến.
Tình hình trước đây
- Các máy chủ "gateway" trên khắp thế giới tiếp nhận kết nối WireGuard và đảm nhiệm việc nối chúng vào mạng riêng phù hợp.
- Mỗi lần chạy
flyctl, hệ thống sẽ tạo hoặc kết nối tới một tiến trình agent chạy nền.
- Agent tạo một cấu hình peer WireGuard mới từ GraphQL API.
- API gửi cấu hình peer tới gateway thích hợp thông qua hệ thống nhắn tin NATS.
- Trên gateway, dịch vụ
wggwd nhận cấu hình, lưu vào cơ sở dữ liệu SQLite và thêm vào kernel.
- API phản hồi yêu cầu GraphQL để chuyển cấu hình, và
flyctl kết nối tới peer WireGuard.
- NATS nhanh nhưng không đảm bảo việc phân phối, và cũng không dọn dẹp các peer cũ còn sót lại trên gateway.
Một cách tốt hơn
- Việc lưu trữ các peer WireGuard không cần tới một cơ sở dữ liệu phức tạp.
- Hệ thống được thay đổi để gateway tự lấy cấu hình từ API mỗi khi cần.
- Chỉ thêm peer vào kernel khi client muốn kết nối, và có thể gỡ ra khi không còn cần nữa.
Có thể triển khai peer WireGuard JIT
- Giao diện cấu hình WireGuard trong kernel Linux sử dụng Netlink.
- Có thể nhận diện và chặn các gói yêu cầu kết nối WireGuard bằng bộ lọc BPF và packet socket.
- WireGuard không có khái niệm "client" và "server", mà là một giao thức point-to-point.
- Khi
flyctl gửi một gói UDP tới gateway, đó là handshake initiation.
- Có thể dùng bộ lọc BPF để bắt các kết nối đi vào.
- Vì dựa trên framework giao thức Noise, cần giải mã để nhận diện yêu cầu.
- Có thể tạo một luồng sự kiện để lấy khóa công khai của mọi người dùng đang cố kết nối tới gateway.
- Mỗi khi thấy một peer mới, hệ thống sẽ lấy thông tin peer đó qua một yêu cầu HTTP API nội bộ và cài đặt nó.
Khởi chạy ứng dụng theo phút
- Trên Fly.io, có thể triển khai ứng dụng nhanh chóng và nhận peer JIT WireGuard riêng của mình.
Xem biểu đồ
- Sau vài tuần vận hành hệ thống này, số lượng peer WireGuard cũ còn sót lại trên gateway đã giảm đáng kể.
- Gateway duy trì ít trạng thái hơn và việc cấu hình peer diễn ra nhanh hơn.
- Chia sẻ kết quả thành công trong ngày chuyển đổi thông qua biểu đồ Grafana.
Ý kiến của GN⁺
- Cải tiến WireGuard của Fly.io là một ví dụ tốt về việc cải thiện đáng kể hiệu năng và độ ổn định mạng.
- Cách tiếp cận này có thể đặc biệt hữu ích trong việc tăng cường quản lý lưu lượng mạng và bảo mật cho các dịch vụ dựa trên đám mây.
- Những dự án khác cung cấp tính năng tương tự có thể kể đến Tailscale hoặc ZeroTier, cũng mang lại các lựa chọn thay thế VPN cho người dùng cá nhân và doanh nghiệp.
- Khi áp dụng WireGuard, cần cân nhắc cấu hình mạng, chính sách bảo mật và khả năng tương thích.
- Lợi ích của việc chọn công nghệ này là hiệu năng nhanh và cấu hình đơn giản, nhưng cũng có thể gặp thách thức trong tích hợp với hạ tầng hiện có hoặc ở khía cạnh quản trị.
1 bình luận
Ý kiến trên Hacker News