Хтосьці загадзя стварыў tun1, профіль паказвае dev tun1, а злучэнне ўсё роўна не далучаецца. Наяўнасць імені на хаце амаль нічога не гаворыць, бо далучэнне залежыць ад прасторы імёнаў, тыпу прылады, таго, хто валодае звяном, і таго, што дазволена рабіць дэману. Паўторнае выкарыстанне прылады таксама прымушае прыняць рашэнне, якое хавае прадвызначаная канфігурацыя: які кампанент запісвае адрасы і маршруты. Спосабы адмовы двух падыходаў адрозніваюцца значна мацней, чым радкі канфігурацыі, таму вырашыце перад рэдагаваннем профілю.

Імя — гэта не далучэнне

dev tun1 запытвае ў OpenVPN інтэрфейс з такім імем, і традыцыйныя зборкі прасторы карыстальніка паспрабуюць яго адкрыць. Калі імя не адпавядае звычайнаму шаблону tun ці tap, профіль таксама патрабуе адпаведнага dev-type, бо тып ніколі не выводзіцца з радка. Прылада TAP — гэта не прылада TUN з іншай назвай: далучэнне не той прылады або адразу правальваецца, або стварае звяно, якое нясе кадры, якіх ніхто не чакае. Праверце тып перш за ўсё, бо кожная наступная праверка мяркуе, што абодва бакі згодныя на яго. Пасля гэтага пераканайцеся, што працэс сапраўды можа адкрыць прыладу, а не проста ўбачыць яе.

dev tun1
dev-type tun

Сеткавы інтэрфейс і /dev/net/tun — розныя аб'екты: адзін з'яўляецца звяном унутры прасторы імёнаў, другі — сімвальнай прыладай, якую праграма прасторы карыстальніка выкарыстоўвае для далучэння. Дакументацыя Linux TUN/TAP апісвае гэты шлях далучэння і правілы валодання для пастаянных прылад. Root-абалонка, якая можа запусціць ip link, даказвае толькі тое, што абалонка мае прывілеі, а не тое, што іх мае дэман. Валоданне вузлом прылады, набор магчымасцей службы і карыстальнік, ад імя якога яна працуе — усё гэта павінна супасці, перш чым адкрыццё атрымаецца.

Прылада, якая існуе і не адкрываецца, — гэта праблема валодання, а не праблема маршрутызацыі. Разглядайце яе менавіта так падчас адладкі, інакш паўдня сыдзе на чытанне табліц маршрутаў, якія ніколі не былі прычынай.

Хто канфігуруе звяно: дзве мадэлі валодання

У першай мадэлі OpenVPN наладжвае адрасы і маршруты ў працэсе ўзняцця злучэння. Гэта прадвызначаныя паводзіны і самыя простыя для разумення, бо адзін кампанент стварае стан і потым зноў яго выдаляе. У другой мадэлі інтэрфейсам валодае знешні кіраўнік, а ifconfig-noexec забараняе OpenVPN выконваць каманды наладкі адрасоў і перадае параметры скрыптам. Тады кіраўнік мусіць сам ужыць правільную лакальную і парную канфігурацыю, а гэта большая праца, чым мяркуе назва опцыі. Выбар паміж імі — пытанне пра тое, хто можа змяняць звяно, пакуль яно ўзнятае.

ifconfig-noexec тычыцца толькі адрасоў: табліца маршрутызацыі не закранаецца, а наладка маршрутаў належыць route-noexec. Разглядайце дзве дырэктывы як асобныя кіраванні з асобнымі ўладальнікамі, бо ўсталяваць адно і меркаваць другое — звычайная крыніца напалову сканфігураваных звян. Выберыце роўна аднаго ўладальніка на кожны ўзровень: адрасы ў адным месцы, маршруты ў адным месцы. Калі сеткавы кіраўнік і памочнік VPN адначасова запісваюць адрасы, тое адключэнне выдаляе стан, ад якога іншы бок усё яшчэ залежыць.

Аглядайце прыладу з той прасторы імёнаў, якая важная

Аглядайце прыладу з прасторы імёнаў, у якой працуе працэс VPN, а не з той, у якой выпадкова апынулася ваша абалонка. Дзве каманды ніжэй адказваюць на розныя пытанні, і розніца праяўляецца, калі хост бачыць інтэрфейс, якога не бачыць кантэйнер. Запусціце іх у паказаным парадку, бо другая мае сэнс толькі тады, калі вы ведаеце, ці існуе звяно наогул.

ip -details link show dev tun1
ip tuntap show

Першая каманда друкуе звяно так, як яго бачыць ядро, разам са сцягамі і тыпам інтэрфейсу, і менавіта так вы пацвярджаеце, што гэта тая прылада, якую вы мелі на ўвазе. Другая пералічвае пастаянныя запісы tun/tap, якія існуюць без таго, каб іх трымаў які-небудзь працэс. Інтэрфейс, што чакае свайго прызначанага ўладальніка, — іншая сітуацыя, чым жывы тунель, далучаны да іншага VPN, і толькі другая тлумачыць, чаму ваша далучэнне правальваецца. Знайдзіце працэс, які трымае прыладу, перш чым нешта змяняць, бо пастаянны запіс і заняты інтэрфейс маюць розныя рашэнні.

Падтрымка чарговасці — гэта пэўная схема драйвера з уласнымі патрабаваннямі, а не дазвол незвязаным працэсам дзяліць адзін інтэрфейс. Жывая сесія іншага ўладальніка — гэта праблема каардынацыі, і ніякае рэдагаванне профілю яе не вырашае.

Два розныя віды захавання

Захаванне ў ядры і persist-tun апісваюць тэрміны жыцця, якія лёгка зблытаць і дорага памыліцца. Пастаянная прылада існуе незалежна ад любога працэсу, таму перажывае прыпынак і можа быць выкарыстана наступным запускам. persist-tun захоўвае рэсурсы падчас падтрыманых мяккіх скідаў унутры аднаго працэсу OpenVPN, гэта значна карацейшы гарызонт. Ніводнае не абяцае, што прыпынак службы пакіне маршруты і адрасы на месцы, а інтэрфейс, які застаецца бачным, не з'яўляецца доказам працоўнай шыфраванай сесіі.

Праверце таксама бэкенд, бо створаны загадзя інтэрфейс нічога не кажа пра тое, якая рэалізацыя яго адкрые. Зборкі супольнасці з прамым шляхам даных паспрабуюць яго выкарыстаць, калі дызайн не прадугледжвае іншага. Там, дзе версія падтрымлівае перамыкач, disable-dco выбірае замест гэтага шлях прасторы карыстальніка; старыя рухавікі і іншыя кліенты такой дырэктывы не маюць, таму трымайце ўмову версіі побач з опцыяй, а не мяркуйце, што яна прымяняецца.

Што ламаецца, калі праверыць толькі запуск

Пагадненне аб валоданні можа прайсці першы тэст і праваліцца на апошнім, і менавіта таму запуск сам па сабе — кепская праверка. Назірайце замест гэтага два пераходы: мяккі скід і поўны прыпынак з наступным запускам.

systemctl status openvpn-client@lab
ip -details link show dev tun1

Запуск — гэта просты выпадак: юніт паднімаецца, звяно з'яўляецца, а вывад стану называе профіль, які загрузіўся. Далучэнне — гэта момант, калі дэман адкрывае прыладу, таму запускайце праверку звяна пасля таго, як юніт паведаміць пра актыўнасць, а не да таго. Калі звяно існуе, пакуль стан яшчэ актывуецца, вы бачыце пастаянную прыладу, да якой ніхто яшчэ не далучыўся, а не працоўны тунель. Пусціце рэальны трафік праз звяно, перш чым ісці далей, бо далучаны інтэрфейс без прыдатнага маршруту — усё яшчэ няўдача.

kill -SIGHUP $(pidof openvpn)
journalctl -u openvpn-client@lab -n 40
systemctl stop openvpn-client@lab
ip -details link show dev tun1

Мяккі скід павінен пакінуць сесію прыдатнай, а рэсурсы цэлымі — менавіта гэтую працу выконвае persist-tun. Поўны прыпынак — гэта месца, дзе знешні кіраўнік выдае сябе: калі звяно або яго адрасы перажываюць прыпынак, імі валодае нехта іншы, і гэта або стан, які вы дакументавалі, або памылка, якую вы толькі што знайшлі. Запішыце абодва назіранні побач з профілем, каб наступная змена пачыналася з доказаў, а не з дыяграмы.

Падобныя артыкулы