Імпарт у NetworkManager не ўдаецца для файлаў OpenVPN і WireGuard
Звычайна ламаецца парсер, а не профіль. Праверце плагін, прачытайце імпартаванае злучэнне, выпраўце secret-сцягі і маршруты, затым праверце перазагрузку.
Я выбраў Імпарт з файла… у наладах GNOME, выбраў профіль, які працуе з кліентам пастаўшчыка, і дыялог зачыніўся, нічога не дадаўшы ў спіс. На другім ноўтбуку імпарт завяршыўся, злучэнне з'явілася пад назвай профілю, а затым яно не прайшло пры першым запыце аўтэнтыфікацыі. NetworkManager ніколі не запускае ваш файл .ovpn або wg-quick як ёсць. Ён перадае файл парсеру, парсер ператварае яго ва ўласны фармат злучэння NetworkManager, і з гэтага моманту тунель будуецца з гэтага разабранага аб'екта — сакрэты, маршруты, DNS і ўсё астатняе. Таму карыснае пытанне не ў тым, чаму файл зламаны, а ў тым, ці адбыўся разбор і што ён захаваў.
Што імпарт насамрэч робіць з файлам
Для OpenVPN парсер жыве ў пакеце плагіна, а створанае ім злучэнне паказвае на службу D-Bus накшталт org.freedesktop.NetworkManager.openvpn. Няма плагіна — няма парсера: тып невядомы nmcli, а графічны спіс дадання VPN можа зусім не паказваць пункт імпарту. WireGuard адрозніваецца ў адным важным моманце — у NetworkManager ёсць уласныя налады WireGuard ад серыі 1.30, таму асобнага пакета-плагіна няма, але чытач wg-quick існуе толькі ў зборках, якія яго пастаўляюць.
У любым выпадку файл чытаецца адзін раз. Вынік запісваецца як keyfile у /etc/NetworkManager/system-connections/, названы па злучэнні, належыць root і недаступны іншым карыстальнікам, бо змяшчае ключавы матэрыял. Гэты keyfile цяпер і ёсць злучэнне; праўка зыходнага .ovpn пасля гэтага нічога не змяняе.
Тры сімптомы належаць да трох розных этапаў. Адсутнасць пункта імпарту або невядомы тып азначае, што не хапае плагіна ці версіі. Памылка імпарту з назвай дырэктывы азначае, што парсер прачытаў файл і адхіліў яго частку. Злучэнне, якое існуе, але ніколі не актывуецца, азначае, што разабраны аб'ект няпоўны або сервер яго адхіляе. Вызначце, які з трох выпадкаў у вас, перш чым нешта правіць.
Пераканайцеся ў наяўнасці плагіна, перш чым адладжваць профіль
Адсутны плагін выглядае дакладна як пашкоджаны профіль, таму спачатку праверце пакет. У Debian і Ubuntu падтрымка OpenVPN пастаўляецца як network-manager-openvpn плюс памочнік для працоўнага стала; у Fedora гэта пакеты NetworkManager-openvpn і NetworkManager-openvpn-gnome; у Arch — networkmanager-openvpn.
dpkg -l network-manager-openvpn-gnome | tail -n 2 rpm -q NetworkManager-openvpn pacman -Q networkmanager-openvpn
Затым імпартуйце па абсалютным шляху: nmcli connection import type openvpn file /home/you/profile.ovpn. Адносныя шляхі звычайна працуюць, але абалонка, якая змяніла каталог, ператварае хуткі імпарт у аб'езд. Для WireGuard праверце nmcli --version і пераканайцеся, што бок ядра існуе з modprobe wireguard; імпарт, які ўдаецца на машыне без модуля, пакідае вас са злучэннем, чыя прылада так і не з'явіцца. даведка nmcli дакументуе падкаманду import і прыдатныя назвы тыпаў. Калі type wireguard адхіляецца адразу, зборка старэйшая за гэтую магчымасць, і правільны крок — пакет з дыстрыбутыва або бэкпорт, а не капіраванне канфігурацыі ў адвольны каталог у надзеі, што нешта яе прачытае.
Чытайце злучэнне OpenVPN, а не .ovpn
Калі злучэнне створана, чытайце разабраныя налады, а не перачытвайце файл: nmcli connection show "Work VPN" | grep -E '^vpn\.'. Вам патрэбны remote і порт, транспарт, ідэнтыфікацыйны матэрыял — ca, cert, key, tls-auth або tls-crypt — і метад аўтэнтыфікацыі. Для профілю з паролем прыватнага ключа дадайце sudo nmcli --show-secrets connection show "Work VPN" і паглядзіце на secret-сцягі: 0 — none, значыць сакрэт ляжыць у keyfile; 1 — agent-owned; 2 — not-saved, гэта значыць ён ніколі не запісваецца ў keyfile; 4 — not-required, гэта значыць сакрэт зусім не патрэбны. Гэта біты, а не шкала, таму 3 — гэта проста agent-owned плюс not-saved. Сакрэт, які пытаюць раз за сеанс, — гэта agent-owned (1), прычым яго запытвае агент; асобнага нумара сцяга для гэтага няма. Нясупадзенне сцягоў — звычайная прычына, чаму профіль падключаецца з аплета працоўнага стала і не працуе са скрыпта або пры загрузцы.
Хутчэй за ўсё ўбачыць, што парсер выкінуў, папрасіўшы плагін запісаць файл назад, а затым параўнаўшы яго: nmcli connection export "Work VPN" /tmp/roundtrip.ovpn. Дырэктывы, якія знікаюць у гэтым diff, не будуць існаваць пры падключэнні. Хукі — звычайныя падазроныя: script-security, up, down і route-up разлічваюць на скрыпт, які запускаецца з павышанымі правамі, і наўмысна не пераносяцца. Не зніжайце праверку і не давайце лішніх прывілеяў, каб імпарт удаўся; непадтрыманая опцыя звычайна адлюстроўвае набор магчымасцяў плагіна, а не недаступны сервер. Перанясіце гэтыя паводзіны ў dispatcher-скрыпт NetworkManager або ў палітыку на баку сервера.
Таксама пераканайцеся, што палі ідэнтычнасці выжылі: спасылка на CA, remote-cert-tls і любая праверка імені, на якую спадзяваўся профіль. Злучэнне, якое ўзнімаецца без іх, можа размаўляць з чым заўгодна, што адказвае на гэтым адрасе.
Чытайце злучэнне WireGuard, а не файл wg-quick
Файл wg-quick — гэта фармат з shell-семантыкай; імпартаванае злучэнне — гэта набор налад. PrivateKey становіцца прыватным ключом інтэрфейса, Address — адным або некалькімі адрасамі IPv4 і IPv6, DNS супастаўляецца з уласцівасцямі resolver у NetworkManager, MTU супастаўляецца з wireguard.mtu (уласнае значэнне wg-quick па змаўчанні — 1420), а кожны блок peer становіцца запісам peer з публічным ключом, endpoint, дазволенымі IP і persistent keepalive. Вывядзіце тое, што захавана, з nmcli --show-secrets connection show wg0; калі спіс peer не з'яўляецца ў гэтым вывадзе, прачытайце keyfile:
sudo sed -n '/^\[wireguard\]/,/^\[/p' /etc/NetworkManager/system-connections/wg0.nmconnection
Не выжывае shell-палова wg-quick. PreUp, PostUp, PreDown, PostDown і Table — гэта паводзіны таго інструмента, а не атрыбуты інтэрфейса WireGuard, таму пасля імпарту іх ніхто не выконвае. Калі арыгінал выкарыстоўваў Table = off, каб не чапаць маршрут па змаўчанні, свежыя выпускі NetworkManager даюць для той жа мэты ip4-auto-default-route і ip6-auto-default-route; задайце іх яўна, замест каб меркаваць, што злучэнне паводзіць сябе як скрыпт. Хуку, які дадаваў уласны маршрут, патрэбны гэты маршрут у наладах маршрутызацыі злучэння, інакш ён проста будзе адсутнічаць.
Дайце злучэнню роўна аднаго ўладальніка
Класічны наступны збой — злучэнне, якое працуе да наступнай загрузкі, а потым зацыкліваецца. Звычайна [email protected] усё яшчэ быў уключаны з мінулага эксперыменту, або кліент пастаўшчыка запускаў уласны деман, і два ўладальнікі пісалі маршруты і DNS для аднаго і таго ж прызначэння. NetworkManager задае resolver сваім шляхам, wg-quick піша праз resolvconf, і перамагае апошні, хто піша — так што развязанне імёнаў працуе, потым спыняецца, потым зноў працуе. Праверце systemctl status wg-quick@wg0, nmcli connection show --active і ip link show type wireguard, а потым выключыце другога ўладальніка, замест каб круціць яго метрыку.
Калі вам сапраўды патрэбны абодва, дайце ім асобныя інтэрфейсы і неперасякальныя дазволеныя IP, і няхай роўна адзін з іх усталёўвае маршрут па змаўчанні. Два маршруты па змаўчанні з рознымі метрыкамі — гэта не split tunnel; гэта гонка, якую вырашае служба, што стартуе другой. І пасля перападключэння зноў прагледзьце прыменены стан — разавая ручная праўка resolver, якая ўсё лагодзіць, не даказвае, што імпарт поўны.
Праверце трафікам і перажывіце перазагрузку
Узніміце злучэнне з nmcli connection up "Work VPN", а потым чытайце стан, адрас і маршруты, замест каб давяраць значку: nmcli device show wg0 | grep -E 'GENERAL.STATE|IP4.ADDRESS|IP4.ROUTE', ip route show default і сапраўдны запыт імені, якое развязваецца толькі ўнутры тунеля. Handshake або паспяховы ping даказвае толькі тое, што крыптаграфія працуе; ён нічога не кажа пра перасылку, прэфіксы split tunnel ці прыватны DNS — а гэта звычайна і ламаецца.
Затым перазагрузіцеся і паўтарыце. Паводзіны autoconnect, перайменаваны інтэрфейс і плагін, які загружаецца пасля прылады, — усё гэта збоі, якія відаць толькі пры чыстай загрузцы. journalctl -u NetworkManager -b --no-pager | tail -n 40 паказвае, што дэман зрабіў з гэтым злучэннем у гэтай загрузцы. Для другога камп'ютара скапіруйце keyfile і трымайце яго ва ўласнасці root з рэжымам 600, або выкарыстайце nmcli connection export для OpenVPN і паўторна імпартуйце атрыманы .ovpn — шлях экспарту не мае адпаведніка для WireGuard, таму гэты кірунак — копія файла або новы імпарт з абароненага арыгінала.
Коратка, па парадку: пацвердзіце плагін або версію NetworkManager, імпартуйце па абсалютным шляху, прачытайце разабраныя налады разам з secret-сцягамі, параўнайце экспарт OpenVPN з арыгіналам, праверце хукі і маршруты з боку WireGuard, выключыце любога другога ўладальніка, а потым пасля перазагрузкі праверце развязанне імені і табліцу маршрутаў. Калі злучэнне праходзіць усё гэта, файл профілю, з якога яно пачалося, можна вярнуць у абароненае сховішча.