Сервер ме клиент: қос рөлді Pi-де қай OpenVPN бірлігі
Екі 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 арқылы қойылған пакет белгісі екі ағынды бөлек ұстайды; олардың ешқайсысы жалғыз өзі толық ережелер жиынтығы емес, және екеуі де таңдаған кестесінде жарамды маршруттарды қажет етеді.
Туннель күйін емес, жергілікті шешімді тексеріңіз, өйткені ядро 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
Өзгерісті тек үш нәрсе бір уақытта орындалғанда қабылдаңыз: жаңа кіріс қосылымы аяқталады, жіберілген қолданба көзделген шығыс арқылы межелі жеріне жетеді және екі процесс те өз күткен серіктесін хабарлайды. Үшеуінің біреуі сәтсіз болса, сіз қате дананы немесе қате маршрутты өзгерттіңіз, ал келесі қадам — басқа нәрсені қайта іске қосу емес, бірлікті қайта оқу.