Сервер ці кліент: які модуль OpenVPN на Pi з дзвюма ролямі
Дзве копіі OpenVPN дзеляць адзін Pi: адна прымае вандроўных карыстальнікаў, другая падключаецца да вышэйшага правайдэра. Прачытайце назву модуля і каталог, перш чым перазапускаць любую з іх.
На Pi працуюць два працэсы OpenVPN, які адначасова прымае вандроўных карыстальнікаў і дасягае вышэйшага правайдэра, і яны амаль нічога не дзеляць, акрамя абсталявання. Адзін слухае ўваходныя тунелі, другі набірае знешні нумар. Кожны чытае свой каталог, і кожны мае ўласны рэжым збою. Перазапуск не таго — самы распаўсюджаны спосаб, якім «выпраўленне кліента» замест гэтага збівае слухача.
Супрастаўце назву модуля з каталогам, які ён загружае
Upstream 2.6 пастаўляе два шаблонныя модулі: [email protected] і [email protected]. Шаблон сервера стартуе ў /etc/openvpn/server і загружае %i.conf адтуль. Шаблон кліента стартуе ў /etc/openvpn/client. Копія з назвай roaming можа існаваць у абодвух месцах адначасова — як сервер і як кліент, з двума незвязанымі канфігурацыямі і без сувязі паміж імі, акрамя радка.
Спытайце systemd, а не файлавую сістэму, бо ўпакоўшчыкі дадаюць дадатковыя файлы, якія могуць змяніць працоўны каталог або аргументы, якія атрымлівае бінарнік.
systemctl list-units --type=service 'openvpn-*@*' systemctl cat [email protected] systemctl show -p WorkingDirectory -p ExecStart [email protected]
Першая каманда пералічвае кожны ініцыяваны модуль, уключаючы тыя, што пацярпелі няўдачу і засталіся загружанымі. Другая друкуе файл модуля разам з любым перакрыццём. Трэцяя — найхутчэйшы спосаб убачыць два факты, якія вырашаюць пытанне: каталог, у якім стартуе працэс, і шлях канфігурацыі, які яму перадалі.
Вырашайце па напрамку пакетаў, а не па назве інтэрфейса
Копія сервера валодае слухаючым сокетам і прымае злучэнні. Яе шыфраваны транспарт — гэта лакальны ўваход і лакальны выхад на Pi, а трафік, які яна перасылае для карыстальнікаў, ідзе па шляху перасылкі і падпарадкоўваецца іншаму набору правілаў. Копія кліента не мае такога слухача: яна набірае партнёра, таму яе шыфраваны транспарт — гэта лакальны выхад да ніжняга ўзроўню.
Гэтая розніца кажа, куды належыць правіла. Правіла, што супадае з інтэрфейсам у ланцугу перасылкі, толькі дазваляе трафік, які маршрутызацыя ўжо выбрала; яно ніколі не выбірае маршрут. Калі пакеты вандроўнага карыстальніка выходзяць не тым шляхам, ланцуг для праверкі — гэта forward, а не output.
Паглядзіце на сокеты раней, чым тэарэтызаваць. Сервер, прывязаны да udp/1194, паказвае слухаючы сокет. Кліент паказвае сувязь з адрасам правайдэра і нічога, што слухае.
ss -lunp | grep openvpn ss -unp state established '( dport = :1194 or sport = :1194 )'
Маршрут па змаўчанні адной копіі можа перахапіць адказы другой
redirect-gateway, які штурхае вышэйшы кліент, усталёўвае маршрут па змаўчанні, што канкуруе з усім астатнім на машыне, уключаючы адказы, якія сервер адпраўляе вандроўным карыстальнікам. OpenVPN робіць выключэнне для ўласнага адраса партнёра, каб тунель заставаўся дасяжным, але гэтае выключэнне нічога не кажа пра тэлефон у гатэльнай сетцы.
Сімптом звычайна асіметрычны. Рукапоціск завяршаецца, кліент паведамляе пра злучэнне, і трафік памірае пасля першага пакета адказу. Маршрутызацыя палітык на аснове крыніцы або пазнака пакета, усталяваная на копіі сервера з --mark, трымае два патoкі асобна; ні адно з гэтага не з’яўляецца поўным наборам правілаў само па сабе, і абодва патрабуюць сапраўдных маршрутаў у той табліцы, якую яны выбіраюць.
Праверце лакальнае рашэнне, а не стан тунеля, бо ядро выбірае крыніцу і інтэрфейс раней, чым OpenVPN убачыць пакет.
ip route get 203.0.113.44 ip rule show
Перазапусціце адну ролю і дакажыце, што другая выжыла
Парадак важны, калі абедзве ролі залежаць ад аднаго ніжняга ўзроўню. Перазапусціце кліента першым, калі маршрут да вышэйшага правайдэра павінен існаваць да таго, як трафік карыстальнікаў зможа перасылацца, і перазапусціце сервер першым, калі вы мяняеце толькі яго слухач або яго пул. У любым выпадку пасля гэтага пацвердзіце абодва модулі, бо няўдалы перазапуск можа пакінуць другую ролю працаваць са старэтым станам.
Запішыце ўмову спынення да змены: страта вышэйшага тунеля блакуе вандроўных карыстальнікаў ці адкочваецца на ўласны канал Pi? DNS і IPv6 таксама патрабуюць яснага адказу, бо прасунуты рэзалвер часта жыве даўжэй за маршрут, які зрабіў яго карысным.
systemctl restart [email protected] systemctl is-active [email protected] journalctl -u [email protected] -n 20 --no-pager
Прымайце змену толькі калі тры рэчы выконваюцца адначасова: новае ўваходнае злучэнне завяршаецца, перасланая праграма дасягае пункту прызначэння праз меркаваны выхад, і абодва працэсы ўсё яшчэ паведамляюць пра свайго чаканага партнёра. Калі адно з трох не ўдаецца, вы змянілі не тую копію або не той маршрут, і наступны крок — перачытаць модуль, а не перазапускаць штосьці яшчэ.