Pinili ko ang I-import mula sa file… sa Mga Setting ng GNOME, pumili ng profile na gumagana sa client ng vendor, at nagsara ang dialog nang walang idinagdag sa listahan. Sa ikalawang laptop natapos ang import, lumitaw ang koneksyon sa pangalan ng profile, at pagkatapos ay nabigo ito sa unang hiling ng authentication. Hindi kailanman pinapatakbo ng NetworkManager ang iyong .ovpn o wg-quick file nang ganito lang. Ipinapasa nito ang file sa isang parser, ginagawa ng parser ito sa sariling format ng koneksyon ng NetworkManager, at mula noon ang tunnel ay itinatayo mula sa na-parse na object — mga secret, ruta, DNS at lahat. Kaya ang kapaki-pakinabang na tanong ay hindi kung bakit sira ang file, kundi kung nangyari ang pag-parse at ano ang itinago nito.

Ano talaga ang ginagawa ng import sa file

Para sa OpenVPN, nasa plugin package ang parser, at ang koneksyong ginagawa nito ay tumuturo sa isang D-Bus service gaya ng org.freedesktop.NetworkManager.openvpn. Walang plugin, walang parser: hindi kilala ng nmcli ang uri, at maaaring walang ipakitang import entry ang graphical na listahan ng pagdaragdag ng VPN. Naiiba ang WireGuard sa isang mahalagang punto — may sariling mga setting ng WireGuard ang NetworkManager mula noong seryeng 1.30, kaya walang hiwalay na plugin package, ngunit ang wg-quick reader ay umiiral lamang sa mga build na nagdadala nito.

Sa alinmang paraan, isang beses lang binabasa ang file. Isinusulat ang resulta bilang keyfile sa ilalim ng /etc/NetworkManager/system-connections/, pinangalanan sa koneksyon, pagmamay-ari ng root at hindi mabasa ng ibang user dahil may laman itong key material. Ang keyfile na iyon ang koneksyon ngayon; ang pag-edit sa orihinal na .ovpn pagkatapos ay walang binabago.

Tatlong sintomas ang nabibilang sa tatlong magkaibang yugto. Walang import entry o hindi kilalang uri ay nangangahulugang kulang ang plugin o bersyon. Ang error sa import na nagpapangalan ng isang direktiba ay nangangahulugang binasa ng parser ang file at tinanggihan ang bahagi nito. Ang koneksyong umiiral pero hindi kailanman nag-a-activate ay nangangahulugang hindi kumpleto ang na-parse na object o tinatanggihan ito ng server. Magpasya kung alin sa tatlo ang mayroon ka bago mag-edit ng kahit ano.

Kumpirmahin ang plugin bago i-debug ang profile

Ang kulang na plugin ay mukhang eksaktong sirang profile, kaya suriin muna ang package. Sa Debian at Ubuntu, ang suporta sa OpenVPN ay dumarating bilang network-manager-openvpn at isang desktop helper; sa Fedora ang mga package ay NetworkManager-openvpn at NetworkManager-openvpn-gnome; sa Arch ito ay networkmanager-openvpn.

dpkg -l network-manager-openvpn-gnome | tail -n 2
rpm -q NetworkManager-openvpn
pacman -Q networkmanager-openvpn

Pagkatapos ay i-import mula sa absolute path: nmcli connection import type openvpn file /home/you/profile.ovpn. Karaniwang gumagana ang relative path, ngunit ang shell na nagpalit ng directory ay ginagawang liku-liko ang mabilis na import. Para sa WireGuard, suriin ang nmcli --version at tiyakin na umiiral ang panig ng kernel gamit ang modprobe wireguard; ang import na nagtagumpay sa makina na walang module ay nag-iiwan sa iyo ng koneksyong hindi kailanman lumilitaw ang device. nmcli reference ay nagdodokumento ng import subcommand at ng mga tinatanggap na pangalan ng uri. Kung tahasang tinatanggihan ang type wireguard, mas luma ang build kaysa sa feature na ito, at ang tamang hakbang ay isang distribution package o backport — hindi ang pagkopya ng configuration sa isang arbitrary na directory at umaasa na may magbabasa nito.

Basahin ang koneksyon ng OpenVPN, hindi ang .ovpn

Kapag umiiral na ang koneksyon, basahin ang na-parse na mga setting sa halip na basahin muli ang file: nmcli connection show "Work VPN" | grep -E '^vpn\.'. Kailangan mo ang remote at port, ang transport, ang identity material — ca, cert, key, tls-auth o tls-crypt — at ang paraan ng authentication. Sa profile na may password ng private key, idagdag ang sudo nmcli --show-secrets connection show "Work VPN" at tingnan ang secret flag: 0 ay none, kaya nasa keyfile ang secret; 1 ay agent-owned; 2 ay not-saved, ibig sabihin hindi kailanman isinusulat sa keyfile; 4 ay not-required, ibig sabihin walang secret na kailangan. Mga bit ito, hindi iskala, kaya ang 3 ay agent-owned plus not-saved lang. Ang secret na nagtatanong isang beses bawat session ay agent-owned (1), kung saan hinihiling ito ng agent; walang hiwalay na numero ng flag para doon. Ang hindi pagtutugma ng flag ang karaniwang dahilan kung bakit kumokonekta ang profile mula sa desktop applet at nabibigo mula sa script o sa boot.

Ang pinakamabilis na paraan upang makita kung ano ang itinapon ng parser ay hilingin sa plugin na isulat muli ang file at pagkatapos ay ihambing: nmcli connection export "Work VPN" /tmp/roundtrip.ovpn. Ang mga direktibang nawawala sa diff na iyon ay hindi iiral sa oras ng koneksyon. Ang mga hook ang karaniwang pinaghihinalaan — inaasahan ng script-security, up, down at route-up ang script na tumatakbo nang may mataas na pribilehiyo at sadyang hindi dinadala. Huwag ibaba ang verification o magbigay ng dagdag na pribilehiyo upang magtagumpay ang import; ang hindi suportadong opsyon ay kadalasang sumasalamin sa set ng feature ng plugin at hindi sa server na hindi maabot. Ilipat ang gawi na iyon sa isang NetworkManager dispatcher script o sa patakaran sa panig ng server.

Tiyakin ding nakaligtas ang mga field ng identity: ang CA reference, remote-cert-tls at anumang pagsusuri ng pangalan na inasahan ng profile. Ang koneksyong tumataas nang wala ang mga ito ay maaaring kausap ang kahit anong sumasagot sa address na iyon.

Basahin ang koneksyon ng WireGuard, hindi ang wg-quick file

Ang wg-quick file ay isang format na may shell semantics; ang na-import na koneksyon ay isang set ng setting. Ang PrivateKey ay nagiging private key ng interface, ang Address ay nagiging isa o higit pang IPv4 at IPv6 address, ang DNS ay nagmamapa sa mga resolver property ng NetworkManager, ang MTU ay nagmamapa sa wireguard.mtu (ang sariling default ng wg-quick ay 1420), at ang bawat peer block ay nagiging peer entry na may public key, endpoint, pinapayagang IP at persistent keepalive. I-print ang na-store gamit ang nmcli --show-secrets connection show wg0; kung hindi lumilitaw ang listahan ng peer sa output na iyon, basahin ang keyfile:

sudo sed -n '/^\[wireguard\]/,/^\[/p' /etc/NetworkManager/system-connections/wg0.nmconnection

Ang hindi nakakaligtas ay ang kalahating shell ng wg-quick. Ang PreUp, PostUp, PreDown, PostDown at Table ay gawi ng tool na iyon, hindi attribute ng isang WireGuard interface, kaya walang tumatakbo sa mga ito pagkatapos ng import. Kung ginamit ng orihinal ang Table = off upang hindi galawin ang default na ruta, inilalantad ng mga bagong release ng NetworkManager ang ip4-auto-default-route at ip6-auto-default-route para sa parehong layunin; itakda ang mga ito nang tahasan sa halip na ipalagay na kumikilos ang koneksyon tulad ng script. Ang hook na nagtutulak ng custom na ruta ay nangangailangan ng rutang iyon sa routing setting ng koneksyon, kung hindi ay mawawala lang ito.

Bigyan ang koneksyon ng eksaktong isang may-ari

Ang klasikong kasunod na pagkasira ay isang koneksyong gumagana hanggang sa susunod na boot at pagkatapos ay umiikot. Kadalasan ang [email protected] ay nakabukas pa mula sa naunang eksperimento, o naglulunsad ng sariling daemon ang client ng vendor, at dalawang may-ari ang nagsusulat ng ruta at DNS para sa parehong destinasyon. Itinatakda ng NetworkManager ang resolver sa sariling landas, nagsusulat ang wg-quick sa pamamagitan ng resolvconf, at ang huling sumulat ang nananalo — kaya gumagana ang name resolution, pagkatapos huminto, pagkatapos gumana muli. Suriin ang systemctl status wg-quick@wg0, nmcli connection show --active at ip link show type wireguard, pagkatapos ay i-disable ang ikalawang may-ari sa halip na i-tune ang metric nito.

Kung talagang kailangan mo ang dalawa, bigyan sila ng hiwalay na interface at magkahiwalay na pinapayagang IP, at hayaang eksaktong isa sa kanila ang mag-install ng default na ruta. Ang dalawang default na ruta na may magkaibang metric ay hindi split tunnel; ito ay karera na pinagpapasyahan ng serbisyong pangalawa ang pagsisimula. At pagkatapos ng muling pagkonekta, suriin muli ang inilapat na estado — ang isang beses na manu-manong pag-edit ng resolver na nagpapagana sa lahat ay hindi patunay na kumpleto ang import.

I-verify sa trapiko at malampasan ang reboot

Itaas ang koneksyon gamit ang nmcli connection up "Work VPN", pagkatapos ay basahin ang estado, address at ruta sa halip na magtiwala sa icon: nmcli device show wg0 | grep -E 'GENERAL.STATE|IP4.ADDRESS|IP4.ROUTE', ip route show default at isang tunay na paghahanap ng pangalang lumulutas lamang sa loob ng tunnel. Ang handshake o matagumpay na ping ay nagpapatunay lamang na gumagana ang cryptography; wala itong sinasabi tungkol sa forwarding, split tunnel prefix o pribadong DNS, at iyon ang mga bahaging kadalasang nasisira.

Pagkatapos ay i-reboot at ulitin. Ang gawi ng autoconnect, pinangalanang muli na interface at plugin na naglo-load pagkatapos ng device ay lahat ng pagkasirang nakikita mo lamang sa malinis na boot. Ipinapakita ng journalctl -u NetworkManager -b --no-pager | tail -n 40 kung ano ang ginawa ng daemon sa koneksyong ito sa boot na ito. Para sa ikalawang computer, kopyahin ang keyfile at panatilihin itong pagmamay-ari ng root na may mode 600, o gamitin ang nmcli connection export para sa OpenVPN at i-import muli ang nagresultang .ovpn — walang katumbas ang export path sa WireGuard, kaya ang direksyong iyon ay kopya ng file o bagong import mula sa protektadong orihinal.

Maikling bersyon, sa pagkakasunod-sunod: kumpirmahin ang plugin o bersyon ng NetworkManager, i-import mula sa absolute path, basahin ang na-parse na setting kasama ang secret flag, ihambing ang export ng OpenVPN sa orihinal, suriin ang hook at ruta sa panig ng WireGuard, i-disable ang anumang ikalawang may-ari, at pagkatapos ng reboot i-verify ang paghahanap ng pangalan at ang talahanayan ng ruta. Kapag nakapasa ang isang koneksyon sa lahat ng iyon, ang profile file na nagpasimula nito ay maaaring bumalik sa protektadong imbakan.

Kaugnay na mga artikulo