OpenVPN iroute және ядро маршруты: қайсысы жетіспейді?
Серверде маршрут бар, бірақ трафик тоқтайды. Жолдың бір шешімі ядроға, екіншісі әріптеске тиесілі; қайсысы жетіспейтінін және нені тексеру керектігін біліңіз.
10.77.20.0/24 үшін пакет OpenVPN серверінде екі бөлек шешім қабылдайды: операциялық жүйе оны VPN интерфейсіне беруі керек, ал OpenVPN қай қосылған клиенттің сол префикске ие екенін білуі керек. Ядро маршруты болмаса пакет туннельге дейін түсіп қалады, әріптес маршруты болмаса одан кейін түседі. Екі ақау да алыс LAN-нан бірдей көрінеді, және қайсысы сізде екенін диагностикалау үшін әр жақта бір команда керек.
Классикалық пайдаланушы кеңістігіндегі деректер жолында ядро маршруты пакетті туннель процесіне жеткізеді, ал iroute сол процеске оны қай әріптес қабылдауы керектігін айтады. Ешқайсысы екіншісін алмастырмайды, және тек біреуін ғана қамтитын конфигурация бірінші ping-ге дейін орынды көрінеді.
Екі шешім, бір маршрут емес
Аумақаралық байланысты елестетіңіз, онда 10.77.20.0/24 бір клиенттің артында тұр. Сервердің ядро маршруты, мысалы ip route add 10.77.20.0/24 dev tun0, сәйкес пакеттерді туннель құрылғысына жібереді. Содан кейін OpenVPN клиент конфигурация каталогындағы iroute жазбаларынан құрылған өзінің ішкі кестесін қарап, оларды қай әріптес қосылымы алатынын шешеді. Ядро маршруты болмаса пакет процеске ешқашан жетпейді, ал әріптес маршруты болмаса ол процеске жетеді де, ешқайда бармайды.
Бұл бөліністі ұмыту оңай, өйткені клиент профиліндегі бір маршрут жолы екі жұмысты да атқаратын сияқты көрінеді. Олай емес: маршрутты итеру клиенттерге туннель арқылы нені жіберу керектігін айтады, ал iroute серверге клиенттің артындағы мекенжай ауқымы кімге тиесілі екенін айтады. Олар әртүрлі файлдарда тұрады, әртүрлі жақтар оқиды және қарама-қарсы бағытта сәтсіз аяқталады.
iroute қайда тиесілі және ол не дейді
Жазба клиенттің common_name атауымен аталған жеке клиент файлына, client-config-dir астына, iroute 10.77.20.0/24 түрінде жазылады. Файл атауының сәйкестігі косметикалық емес: OpenVPN аутентификацияланған сәйкестікті іздейді және файлды дәл сол атаумен оқиды, сондықтан site-a деп аталған файл тек жалпы аты site-a болатын клиентке әсер етеді. Егер мұндай файлы жоқ клиенттерді толық қабылдамау керек болса, ccd-exclusive қосыңыз, бұл әр клиент аумақ қақпасы болғанда дұрыс параметр. Әр қақпаға бір файл ұстаңыз және оны шынымен беретін сертификат субъектісінің атымен атаңыз.
Алыс LAN-ды кінәламас бұрын жазбаны серверден тексеріңіз. Күй файлы қосылған клиенттерді олардың жалпы атауларымен тізімдейді, ал --verb 4-пен жұмыс істейтін сервер әріптес қосылған сәтте iroute орнатылғанын журналға жазады. Қосылу кезінде ештеңе көрінбесе, файл қате каталогта немесе қате сәйкестікті атап тұр.
Тұзақ: файл бар, сәйкестік қате
Дұрыс көрінетін, бірақ қате әріптеске байланған iroute жоқ файлдан гөрі көбірек уақыт жоғалтады, өйткені дискіде бәрі дұрыс көрінеді. Сертификаттарды қайта атау, қайталанатын жалпы атаулар және тиімді сәйкестікті өзгертетін username-as-common-name осының бәрін тудырады. Сервер қай сәйкестікті аутентификациялағанын тексеріңіз, өзіңіз күткенді емес: күй шығысы өкілетті, ал файл атауы тек іздеу кілті.
Маршрут өз иесінен де ұзақ өмір сүруі мүмкін. Статикалық маршруттар мен iroute жазбалары қолжетімділік кепілдігін емес, префиксті сипаттайды, сондықтан трафик қазір ажыратылған әріптеске қарай бағытталуын жалғастыруы мүмкін.
Жолды әріптестен әрі аяқтаңыз
Әріптеске иелік ету жолдың ортасы, соңы емес. Клиент пакеттерді туннельден өз LAN-ына жіберуі керек, бұл сол хостта IP жіберудің қосулы болуын және өтуге рұқсат беретін firewall ережесін білдіреді. Алыс LAN-дағы хосттарға туннель мекенжайы үшін қайту жолы керек: не қақпаға қарай бағытталған маршрут, не клиент жағында әдейі жасалған NAT. Дистрибутивтің әдепкі мәнін болжаудың орнына клиенттегі жіберу параметрін sysctl net.ipv4.ip_forward-пен растаңыз.
Егер басқа VPN клиенттері сол қосалқы желіге жетуі керек болса, құрылым тағы өседі: серверге client-to-client керек, ал бұл клиенттер префиксті туннель арқылы бағыттауы керек. Бұлардың ешқайсысы сервердің өз маршрут кестесінен туындамайды.
Бір тағайындалған жерді сервердің өзінен емес, нақты көзден тексеріңіз. Байланысы жоқ LAN хосттан клиенттің артындағы хостқа ping бір қимылда қайту жолын, жіберу ережесін және әріптеске иелікті сынайды, ал сәтті handshake тек сәйкестікті дәлелдейді. Содан кейін ие әріптесті ажыратып, маршруттың не істейтінін жазып алыңыз, өйткені сол жауап сіздің ақау режиміңіз.