Pi là máy khách VPN: một trình quản lý hay một script tự viết?
So sánh hồ sơ NetworkManager với một script máy khách viết tay trên Raspberry Pi, gồm đường hầm đầy đủ, DNS, IPv6 và hành vi khi đường hầm rớt.
Một Raspberry Pi chỉ cần bảo vệ lưu lượng đi ra của chính nó có hai thiết kế thực tế: để trình quản lý mạng sở hữu đường hầm, hoặc giữ một script sở hữu nó. Cả hai đều chở được lưu lượng. Chúng hỏng ở những chỗ khác nhau, và sự cố bạn có thể chẩn đoán từ xa lúc hai giờ sáng là cái đáng chọn. Hãy so chúng ở quyền sở hữu, ở ý nghĩa của đường hầm đầy đủ khi có IPv6 và DNS, và ở điều xảy ra ngay lúc đường hầm rớt.
Hai chủ sở hữu cho một đường hầm
Thiết kế A là một hồ sơ trong trình quản lý mạng của hệ thống: hồ sơ OpenVPN đã nhập hoặc một kết nối WireGuard gốc, được kích hoạt lúc khởi động bởi chính dịch vụ nâng Ethernet và Wi-Fi. Thiết kế B là một đơn vị của bạn, chạy máy khách trực tiếp, sửa cấu hình bộ phân giải và cài tuyến đường cùng quy tắc tường lửa của riêng nó. Cả hai đều chính đáng; chúng khác nhau ở việc ai được phép sửa bảng định tuyến.
Các sự cố khác nhau vì chủ sở hữu khác nhau. Với A, một hồ sơ không kích hoạt để giao diện ở trên và đường hầm ở dưới, và nhật ký của trình quản lý nói vì sao. Với B, một script thành công một nửa để lại những tuyến đường sống sót sau tiến trình đã tạo ra chúng. Chạy cả hai là kết quả tệ nhất: hai tiến trình ghi tuyến mặc định, hai lần sửa bộ phân giải tranh nhau lúc khởi động và hai bộ bí mật phải xoay vòng.
Chọn một chủ sở hữu cho mỗi đường hầm và tắt cái kia trước khi thử bất cứ điều gì. Hai chủ sở hữu cũng nghĩa là hai chỗ để nhìn khi đường hầm đã lên mà không gì phân giải được. Một quy tắc đó ngăn phần lớn các trạng thái rối rắm được mô tả trong các luồng về Pi VPN.
Nhập vào tạo ra gì, và không tạo ra gì
Trên Raspberry Pi OS Bookworm và mới hơn, công cụ cấu hình mạng mặc định là NetworkManager, nên hồ sơ là nhà tự nhiên của đường hầm máy khách. Việc nhập cần plugin tương ứng được cài; không có nó, việc nhập thất bại với thông báo về kiểu kết nối không được hỗ trợ, đó là tín hiệu trung thực để dừng lại và cài plugin.
nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name
Nhập vào lưu một hồ sơ. Nó không chứng minh phía bên kia tiếp cận được, và không bảo đảm mọi chỉ thị trong tệp sống sót qua bước chuyển đổi. Hãy đọc lại kết nối tạo ra và kiểm tra những phần mang danh tính và tin cậy: chứng chỉ, máy chủ và cổng từ xa, và việc hỏi hay lưu mật khẩu.
Kích hoạt bằng --ask giữ cụm mật khẩu ngoài lịch sử shell trên máy dùng chung. Với một Pi không giám sát, cuối cùng bạn sẽ muốn hồ sơ tự lên lúc khởi động, đó là một quyết định riêng so với việc nâng nó một lần bằng tay.
Đường hầm đầy đủ, so sánh trên cả hai thiết kế
Đường hầm đầy đủ là một khẳng định về tuyến đường, không phải về ý định, và hai thiết kế diễn đạt nó khác nhau. Cách tiếp cận bằng hồ sơ yêu cầu trình quản lý cài một tuyến mặc định và các thiết lập bộ phân giải của nó; cách tiếp cận bằng script làm theo điều script nói, kể cả không làm gì. Không thiết kế nào bao phủ IPv6 trừ khi được bảo, và một tuyến mặc định IPv6 không bị đụng tới sẽ vui vẻ chở lưu lượng ra ngoài đường hầm trong khi IPv4 trông hoàn hảo.
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
Dùng một địa chỉ tài liệu cho việc tra tuyến và thay bằng một máy chủ bạn được phép dò. Lệnh đầu cho biết Pi sẽ dùng giao diện nào cho một đích thông thường; lệnh thứ hai cho biết còn tuyến mặc định IPv6 hay không; lệnh thứ ba chứng minh bộ phân giải nào đã trả lời. Hãy đọc cả ba trước khi tin bất kỳ khẳng định nào về đường hầm đầy đủ.
Nếu hướng dẫn của nhà cung cấp hứa một đường hầm đầy đủ nhưng tuyến mặc định IPv6 vẫn còn, thì Pi đang rò. Hãy tắt IPv6 trên liên kết lên hoặc yêu cầu hồ sơ đòi lấy nó, và quyết định một cách có chủ ý thay vì phát hiện ra sau này.
Hỏng mở đối lại hỏng đóng
Khi đường hầm rớt, một bảng định tuyến mất tuyến mặc định chỉ đơn giản quay về liên kết vật lý, và lưu lượng tiếp tục một cách công khai. Đó là hỏng mở, và đó là hành vi mặc định của cả hai thiết kế trừ khi có gì đó ngăn lại. Phần lớn mọi người phát hiện điều này sau nhiều tuần khi đọc nhật ký tường lửa.
Hỏng đóng lấy đi quyền truy cập từ xa của bạn khi đường hầm xuống, nên nó cần một ngoại lệ có chủ ý cho đường quản trị. Một cách là một quy tắc chỉ cho phép địa chỉ của đối tác VPN ở ngoài đường hầm:
sudo nft add table inet vpnkill
sudo nft 'add chain inet vpnkill out { type filter hook output priority 0; policy accept; }'
sudo nft add rule inet vpnkill out oifname != "tun0" ip daddr != 203.0.113.24 reject
So sánh chi phí vận hành một cách trung thực. Một hồ sơ thường không diễn đạt được quy tắc này, nên hỏng đóng đẩy bạn về phía thiết kế bằng script hoặc về phía một đơn vị nhỏ cài quy tắc độc lập với đường hầm. Dù thế nào, hãy ghi lại các lần từ chối trong một tuần: một từ chối im lặng trông giống hệt một dịch vụ hỏng, và bạn sẽ cần bộ đếm khi người dùng báo rằng một trang ngừng tải.
Chọn cho một Pi không màn hình
Nếu ảnh đã chạy NetworkManager, đường hầm không cần gì lạ, và bạn muốn nó tự theo liên kết lên, hãy lấy hồ sơ. Nếu bạn cần định tuyến theo chính sách, nhiều đường hầm được chọn theo đích, hoặc một quy tắc hỏng đóng phải tồn tại trước khi đường hầm lên, hãy lấy script và sở hữu từng phần của nó, kể cả thứ tự khởi động và dọn dẹp. Trộn hai thiết kế tốn hơn bất kỳ cái nào riêng lẻ.
Chuyển đổi giữa hai cách chủ yếu là vấn đề thứ tự: tắt chủ sở hữu cũ, xác nhận không còn tuyến hay mục bộ phân giải cũ, rồi bật cái mới và khởi động lại hai lần. Một lần khởi động lại có thể che một cuộc đua mà lần thứ hai phơi ra. Kết thúc bằng việc kiểm tra Pi chứ không phải đường hầm: phân giải một tên, lấy gì đó qua IPv4, lấy qua IPv6 nếu bạn giữ nó, rồi thả đường hầm xuống và xác nhận hành vi bạn chọn thực sự xảy ra. Một giao diện trong ip link là khởi đầu của phép thử, không phải kết thúc.