Pi VPN клиент ретінде: бір менеджер ме, әлде өз скрипті ме?
Raspberry Pi-де NetworkManager профилін қолмен жазылған клиент скриптімен салыстыру, толық туннель, DNS, IPv6 және туннель үзілгендегі мінез-құлық.
Тек өзінің шығыс трафигін қорғауы керек Raspberry Pi үшін екі шынайы жоба бар: туннельге желі менеджері ие болсын, немесе оған ие болатын скриптті ұстаңыз. Екеуі де трафикті тасымалдай алады. Олар әртүрлі жерде сәтсіздікке ұшырайды, ал түнгі екіде қашықтан диагностикалай алатын ақау таңдауға тұрарлық. Оларды иелік бойынша, IPv6 мен DNS қосылғанда толық туннель нені білдіретіні бойынша және туннель үзілген сәтте не болатыны бойынша салыстырыңыз.
Бір туннельге екі ие
A жобасы — жүйенің желі менеджерінің ішіндегі профиль: импортталған OpenVPN профилі немесе жергілікті WireGuard қосылымы, оны жүктелу кезінде Ethernet пен Wi-Fi-ды көтеретін сол қызмет белсендіреді. B жобасы — клиентті тікелей іске қосатын, resolver конфигурациясын өңдейтін және өз маршруттары мен firewall ережелерін орнататын жеке бірлігіңіз. Екеуі де заңды жоба; олар маршруттау кестесін өзгертуге кімнің құқығы бар екенімен ерекшеленеді.
Ақаулар әртүрлі, өйткені иелер әртүрлі. A жағдайында белсендірілмейтін профиль интерфейсті жоғары, туннельді төмен қалдырады, ал менеджер журналдары себебін айтады. B жағдайында жартылай сәтті скрипт оларды жасаған процестен кейін де өмір сүретін маршруттар қалдырады. Екеуін бірге іске қосу — ең нашар нәтиже: екі процесс әдепкі маршрутты жазады, жүктелу кезінде resolver-дің екі өзгертуі жарысады және айналдыруға екі құпия жиынтығы керек.
Әр туннельге бір ие таңдап, бірдеңе сынамас бұрын екіншісін өшіріңіз. Екі ие — туннель көтерілгенде және ештеңе шешілмегенде қарайтын екі орын деген сөз. Осы бір ереже 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 көмегімен белсендіру ортақ машинадағы shell тарихынан тыс құпиясөз тіркесін ұстайды. Қадағалаусыз Pi үшін ақырында профильдің жүктелу кезінде көтерілуін қалайсыз, бұл оны қолмен бір рет көтеруден бөлек шешім.
Толық туннель, екі жоба бойынша салыстыру
Толық туннель — маршруттар туралы мәлімдеме, ниет туралы емес, және екі жоба оны әртүрлі білдіреді. Профиль тәсілі менеджерден әдепкі маршрут пен оның resolver параметрлерін орнатуды сұрайды; скрипт тәсілі скрипт айтқанды істейді, ештеңе жасамауды қоса. Ешбір жоба IPv6-ны айтылмаса қамтымайды, ал тиіспеген IPv6 әдепкі маршруты IPv4 мінсіз көрінгенде трафикті туннельден тыс қуана тасымалдайды.
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
Маршрутты іздеу үшін құжаттама мекенжайын қолданып, оны тексеруге рұқсатыңыз бар хостпен ауыстырыңыз. Бірінші команда Pi қарапайым межеге қай интерфейсті қолданатынын көрсетеді; екіншісі IPv6 әдепкі маршруты әлі бар-жоғын көрсетеді; үшіншісі қай resolver жауап бергенін дәлелдейді. Толық туннель туралы кез келген мәлімдемеге сенбес бұрын үшеуін де оқыңыз.
Егер провайдердің нұсқаулықтары толық туннельге уәде берсе, бірақ IPv6 әдепкі маршруты қалса, Pi ағып жатыр. Жоғарғы буында IPv6-ны өшіріңіз немесе профильден оны талап етуін сұраңыз, және кейінірек анықтаудың орнына саналы түрде шешіңіз.
Ашық ақау жабық ақауға қарсы
Туннель үзілгенде әдепкі маршрутынан айырылған маршруттау кестесі жай ғана физикалық жоғарғы буынға қайтады, ал трафик ашық түрде жалғасады. Бұл ашық ақау және бірдеңе кедергі болмаса, екі жобаның да әдепкі мінез-құлқы. Көпшілік мұны апталар өткен соң firewall журналын оқып біледі.
Жабық ақау туннель төменде болғанда қашықтан қатынаудан айырады, сондықтан басқару жолы үшін саналы ерекшелік қажет. Бір жол — туннельден тыс тек 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 іске қосса, туннельге ерекше ештеңе керек болмаса және ол жоғарғы буынды автоматты түрде ұстанғанын қаласаңыз, профильді алыңыз. Егер сізге саясаттық маршруттау, әр межеге таңдалатын бірнеше туннель немесе туннель көтерілмес бұрын болуы тиіс жабық ақау ережесі керек болса, скриптті алып, жүктелу реті мен тазалауды қоса, оның әр бөлігіне ие болыңыз. Екі жобаны араластыру кез келгенінен қымбатырақ.
Олардың арасында көшу негізінен рет мәселесі: ескі иені өшіріңіз, ескірген маршрут немесе resolver жазбасы қалмағанын растаңыз, содан кейін жаңасын қосып, екі рет қайта жүктеңіз. Бір қайта жүктеу екіншісі ашатын жарысты жасыра алады. Туннельді емес, Pi-ді сынаумен аяқтаңыз: атауды шешіңіз, IPv4 арқылы бірдеңе алыңыз, сақтасаңыз IPv6 арқылы алыңыз, содан кейін туннельді түсіріп, таңдаған мінез-құлқыңыз шынымен болатынын растаңыз. ip link ішіндегі интерфейс — сынақтың басы, соңы емес.