Хабарлама шығатын жерден бастаңыз. Клиент қосылады, туннель көтеріледі, содан кейін журнал Linux-тың маршрут қосу командасы File exists-мен сәтсіз аяқталғанын хабарлайды. Бұл сөйлемде сертификатқа, кілтке немесе конфигурация файлына қатысты ештеңе жоқ, бірақ сөздер солай меңзейді. Ядро өзінің маршрут кестесін сипаттап жатыр, ал сіз орнатуды сұраған префикстің жазбасы әлдеқашан бар.

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

Клиент шын мәнінде нені сұраған

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

journalctl -u openvpn-client@office -b --no-pager | grep -nE 'route|File exists'
openvpn --config /etc/openvpn/client/office.ovpn --verb 4 --log /tmp/ovpn.log

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

Бар маршрутты оқыңыз, тек мекенжайды емес

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

ip -4 route show table all | grep -F '10.40.'
ip -4 route show match 10.40.0.0/16
ip -4 route get 10.40.0.5

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

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

Префикстің болуы мүмкін төрт иесі

Қосылған маршруттар тағайындалған мекенжайдан келеді және сол мекенжай бар болған сайын жүйе оларды қайта жасайды. DHCP клиенті немесе қосылым менеджері маршруттарды өз өмірлік циклінің бөлігі ретінде орнатады. Басқа VPN клиенті сол префиксті әлдеқашан алып жүруі мүмкін. Ал жергілікті ілгек немесе скрипт басқа ешнәрсе білмейтін маршрутты қосуы мүмкін.

Әр иесі басқа түзетуді қажет етеді. Қосылған маршрутты сіз жоя алмайсыз; оны жою туннель пайдалануға жарамды болмай тұрып жергілікті қолжетімділікті бұзуы мүмкін, ал ядро оны қайтарады. Менеджерге тиесілі маршрутты сол менеджер арқылы өзгерту керек, келесі қайта қосылу жоятын қолмен жасалған ip route del-пен емес.

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

block-local басқа сұраққа жауап береді

Профиль барлық трафикті туннель арқылы жібергенде, клиент жергілікті желімен не болатынын шешуі керек. block-local жалаушасы жергілікті LAN-ды туннель арқылы бағыттау арқылы бұл шешімді өзгертеді, сонымен бірге LAN шлюзі үшін құжатталған ерекшелікті сақтайды; бұл қолжетімділікке көрінетін салдары бар трафик саясатының таңдауы.

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

Оны қай мақсаттар жергілікті болып қалатыны туралы әдейі қабылданған және жазылған шешім ретінде қарастырыңыз. Журнал алаңдатарлық көрінгенде сынап көретін ажыратқыш емес.

Циклді жабыңыз: қайталауды оның көзінен жойыңыз

Жазбаны қай иесі ұстап тұрғанын білген соң, қайталанған нұсқауды ол анықталған жерден жойыңыз. Бұл профильдегі route жолы, серверден келген push немесе енді іске қосудың қажеті жоқ ілгек болуы мүмкін.

ip -4 route show match 10.40.0.0/16
ip -4 route get 10.40.0.5
journalctl -u openvpn-client@office -b --no-pager | tail -n 15

Содан кейін қайта қосылып, үш нәрсені растаңыз: туннель көтеріледі, көзделген мақсат өзіңіз қалаған жолға шешіледі, және сәтсіздік жойылып, оның орнына жаңасы шықпайды. Дұрыс таңдалмаған жолмен таза журнал — жөндеу емес.

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

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