OpenVPN клиенті сервері сол хостта іске қосылғанда тоқтап қалады
Бір хосттағы екі OpenVPN данасы бір жергілікті порт пен бір маршруттау кестесі үшін таласады. Портты бекітіңіз, құрылғыларды ажыратыңыз және қай кесте жеңетінін тексеріңіз.
Менде қашықтағы сайттан туннель қабылдайтын және сонымен бірге жеткізуші желісіне қоңырау шалатын зертханалық машина болды. Шығыс профилі апталар бойы жұмыс істеген. Кіріс сервері қосылғаннан кейін шығыс қосылды да, бірнеше секунд ішінде трафикті өткізуді тоқтатты немесе мекенжай қолданыста деген қатемен іске қосылудан бас тартты. Конфигурация файлдары өзгерген жоқ; хост жай ғана порттар мен маршруттар туралы өз пікірі бар екінші OpenVPN процесін алды.
Ақау кездейсоқ емес және ол аутентификация мәселесі емес. Бір машинадағы екі демон бір жергілікті сокет пен бір маршруттау кестесі үшін бәсекелеседі, ал соңғы болып іске қосылған немесе қайта қосылған жеңеді. Осы екі қақтығыстың қайсысы сізде екенін білу алдымен қайда қарау керектігін анықтайды.
Симптомды кері оқыңыз
Туннель қашан өлетінінен бастаңыз. Іске қосу кезіндегі bind қатесі тыңдаушы жаққа нұсқайды: бірдеңе бұл портты әлдеқашан иеленген, және OpenVPN оны бөлісудің орнына іске қосылудан бас тартады. Көтеріліп, содан кейін үнсіз қалған туннель маршруттауға нұсқайды, өйткені екінші дана орнатқан маршрут сыртқы қосылыстың пакеттерін жолынан тартып кетуі мүмкін.
Екі жағдай да бірдей пайдаланушы шағымын тудырады, сондықтан қайталау циклдері мен қараушы скрипттер ештеңені түзетпейді. Олар клиентті сол қақтығысқа қайта қосады. Бірінші пайдалы сұрақ — трафик тоқтағанда процесс әлі жұмыс істеп тұр ма.
Әр данаға бір сокет және бір құрылғы
Тыңдайтын сервер өз портын байланыстырады; шығыс клиентке де инкапсуляцияланған трафигі үшін жергілікті порт қажет. Екеуі бір хостта тұрғанда, клиенттің әдепкі әрекеті сервер портымен қақтығысуы мүмкін. Клиенттің жергілікті портын бекітуге болады, ал серіктеске тіркелген бастапқы порт қажет болмаған жерде байланыстыруды өткізіп жіберуге болады:
lport 1195
nobind
dev tun1Бұл сандар мысалдар, талап емес. Маңыздысы — клиент сервер порты үшін бәсекелесуді тоқтатып, әр дана бөлек туннель құрылғысын алуы. tun0 құрылғысын бөлісетін екі демон, порттары әртүрлі болса да, бір-бірінің құрылғы күйін қайта жазады, сондықтан әр туннельге бір құрылғы міндетті.
nobind клиент жағына жатады. Сервер әлі де байланыстырып, тыңдауы керек, сондықтан жолды сервер конфигурациясына көшірмеңіз және серіктесі тіркелген бастапқы порт бойынша сүзетін клиентте байланыстыруды өшірмеңіз.
Әдепкі маршрутқа бір ие таңдаңыз
Әдепкі маршрутты тек бір қосылым орната алады. Егер екі профиль де барлық трафикті бағыттаса, екінші қосылым біріншісін үнсіз алмастырады, ал біріншісі бұзылғандай көрінеді. Не шығыс туннельді бөлінген күйде ұстап, тек жеткізуші префикстерін жіберіңіз, не оған бөлек маршруттау кестесін беріңіз.
ip rule add from 10.9.0.2 table 120
ip route add default dev tun1 table 120
ip route get 10.9.0.2Жоғарыдағы мекенжайлар мен кесте нөмірі толтырғыштар. Ережені қосқаннан кейін бірден VPN серверінің өз мекенжайы әлі де қалыпты кесте арқылы шешілетінін растаңыз; сыртқы тасымалды ұстап алатын кесте оны қорғауы керек болған туннельді бұзады, ал одан кейінгі қайта қосылу циклі сенімсіз провайдерге ұқсайды.
Қайта қосылулар мен қайта жүктеулерге төтеп беруі керек конфигурация үшін желілік аттар кеңістігі берік шекара болып табылады. Екінші клиент өз аттар кеңістігінде өз интерфейстері мен маршруттарымен жұмыс істейді, және шекарадан өтуі керек қызметтер ғана ашылады. Хост бір әдепкі маршрутты сақтайды, ал аттар кеңістігінің қайта қосылуы оны қайта жаза алмайды.
Күй жолымен емес, кестемен тексеріңіз
Қосылғанын хабарлаған клиент тек өз басқару арнасын дәлелдейді. Әр қосылыстың алдында және кейін маршруттау күйін жазып алыңыз, содан кейін ядродан нақты межелі қай құрылғыны пайдаланатынын сұраңыз:
ip route show
ip route get 10.40.0.20
ss -lunp | grep 1194Егер екінші туннель іске қосылғанда жеткізуші мекенжайы үшін таңдалған құрылғы өзгерсе, сізде маршрут қақтығысы бар. Егер екі процесс те бір жергілікті портта көрінсе, сізде сокет қақтығысы бар. Екіншісінсіз біріншісін түзету ақауды келесі қайта қосылуға ғана жылжытады.
Порттарды, құрылғыларды, кестелерді және маршрут иесін хосттың runbook-ына жазыңыз. Әйтпесе үшінші туннель қосатын келесі адам сол қақтығысты қайта ашады, ал жалғыз көрінетін дәлел — басқа біреудің демоны қайта жүктелмейінше жұмыс істейтін қосылым.