Әдеттегі циклден қорғау — хост маршруты: VPN серверінің жария мекенжайына трафикті upstream арқылы жіберіңіз, осылайша шифрланған сессия өз туннеліне ешқашан кірмейді. Бұл дәл сол сервердегі веб-қызметке де туннель арқылы жеткіңіз келген сәтке дейін жұмыс істейді, өйткені ерекшелік баратын жерге байланған, ал баратын жер бірдей. Шығар жол — баратын жер бойынша жіктеуді тоқтатып, пакетті қай сокет жібергені бойынша жіктеуді бастау.

Бөлгіңіз келетін екі ағыннан бастаңыз

Бір ағын — шифрланған OpenVPN тасымалының өзі, ол upstream арқылы шығуы керек, әйтпесе туннель өзінің сыртқы қосылысын алып жүрер еді. Екіншісі — сол жария мекенжайға қарапайым HTTPS сұранысы, оны туннель ішінде қалайсыз, сонда ол қызметке туннель көзінен жетеді. Бірдей баратын жер, көп жағдайда бірдей порт нөмірі, басқа қажетті жол.

Бұл шолуда 10.90.0.10 мекенжайындағы клиентті tun1 арқылы, сервердің 198.51.100.25 жария мекенжайын және әдепкі маршруты кәдімгі upstream-ке сілтейтін тиіспеген негізгі кестені болжаңыз. Сервер жағы веб-қызметті ішкі жолда да қабылдап, трафикті туннель көзіне қайтаруы керек; жария мекенжайға пакет жіберу сервердің listener-ін немесе firewall саясатын жоймайды.

Бірдеңені өзгертуден бұрын хосттың ағымдағы ережелерін жазып алып, басқа ешкім қолданбайтын мәндерді таңдаңыз: таңба, кесте нөмірі және үш ереже басымдығы. Машинаға осы қосылыс арқылы өтпейтін қайту жолын сақтаңыз, өйткені бұл жердегі қате браузер қойындысын бұзу емес, өз қашықтағы қатынауыңызды жояды.

Конвертті таситын сокетті таңбалаңыз

Клиент конфигурациясы өзінің шифрланған шығыс пакеттері үшін таңба алады және маршруттарды өзі орнатуды тоқтатады, сондықтан ауыстыру саясаты жолдарды анықтайтын жалғыз нәрсе болады:

mark 42
route-noexec
disable-dco

Ондық 42 — он алтылық 0x2a, және маршруттау ережелері сәйкестендіретін дәл осы он алтылық пішін. link-options анықтамасы mark-ты Linux-те шифрланған шығыс пакеттерге қолданылатын нәрсе деп сипаттайды, яғни жолын басқару қажет сокеттің дәл өзі. Деректер арнасының разгрузкасын өшіру бұл мысалды пайдаланушы кеңістігі жолында ұстайды, онда таңба мінез-құлқы сипатталған күйінде болады.

route-noexec OpenVPN-нің маршруттарды автоматты қосуы мен жоюын басады. Олардың орнына ештеңе орнатпайды, сондықтан осы сәттен бастап маршрут иесі туннельге қажет әрбір маршрутты ұстауы керек. Егер өзгерістен кейін жеке баратын жер жойылса, бұл жетіспейтін ауыстыру саясаты, таңбаның ақауы емес.

Мұны жасап жатқанда 198.51.100.25 үшін негізгі кестеде хост маршрутын ұстамаңыз. Мұндай маршрут жоба тарылтуға тырысатын дәл сол ерекшелікті қайта енгізеді және HTTPS ағыны үшін төмендегі саясаттардың кез келгені сұралмай тұрып жеңеді.

Қалғанының бәрін туннель кестесіне жіберіңіз

Туннель интерфейсі пайда болып, өз мекенжайын ұстаған соң саясат былай көрінеді:

ip -4 route add default dev tun1 src 10.90.0.10 table 47100
ip -4 rule add priority 20000 lookup main suppress_prefixlength 0
ip -4 rule add priority 20001 not fwmark 0x2a lookup 47100
ip -4 rule add priority 20002 not fwmark 0x2a unreachable

Бірінші ереже хосттың нақты маршруттарын көрінетін күйде ұстайды, оның ішінде кез келген мақұлданған жергілікті желі, ал негізгі кестенің әдепкі маршрутын осы іздеу үшін көрінбейтін етеді. Бұл айырмашылық маңызды: әдепкі маршрутты басу кестені елемеумен бірдей емес, ал сізге әлі қажет жергілікті ерекшеліктер дәл сол себепті сақталады. Сол ерекшеліктерді бір-бірлеп оқыңыз, нәтиже әмбебап авариялық сөндіргіш деп болжамаңыз.

Таңбаланбаған трафик содан кейін туннель кестесіне түседі, туннель көзін алады және VPN арқылы шығады. Таңбаланған трафик келесі екі ережедегі fwmark тексерісінен өтпейді және тізімде төменірек тұрған кәдімгі негізгі іздеуге жалғасады, онда upstream-тің әдепкі маршруты әлі де бар. Соңғы unreachable ережесі — туннель маршруты жетпегенде таңбаланбаған ағынның upstream-ке тыныш құлап кетуіне жол бермейтін нәрсе. Селектор — басынан аяғына дейін таңба, ал баратын жердің мекенжайы шешімге ешқашан кірмейді.

Осы қорғанысты қайта қосылулар арасында орнында ұстаңыз және оны саясаттың қалғанымен бірге орнатыңыз, қолмен емес. Интерфейспен бірге жойылатын ереже — саясат емес, кездейсоқтық. Туннель құлағанда саясатты жою сәтсіздік режимін «бұғатталғаннан» «ағып кеткенге» ауыстырады, ал кейінірек мерзімі бітетін ескірген туннель маршрутын түсіндіру дұрыс емес интерфейстен шыққан трафикке қарағанда әлдеқайда оңай.

Қайту жолы сол таңбаны көрсін

Шығыс таңбалары — механизмнің жартысы ғана, және бұл көптеген қайта жаңғыртулар жіберіп алатын бөлік. Шифрланған сессияға жауаптар upstream арқылы келеді және кері жолды тексеруге жатады, ол көздің келген жолымен кері маршрутталатынын сұрайды. Көмек жоқта бұл іздеу сіздің таңбаланбаған туннель саясатыңызды қолданып, пакет дұрыс емес интерфейсте деп қорытындылайды.

Түзету firewall иесіне тиесілі: таңбаны шығыс қосылыста сақтаңыз, оны сәйкес кіріс пакеттерде қалпына келтіріңіз және тиісті жол үшін көзбен расталған таңба өңдеуін қосыңыз. OpenVPN-нің сокет таңбасын қоюы осы үш нәрсенің ешқайсысын жасамайды, ал тек клиент опцияларын тізіп шығатын рецепт толық емес. Осы интеграцияны жазбаша сұраңыз, өйткені бұл жобаның ең көрінбейтін бөлігі және қайта құру кезінде ең оңай жоғалатын бөлігі.

Кері жолды еркін тексеру де алмастырғыш емес. Еркін режим көз үшін қандай да бір маршруттың болуын талап етеді, ал сіз қосқан unreachable қорғанысы таңбаланбаған іздеулер үшін оны әдейі алып тастайды. Осы жобаға сүйенбес бұрын қосылыс таңбасының интеграциясын аяқтап, қарап шығыңыз, және хост сүзгілерін бөлек мәселе ретінде қарастырыңыз: таңба — маршруттау сигналы, рұқсат емес. Интеграция болмаса, симптом — қосылым орнап, жауаптар келе бастағанда үнсіз қалатын сессия.

Мұны екі маршрут іздеуімен дәлелдеңіз

Ядро екі контекст үшін нені шешетінін салыстырыңыз және шығу күйін емес, dev және src өрістерін оқыңыз:

ip -4 route get 198.51.100.25
ip -4 route get 198.51.100.25 mark 0x2a

Бірінші іздеу туннель көзімен tun1-ге, ал екіншісі upstream-ке шешілуі керек. Бұл синтетикалық іздеулер, сондықтан олар саясатты дәлелдейді, жұмыс істеп тұрған процесті емес: жұмыс істеп тұрған клиенттің нақты тасымал жолын бөлек растаңыз, содан кейін сертификат тексеруі қосулы нақты HTTPS сұранысын жасаңыз.

Дайын деп жарияламас бұрын жоба нені қамтымайтынын жазып қойыңыз. DNS, IPv6 және ережелердің өмірлік циклі әрқайсысы өз шешімін қажет етеді, ал бұл IPv4 маршруттау мысалы, толық құпиялылық конфигурациясы емес. Оның құндылығы — селектор: конверт upstream ерекшелігін алады, ал сол мекенжайдагы қарапайым қызмет оны мұралануға міндетті емес.

Қатысты мақалалар