Ноутбук Ethernet арқылы кеңсенің /24 желісінде отырады және сол /24 ішінде тұратын OpenVPN серверіне де қосылады. Әріптес туннель мекенжайына ping жібереді; сұраныс анық жетеді, бірақ ештеңе қайтпайды. Туннель журналы таза және шолу әлі жұмыс істейді, сондықтан туннель дұрыс емес күдікті. Қабылдаушы машинадағы IPv4 көзін тексеру пакетті бірдеңе оқымай тұрып тастайды.

Тастау пакетті бірдеңе оқымай тұрып болады

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

Мұндағы клиент өз туннелінде 10.66.0.9 ұстайды, ал OpenVPN сервері кеңсе префиксінің ішіндегі 192.168.80.10 мекенжайынан жауап береді. 192.168.80.25 мекенжайындағы әріптес туннель мекенжайына ping жібереді, сондықтан сұраныс жергілікті желіден өтеді, сервер оны туннельге бағыттайды және ол кеңсенің көз мекенжайын көтеріп клиенттің туннель интерфейсіне жетеді. Сол машинаның маршруттау кестесінде кеңсе префиксі Ethernet құрылғысына тиесілі, туннельге емес. Тексеру келу интерфейсін маршрутпен салыстырады, сәйкессіздік табады және пакетті тастайды, сондықтан әріптес толық шығынды көреді, ал екі ұшы сау туннель туралы хабарлайды.

Айна бағытының пішіні бірдей: клиент кеңсеге қарай бастағанда, жауаптар кеңсе жағында дәл сол себептен тасталуы мүмкін. Тек бір бағытта тексерілген түзету әдетте екінші билет болып қайтады.

Кез келген sysctl-ге тиіспес бұрын қолданыстағы режимді дәлелдеңіз

Таралымның әдепкі мәніне сенудің орнына нақты мәндерді оқыңыз, өйткені интерфейс бойынша параметр шешімнің жартысы ғана. Қолданыстағы режим интерфейс мәні мен all мәнінің үлкені, сондықтан туннель интерфейсіндегі нөл all бір болғанша ештеңе білдірмейді. Қатаң режимнің шешімі маршруттау шешімі, сондықтан ядро орындайтын іздеуді орындап, оның жауабын пакет шын мәнінде келген интерфейспен салыстырыңыз.

tcpdump -ni tun0 icmp and host 192.168.80.25
ip route get 192.168.80.25
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.tun0.rp_filter

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

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

Әр rp_filter режимі шын мәнінде нені қабылдайды

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

ValueNameAcceptsStill rejects
0offany source at allnothing on this check
1stricta source routed back out the arrival interfacea source whose route points elsewhere
2loosea source with any route in the tablea source with no route at all

Мұнда маңызды жол — бос жол және оның әлі де қабылдамайтыны. Кестеңіздің кез келген жерінде маршрутталатын жалған көз өтеді, ал мүлде маршруты жоқ көз әлі де қабылданбайды. Ноутбукта бұл тар жеңілдік; басқалардың трафигін жіберетін маршрутизаторда ол кең. Режим хостқа тиесілі, сондықтан бірдей сан екі жерде түрлі салмақ тартады.

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

Белгісіздікті жоятын ең кіші өзгерісті таңдаңыз

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

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

Қай жолды таңдасаңыз да, оны тірі командаға емес, sysctl drop-in файлына жазыңыз. all және default кілттерін бірге орнатыңыз, қайта қосылу қатаң режимді үнсіз қалпына келтіре алмасын.

# /etc/sysctl.d/99-rp-filter.conf
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
sysctl --system

Бос режим неден бас тартады, және қайда

Бос режим ешбір маршрут жете алмайтын көзді әлі де қабылдамайды және кездейсоқ маршрутталатын жалған көзді қабылдамауды тоқтатады. Ноутбукта бұл тар жеңілдік. Өзіне тиесілі емес трафикті жіберетін құрылғыда дәл сол таңдау әлдеқайда кең. Сондықтан бір параметр қай жерде жұмыс істеуіне қарай екі мүлде басқа мағына тартады.

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

Екі интерфейсті, қабаттасатын префиксті және қазір сәтті болатын нақты сынақты атайтын жазба қалдырыңыз. Бұл келесі инженер үшін сүзгілеу реттелді деген жолдан гөрі пайдалырақ.

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