Systemd немесе NetworkManager: жүктелу кезінде VPN-ді кім іске қосады?
Үш механизм бір Ubuntu профилін көтере алады, әрқайсысының триггері бөлек. Оларды салыстырыңыз, бір иесін қалдырып, қайталамасын алып тастаңыз.
Бір бейнеден шыққан екі Ubuntu машинасы, бір VPN профилі, кіру кезінде қарама-қарсы нәтиже: бірінде туннель жұмыс үстелі пайда болмай тұрып көтерілген, екіншісінде ол ешқашан көтерілмейді. Мұнда профиль айнымалы емес. Айырмашылық — үш компоненттің қайсысына оны іске қосу бұйрығы берілгенінде, және бұл үшеуі бір ажыратқышты бөліспейді.
Оларды қатар салыстыру болжамнан жылдам. Әрқайсысы танылатын түрде сәтсіздікке ұшырайды, сондықтан салыстырудың мәні бар.
Үш түрлі триггері бар үш іске қосқыш
Бумаланған openvpn қызметі ең ескі жол. Оның init скрипті /etc/default/openvpn файлынан автозапуск тізімін оқиды. Егер бұл тізім түсініктемеленген немесе бос қалдырылса, скрипт сіз қосқан жалғыз конфигурацияның орнына сол қалтадағы барлық конфигурацияны іске қосады. Бір туннель үшін қосылған бір файл үнсіз бірнешеуін көтеруі мүмкін.
| Starter | What triggers it | Typical failure |
|---|---|---|
| Init script and templated units | Boot, plus anything in the autostart list | Starts every config, not the one you meant |
| NetworkManager secondary | Activation of the base Wi-Fi or Ethernet profile | Nothing happens until that base link comes up |
| Hand-written unit or wrapper | Whatever its WantedBy and ExecStart say | Runs a different binary or environment than your shell |
Адамдар қате конфигурациялайтын жол — екіншісі. NetworkManager импортталған профильді ұстайды және оны іске қосады, бірақ тек басқа қосылымның қосалқысы ретінде, яғни триггер VPN-ге емес, желілік байланысқа тиесілі.
Орнату құны мен қамту аясын салыстырыңыз
Init скриптінің жолы бір жолға тұрады және машинадағы барлық конфигурацияны қамтиды. Бұл маршрутизатор үшін дұрыс, ал түрлі желілерге қосылатын ноутбук үшін қате. NetworkManager жолы UUID іздеуге тұрады және туннельді бір негізгі қосылымға байлайды. Ол жұмыс SSID-інде көтеріледі, қонақүй желісінде төменде қалады.
Қолмен жазылған unit ең қымбат және басқа қызметтерге қатысты реттілікті қоса, ең көп бақылау береді. Шешуші фактор — қамту аясы. Егер машинада бір желі мен бір туннель болса, бумаланған қызмет адал және болжамды. Егер туннель белгілі бір Wi-Fi желісін ұстануға тиіс болса, қосалқы — үшеуінің ішінде осы шартты қосымша скриптсіз білдіретін жалғызы.
Бір иесін таңдап, қалғандарын жойыңыз
Екі иесі іске қосатын профиль жүктелулер арасында өзгеретін уақыт береді, бұл кез келген механизмнің жалғыз күйінен нашар. Иесін таңдаңыз, содан кейін бәсекелес жолды абайсыздықтан емес, әдейі өшіріңіз.
# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'
# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"
Егер тоқтатылатын жол — бумаланған жол болса, дұрыс реттілікпен жасаңыз: AUTOSTART мәнін none етіп қойыңыз, генерацияланған unit-тер жаңа тізімді алсын деп systemctl daemon-reload іске қосыңыз, содан кейін енді қажет емес үлгі данасын өшіріңіз. Қайта жүктеуді өткізіп жіберу ескі unit-терді белсенді күйде қалдырады да, өзгеріс әсер етпегендей көрінеді.
Ілініп қалатын тоқтату — шешімі шектеулі бөлек мәселе. TimeoutStopSec systemd-нің SIGKILL жібермес бұрын қанша күтетінін шектейді. Оны орнатудың дұрыс орны — drop-in файлы, себебі бумаланған unit-ті өңдеу өзгерісті келесі жаңартуда жоғалтады.
Шын мәнінде не іске қосылғанын тексеріңіз
Қайта жүктеп, конфигурация файлына сенудің орнына дәлелдерді оқыңыз. Туннельге ие unit белсенді күйді және жүктелуге сәйкес келетін басталу уақытының белгісін көрсетеді, ал VPN интерфейсі сіз кірмес бұрын болып тұрады.
systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0
Мұнда тағы бір тексеріс орынды: unit-тің ExecStart сіз ойлаған бинарға нұсқайтынына көз жеткізіңіз. Жергілікті құрастырылған клиент немесе snap бумасы көбіне анық жолды немесе snap run қаптамасын қажет етеді, өйткені systemd сіздің қабығыңыздың іздеу ретін мұраламайды. command -v openvpn-ті unit файлымен салыстыру мұны секундтарда шешеді.
Таңдалған иесін машинаның жазбаларына, профиль атауының қасына жазыңыз. Келесі адам жоғалған туннельді жөндегенде салыстыруды қайталамай, сол жолдан бастайды.