WireGuard trong LXC hay VM trên Proxmox: nên chạy ở đâu?
WireGuard có thể chạy trên máy chủ Proxmox, trong container hoặc trong VM. Yếu tố quyết định là quyền sở hữu kernel, kiểm soát giao diện và khả năng khôi phục.
WireGuard cần đúng một kernel sở hữu giao diện của nó, và sự thật đó giải quyết phần lớn cuộc tranh luận về vị trí trên Proxmox trước khi hiệu năng kịp bước vào cuộc trò chuyện. Container LXC là một góc nhìn không gian tên của kernel máy chủ, còn VM khởi động kernel riêng của nó. Vậy câu hỏi hữu ích không phải là lựa chọn nào nhẹ hơn, mà là bạn sẵn sàng sửa kernel nào và có thể sống với con đường khôi phục nào. Trả lời điều đó, và lựa chọn giữa máy chủ, container hay VM thường tự hình thành.
Một khách LXC làm việc bên trong kernel của máy chủ
Cài wireguard-tools trong container cho bạn chương trình điều khiển, không phải kernel riêng. Giao diện wg0 bạn tạo được đăng ký trong ngăn xếp mạng của máy chủ và xuất hiện trong danh sách mô-đun của máy chủ. Đó là lý do một container có thể vượt qua mọi kiểm tra gói mà vẫn thất bại ở lệnh wg đầu tiên khi kernel máy chủ thiếu mô-đun. Và tài liệu tham chiếu container của Proxmox ghi lại mô hình kernel chia sẻ đó cùng với ranh giới không gian tên và đặc quyền mà bạn đang làm việc bên trong.
Thẩm quyền là ràng buộc thứ hai. Đưa một giao diện lên và gắn địa chỉ vào nó cần quyền quản trị mạng bên trong không gian tên sở hữu nó, và một container không đặc quyền ánh xạ các quyền đó qua không gian tên người dùng của nó thay vì giữ trực tiếp. Đừng bao giờ với tới đặc quyền đầy đủ như câu trả lời đầu tiên; hãy xem container thực sự được yêu cầu làm gì, rồi cấp đúng điều đó.
Kernel máy chủ cũng là một phụ thuộc chia sẻ. Một bản cập nhật kernel Proxmox thay đổi cách triển khai WireGuard bên dưới mọi container cùng lúc, điều này tiện cho đến khi một bản cập nhật và kỳ vọng của một container không còn khớp nhau.
Máy chủ, container, VM: mỗi vị trí thực sự sở hữu điều gì
Đặt trên máy chủ đưa VPN vào chính mạng của hypervisor. Các tuyến, quy tắc tường lửa và đường hầm trở thành một phần của việc khôi phục máy chủ, và một sai sót ở đó có thể mang theo giao diện quản trị. Điều đó chấp nhận được với định tuyến hạ tầng trên một máy chủ bạn tiếp cận qua bảng điều khiển, và đau đớn trên một máy từ xa không có truy cập ngoài băng.
Container giữ dịch vụ được đóng gói và có thể khởi động lại trong khi vẫn mượn kernel máy chủ. Nó phù hợp với một dịch vụ cố ý dùng kernel chung và cho bạn một đơn vị nhỏ để dựng lại. Nó không cho bạn kernel độc lập, nên bất cứ thứ gì cần bản dựng mô-đun cụ thể đều chỉ ra xa lựa chọn này.
| Placement | Kernel owner | Typical failure mode |
|---|---|---|
| Proxmox host | Hypervisor | A routing change breaks host management access |
| LXC container | Host kernel, container namespace | Missing capability or missing module at wg0 creation |
| Virtual machine | Guest kernel | Extra maintenance and a second patch cycle |
Một VM tốn thêm bộ nhớ và thêm một hệ thống phải vá, đổi lại đường hầm có kernel riêng, bảng định tuyến riêng và một ranh giới ảnh chụp nhanh. Khi VPN là thứ bạn quay lui sau một thay đổi tồi, ảnh chụp nhanh đó đáng với chi phí.
Ba điều kiện tự chọn thay bạn
Nếu đường hầm cần một phiên bản kernel hoặc một tính năng WireGuard mà máy chủ Proxmox không cung cấp, hãy dừng ở đây và dùng VM. Bạn không thể cài kernel mới hơn vào container, và không nên thay kernel của hypervisor để làm hài lòng một khách.
Nếu đường hầm là cổng của trang cho các tiền tố LAN thật, hãy hỏi ai đã sở hữu tuyến quay về. Container có thể định tuyến lưu lượng, nhưng các giao diện của nó nằm trong ngăn xếp của máy chủ, nên cuối cùng máy chủ phải mang một phần cấu hình, dù bạn có lên kế hoạch hay không. Đặt trên máy chủ trung thực về điều này; đặt trong container thường không.
Sau đó cân nhắc bán kính ảnh hưởng của một sai sót. Khởi động lại container thì rẻ, khôi phục ảnh chụp nhanh VM thì dự đoán được, và sửa mạng của máy chủ có thể cần truy cập vật lý hoặc bảng điều khiển. Lựa chọn đúng là lựa chọn mà bạn thực sự có thể khôi phục trường hợp xấu nhất vào đúng giờ nó xảy ra.
Câu hỏi thứ tư hiếm khi quyết định nhưng đáng nêu: có thứ gì khác trên máy chủ cần thấy giao diện đường hầm không? Nếu có, đặt trên máy chủ hoặc trong container giữ khả năng hiển thị đó ở cục bộ, trong khi VM buộc bạn định tuyến giữa khách và máy chủ.
Chứng minh vị trí trước khi định tuyến lưu lượng qua nó
Sau khi cài đặt, xác nhận kernel nào thực sự phục vụ giao diện và liệu container có được cấp đủ thẩm quyền để giữ nó:
$ pct config 101 | grep -E 'unprivileged|features'
unprivileged: 1
$ pct exec 101 -- wg show
interface: wg0
listening port: 51820
$ pct exec 101 -- ip -4 addr show wg0
inet 10.60.0.2/24 scope global wg0
Sau đó kiểm tra phía chuyển tiếp từ máy chủ, vì chỉ một cái bắt tay chứng minh đường hầm đã lên. Dùng ip route get cho địa chỉ khách và xác nhận bước nhảy tiếp theo cùng giao diện khớp với thiết kế, và đường quay về tồn tại ở phía xa.
Để lại việc triển khai với một chủ sở hữu bằng văn bản: kernel nào mang việc triển khai, không gian tên nào giữ giao diện và những tiền tố nào cổng được phép chuyển tiếp. Câu đó ngăn được nhiều sự cố hơn bất kỳ so sánh điểm chuẩn nào của ba vị trí.