Nhập trong NetworkManager thất bại với tệp OpenVPN và WireGuard
Thường thì bộ phân tích, không phải hồ sơ, là thứ hỏng. Kiểm tra plugin, đọc kết nối đã nhập, sửa cờ secret và tuyến, rồi thử khởi động lại.
Tôi đã chọn Nhập từ tệp… trong Cài đặt GNOME, chọn một hồ sơ hoạt động với ứng dụng khách của nhà cung cấp, và hộp thoại đóng lại mà không thêm gì vào danh sách. Trên một máy tính xách tay thứ hai, quá trình nhập hoàn tất, kết nối xuất hiện dưới tên hồ sơ, rồi nó thất bại ở lần yêu cầu xác thực đầu tiên. NetworkManager không bao giờ chạy tệp .ovpn hay wg-quick của bạn nguyên trạng. Nó chuyển tệp cho một bộ phân tích, bộ phân tích chuyển tệp sang định dạng kết nối riêng của NetworkManager, và từ đó đường hầm được dựng từ đối tượng đã phân tích đó — bí mật, tuyến, DNS và mọi thứ. Vậy câu hỏi hữu ích không phải là tại sao tệp hỏng, mà là việc phân tích có xảy ra không và nó giữ lại những gì.
Việc nhập thực sự làm gì với tệp
Đối với OpenVPN, bộ phân tích nằm trong gói plugin, và kết nối nó tạo trỏ tới một dịch vụ D-Bus như org.freedesktop.NetworkManager.openvpn. Không có plugin thì không có bộ phân tích: kiểu này không được nmcli biết đến, và danh sách thêm VPN bằng đồ họa có thể không hiển thị mục nhập nào cả. WireGuard khác ở một điểm quan trọng — NetworkManager có cài đặt WireGuard riêng từ dòng 1.30, nên không có gói plugin riêng, nhưng trình đọc wg-quick chỉ tồn tại trong các bản dựng có kèm nó.
Dù sao thì tệp chỉ được đọc một lần. Kết quả được ghi thành keyfile dưới /etc/NetworkManager/system-connections/, đặt tên theo kết nối, thuộc sở hữu của root và không đọc được với người dùng khác vì nó chứa vật liệu khóa. Keyfile đó giờ chính là kết nối; sửa tệp .ovpn gốc sau đó không thay đổi gì.
Ba triệu chứng thuộc ba giai đoạn khác nhau. Không có mục nhập hoặc kiểu không xác định nghĩa là thiếu plugin hoặc phiên bản. Lỗi nhập nêu tên một chỉ thị nghĩa là bộ phân tích đã đọc tệp và từ chối một phần của nó. Một kết nối tồn tại nhưng không bao giờ kích hoạt nghĩa là đối tượng đã phân tích chưa đầy đủ hoặc máy chủ đang từ chối nó. Hãy xác định bạn thuộc trường hợp nào trong ba trường hợp trước khi sửa bất cứ thứ gì.
Xác nhận plugin trước khi gỡ lỗi hồ sơ
Một plugin thiếu trông giống hệt một hồ sơ hỏng, nên hãy kiểm tra gói trước. Trên Debian và Ubuntu, hỗ trợ OpenVPN đi kèm dưới dạng network-manager-openvpn cộng một trình trợ giúp màn hình; trên Fedora các gói là NetworkManager-openvpn và NetworkManager-openvpn-gnome; trên Arch là networkmanager-openvpn.
dpkg -l network-manager-openvpn-gnome | tail -n 2 rpm -q NetworkManager-openvpn pacman -Q networkmanager-openvpn
Sau đó nhập từ một đường dẫn tuyệt đối: nmcli connection import type openvpn file /home/you/profile.ovpn. Đường dẫn tương đối thường hoạt động, nhưng một shell đã đổi thư mục biến một lần nhập nhanh thành đường vòng. Với WireGuard, hãy kiểm tra nmcli --version và chắc chắn phía hạt nhân tồn tại bằng modprobe wireguard; một lần nhập thành công trên máy không có mô-đun để lại cho bạn một kết nối mà thiết bị không bao giờ xuất hiện. tài liệu tham chiếu nmcli ghi lại lệnh con import và các tên kiểu được chấp nhận. Nếu type wireguard bị từ chối thẳng, bản dựng cũ hơn tính năng này, và bước đúng là một gói phân phối hoặc bản backport — không phải chép cấu hình vào một thư mục tùy ý với hy vọng có thứ gì đó đọc nó.
Đọc kết nối OpenVPN, không phải tệp .ovpn
Khi kết nối đã tồn tại, hãy đọc các cài đặt đã phân tích thay vì đọc lại tệp: nmcli connection show "Work VPN" | grep -E '^vpn\.'. Bạn cần remote và cổng, giao thức vận chuyển, vật liệu danh tính — ca, cert, key, tls-auth hay tls-crypt — và phương thức xác thực. Với hồ sơ có mật khẩu khóa riêng, thêm sudo nmcli --show-secrets connection show "Work VPN" và xem các cờ secret: 0 là none, nên bí mật nằm trong keyfile; 1 là agent-owned; 2 là not-saved, nghĩa là nó không bao giờ được ghi vào keyfile; 4 là not-required, nghĩa là không cần bí mật nào cả. Chúng là các bit, không phải thang đo, nên 3 đơn giản là agent-owned cộng not-saved. Một bí mật hỏi bạn một lần mỗi phiên là agent-owned (1), với tác nhân yêu cầu nó; không có số cờ riêng cho việc đó. Lệch cờ là lý do thường gặp khiến hồ sơ kết nối từ applet màn hình nhưng thất bại từ script hoặc khi khởi động.
Cách nhanh nhất để thấy bộ phân tích đã bỏ gì là yêu cầu plugin ghi lại tệp rồi so sánh: nmcli connection export "Work VPN" /tmp/roundtrip.ovpn. Những chỉ thị biến mất trong lần so sánh đó sẽ không tồn tại lúc kết nối. Hook là những nghi phạm thường gặp — script-security, up, down và route-up mong một script chạy với quyền cao và cố ý không được mang sang. Đừng hạ mức xác minh hay cấp thêm quyền để một lần nhập thành công; một tùy chọn không được hỗ trợ thường phản ánh bộ tính năng của plugin chứ không phải máy chủ không tới được. Hãy chuyển hành vi đó sang một script dispatcher của NetworkManager hoặc sang chính sách phía máy chủ.
Cũng xác nhận rằng các trường danh tính còn sống: tham chiếu CA, remote-cert-tls và mọi kiểm tra tên mà hồ sơ dựa vào. Một kết nối lên mà không có chúng có thể đang nói chuyện với bất cứ thứ gì trả lời ở địa chỉ đó.
Đọc kết nối WireGuard, không phải tệp wg-quick
Tệp wg-quick là một định dạng với ngữ nghĩa shell; kết nối đã nhập là một tập cài đặt. PrivateKey trở thành khóa riêng của giao diện, Address trở thành một hoặc nhiều địa chỉ IPv4 và IPv6, DNS ánh xạ vào thuộc tính resolver của NetworkManager, MTU ánh xạ vào wireguard.mtu (giá trị mặc định của chính wg-quick là 1420), và mỗi khối peer trở thành một mục peer với khóa công khai, endpoint, IP được phép và persistent keepalive. In ra những gì đã lưu bằng nmcli --show-secrets connection show wg0; nếu danh sách peer không xuất hiện trong đầu ra đó, hãy đọc keyfile:
sudo sed -n '/^\[wireguard\]/,/^\[/p' /etc/NetworkManager/system-connections/wg0.nmconnection
Thứ không sống sót là nửa shell của wg-quick. PreUp, PostUp, PreDown, PostDown và Table là hành vi của công cụ đó, không phải thuộc tính của giao diện WireGuard, nên không có gì chạy chúng sau khi nhập. Nếu bản gốc dùng Table = off để mặc kệ tuyến mặc định, các bản NetworkManager gần đây cung cấp ip4-auto-default-route và ip6-auto-default-route cho cùng mục đích; hãy đặt chúng một cách rõ ràng thay vì cho rằng kết nối hành xử như script. Một hook đẩy tuyến tùy chỉnh cần tuyến đó trong cài đặt định tuyến của kết nối, nếu không nó sẽ đơn giản là thiếu.
Cho kết nối đúng một chủ sở hữu
Lỗi tiếp theo kinh điển là một kết nối chạy được đến lần khởi động sau rồi rơi vào vòng lặp. Thường thì [email protected] vẫn còn được bật từ một thử nghiệm trước, hoặc một ứng dụng của nhà cung cấp đang chạy daemon riêng, và hai chủ sở hữu đang ghi tuyến và DNS cho cùng một đích. NetworkManager đặt resolver theo đường riêng, wg-quick ghi qua resolvconf, và người ghi cuối thắng — nên phân giải tên chạy, rồi dừng, rồi chạy lại. Kiểm tra systemctl status wg-quick@wg0, nmcli connection show --active và ip link show type wireguard, rồi tắt chủ sở hữu thứ hai thay vì chỉnh metric của nó.
Nếu bạn thực sự cần cả hai, hãy cho chúng giao diện riêng và IP được phép rời nhau, và để đúng một trong hai cài tuyến mặc định. Hai tuyến mặc định với metric khác nhau không phải split tunnel; đó là một cuộc đua do dịch vụ khởi động thứ hai quyết định. Và sau khi kết nối lại, hãy xem lại trạng thái đã áp dụng — một lần sửa resolver thủ công làm mọi thứ chạy không phải bằng chứng rằng việc nhập đã đầy đủ.
Xác minh bằng lưu lượng và sống sót qua lần khởi động lại
Đưa kết nối lên bằng nmcli connection up "Work VPN", rồi đọc trạng thái, địa chỉ và tuyến thay vì tin vào biểu tượng: nmcli device show wg0 | grep -E 'GENERAL.STATE|IP4.ADDRESS|IP4.ROUTE', ip route show default và một truy vấn thật cho một tên chỉ phân giải được bên trong đường hầm. Một handshake hay ping thành công chỉ chứng minh mật mã hoạt động; nó không nói gì về chuyển tiếp, tiền tố split tunnel hay DNS riêng, và đó là những phần thường hỏng.
Sau đó khởi động lại và lặp lại. Hành vi autoconnect, một giao diện bị đổi tên và một plugin nạp sau thiết bị đều là những lỗi bạn chỉ thấy khi khởi động sạch. journalctl -u NetworkManager -b --no-pager | tail -n 40 cho thấy daemon đã làm gì với kết nối này trong lần khởi động này. Với máy thứ hai, chép keyfile và giữ nó thuộc sở hữu root với mode 600, hoặc dùng nmcli connection export cho OpenVPN và nhập lại tệp .ovpn tạo ra — đường xuất không có tương đương WireGuard, nên hướng đó là chép tệp hoặc nhập mới từ bản gốc được bảo vệ.
Bản ngắn, theo thứ tự: xác nhận plugin hoặc phiên bản NetworkManager, nhập từ đường dẫn tuyệt đối, đọc cài đặt đã phân tích gồm cả cờ secret, so sánh bản xuất OpenVPN với bản gốc, kiểm tra hook và tuyến phía WireGuard, tắt mọi chủ sở hữu thứ hai, rồi sau khi khởi động lại xác minh phân giải tên và bảng tuyến. Khi một kết nối qua được tất cả những điều đó, tệp hồ sơ đã khởi tạo nó có thể trở về kho lưu trữ được bảo vệ.