Кліент VPN выдаляе дададзены маршрут? Выкарыстайце табліцу палітык
Кліент паўторна ўсталёўвае маршруты, якімі валодае, таму дададзены ўручную запіс знікае за секунды. Змясціце выключэнне ў табліцу палітык з прыярытэтам правіла, які перамагае.
Адзін /24 для лабараторнага прынтара знікае паміж двума выклікамі ip route show, а журнал кліента паведамляе толькі пра змену сеткі. З камандай, прэфіксам ці вашымі правамі ўсё было ў парадку. Карпаратыўны кліент, які валодае мадэллю маршрутызацыі хаста, паўторна ўсталёўвае гэтую мадэль, калі хтосьці іншы яе змяняе, таму дададзены вамі запіс выдаляецца як чужы. Змагацца з ім у той жа табліцы — гэта прайграшальная пазіцыя. Рашэнне — цалкам спыніць канкурэнцыю за гэтую табліцу і змясціць выключэнне туды, куды манітор ніколі не глядзіць.
Манітор тлумачыць зніклы маршрут
Пакажыце гэта перад тым, як нешта перарабляць: прачытайце табліцу, дадайце прэфікс, пачакайце некалькі секунд, прачытайце зноў. Калі запіс адсутнічае, а вы нічога не ўводзілі для яго выдалення, значыць, нехта назірае. Знайдзіце працэс, які ажыццяўляе гэтыя паводзіны, і прачытайце яго журнал вакол моманту знікнення маршруту, бо тая ж служба звычайна абслугоўвае тунель, фільтры пакетаў і канфігурацыю рэзалвера. Забіць яго, каб ваш маршрут застаўся, — гэта кампраміс, пра які вы пашкадуеце пры наступным перападлучэнні.
ip route show
ip route add 192.168.2.0/24 dev enp0s31f6
sleep 5; ip route showПрэфікс і інтэрфейс вышэй — гэта запаўняльнікі. Капіраванне назвы інтэрфейса з працоўнага прыкладу на іншай машыне — самая частая прычына таго, што гэтая дэманстрацыя наогул нічога не дае.
Другая табліца нябачная для манітора
Агент перабудоўвае толькі тую табліцу, якой валодае. Дайце выключэнню ўласную табліцу плюс правіла, якое накіроўвае туды адпаведныя прызначэнні, і галоўная табліца ніколі не зменіцца, таму агенту няма чаго выпраўляць. Уся ідэя ў гэтым: адна прастора імёнаў маршрутаў, якую падтрымлівае хтосьці іншы, і адна, да якой дакранаецеся толькі вы.
Кампраміс — гэта суправаджэнне. Два аб'екты могуць разыходзіцца, і месца правіла ў спісе мае такое ж значэнне, як і маршрут унутры табліцы, якую яно выбірае.
Пабудуйце выключэнне, потым зрабіце так, каб яно перамагло
Стварыце табліцу, усталюйце маршрут і дадайце правіла, якое выбірае гэтую табліцу для прызначэння. Прыярытэт вырашае, ці будзе ваша правіла разгледжана да ці пасля тых, што ўставіў кліент, а правіла, якое ідзе пазней, ніколі не дасягаецца, таму лік — частка дызайну, а не ўпрыгожанне. Затым спытайце ядро, што яно насамрэч зробіць, — гэта іншае пытанне, чым тое, што вы наладзілі.
ip rule add to 192.168.2.0/24 table 110 pref 30010
ip route add 192.168.2.0/24 dev enp0s31f6 table 110
ip route get 192.168.2.50ip route get вызначае маршрут, які выкарыстае ядро, уключаючы прыладу і адрас крыніцы. Ён не друкуе ідэнтыфікатар табліцы, таму спалучайце яго з ip rule show, калі трэба пацвердзіць, якая табліца перамагла. Разам яны адказваюць на адзінае важнае пытанне: ці пакідае трафік да гэтага адраса менавіта там, дзе вы хацелі?
Іншыя формы той жа ідэі
Узор абагульваецца, як толькі вы перастаеце думаць прызначэннямі. Лакальная падсетка можа заставацца дасягальнай, пакуль тунель трымае маршрут па змаўчанні. Адказы SSH-сервера, падключанага да лакальнай сеткі, могуць выходзіць праз інтэрфейс, праз які яны прыйшлі, замест таго каб знікаць у тунелі. А правіла на аснове інтэрфейса можа штурхаць усё, што прыходзіць на бесправадны інтэрфейс, у тунель, пакуль трафік, які стварае сам хаст, застаецца на Ethernet:
ip rule add iif wlan0 table 10
ip route add default dev tun0 table 10Апошні выпадак адпавядае ўваходнаму інтэрфейсу, а не прызначэнню, — гэта іншы тып правіла і іншая разумовая мадэль. Перанакіраваны трафік таксама патрабуе ўключанага net.ipv4.ip_forward, а далёкі бок павінен маршрутызаваць дыяпазон крыніцы назад або трансляваць яго; правіла на адной машыне ніколі не стварае другую палову шляху.
Стаўцеся да правіла як да часовага
Правілы і маршруты табліц жывуць у памяці. Пасля перападлучэння прылада тунелю можа атрымаць іншую назву, прызначаны адрас можа змяніцца, і правіла са старым значэннем моўчкі перастае адпавядаць. Паўторна прымяніце ўсю змену з аднаго скрыпта, які ёю валодае, затым пераправерце ip rule show, бягучую назву прылады і свежы ip route get супраць рэальнага прызначэння, перш чым давяраць выключэнню.
Дзве мяжы застаюцца пры любой акуратнасці. Кліент па-ранейшаму кантралюе свае ўласныя правілы фільтрацыі і канфігурацыю рэзалвера, і маршрутнае выключэнне не пераадольвае ні тое, ні другое. Калі кліент таксама выдаляе ваша правіла палітыкі, падтрыманыя шляхі — гэта яго ўласная палітыка раздзеленага тунелю або кліент, які дазваляе кіраваць маршрутамі, напрыклад OpenConnect; латанне бінарніка пастаўшчыка, каб заглушыць яго манітор, — гэта абавязацельства па суправаджэнні з праверкай цэласнасці.
Запішыце нумар табліцы, прыярытэт і прызначэнне ў нататку побач са скрыптам. Інакш наступны чалавек знойдзе правіла, якое пераўзыходзіць тунель, і не зможа даведацца чаму.