Raspberry Pi, якой трэба абараняць толькі ўласны зыходны трафік, мае два рэалістычныя варыянты: няхай тунэлем валодае сеткавы менеджэр, або трымайце скрыпт, які ім валодае. Абодва здольныя несці трафік. Яны адмаўляюць у розных месцах, і збой, які вы можаце дыягнаставаць аддалена ў дзве гадзіны ночы, — гэта той, які варта выбраць. Параўнайце іх па ўладанні, па тым, што азначае поўны тунэль, калі ўдзельнічаюць IPv6 і DNS, і па тым, што адбываецца ў момант, калі тунэль падае.

Два ўладальнікі для аднаго тунэля

Варыянт A — гэта профіль унутры сеткавага менеджэра сістэмы: імпартаваны профіль OpenVPN або натыўнае злучэнне WireGuard, якое актывуецца пры загрузцы той самай службай, што ўзнімае Ethernet і Wi-Fi. Варыянт B — гэта ваша ўласная юніт, якая запускае кліент напрамкі, рэдагуе канфігурацыю рэзалвера і ўсталёўвае ўласныя маршруты і правілы файрвола. Абодва — законныя варыянты; яны адрозніваюцца тым, каму дазволена змяняць табліцу маршрутызацыі.

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

Выберыце аднаго ўладальніка на тунэль і адключыце іншага, перш чым што-небудзь тэставаць. Два ўладальнікі таксама азначаюць два месцы, дзе глядзець, калі тунэль узняты і нічога не развязаваецца. Гэта адзінае правіла прадухіляе большасць заблытаных станаў, апісаных у абмеркаваннях Pi VPN.

Што стварае імпарт, а што не

На Raspberry Pi OS Bookworm і пазней стандартны сродак канфігурацыі сеткі — NetworkManager, таму профіль — натуральны дом для кліенцкага тунэля. Імпарт патрабуе ўсталяванага адпаведнага плагіна; без яго імпарт правальваецца з паведамленнем пра неподтрыманы тып злучэння, што і ёсць сумленны сігнал спыніцца і ўсталяваць плагін.

nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name

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

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

Поўны тунэль у параўнанні абодвух варыянтаў

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

ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org

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

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

Адкрыты збой супраць закрытага

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

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

sudo nft add table inet vpnkill
sudo nft 'add chain inet vpnkill out { type filter hook output priority 0; policy accept; }'
sudo nft add rule inet vpnkill out oifname != "tun0" ip daddr != 203.0.113.24 reject

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

Выбар для Pi без экрана

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

Пераход паміж імі — пераважна пытанне парадку: адключыце старога ўладальніка, пераканайцеся, што не засталося састарэлага маршруту або запісу рэзалвера, затым уключыце новы і перазагрузіцеся двойчы. Адна перазагрузка можа схаваць гонку, якую выявіць другая. Скончыце тым, што праверыце Pi, а не тунэль: развязайце імя, атрымайце нешта праз IPv4, атрымайце праз IPv6, калі вы яго пакінулі, затым апусціце тунэль і пераканайцеся, што выбраныя вамі паводзіны сапраўды адбываюцца. Інтэрфейс у ip link — гэта пачатак тэсту, а не канец.

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