Достизање приватног префикса преко VPN-а је захтев са трајањем: важи док је та веза употребљива и завршава се када се веза заврши. Скрипта за пријаву не може то да изрази, јер су пријава и подизање тунела различити тренуци, а тунел који постоји при пријави можда није онај који минуту касније носи саобраћај. Прва одлука није коју команду извршити. Већ који компонент поседује префикс.

Префиксу треба власник, а не тренутак

Почните тако што ћете захтев написати као реченицу са субјектом: достигните 10.77.0.0/24 преко канцеларијског VPN-а док је та веза подигнута. Та реченица именује префикс, везу и услов, и одмах искључује две популарне замене: куку за пријаву и назив интерфејса као што је ppp0 или utun2.

Називи интерфејса додељују се у време извршавања и нису стабилни између поновних повезивања. Кука која се поклапа са називом виђеним прошле недеље или неће активирати, или ће се активирати на туђем интерфејсу. Оба исхода изгледају као грешка у рутирању, а не као застарела претпоставка која јесу. Исти приговор важи за сваку скрипту везану за назив који постоји само док је подигнут један конкретан тунел.

Користите подржани извор намере руте

Гејтвеј, управљани профил или документовани механизам рута клијента власника је право место, када тај механизам може да изрази захтев. Који се примењује зависи од протокола и добављача, а кључеви не путују између њих, па вредност која конфигурише профил OpenVPN ништа не говори о изворном L2TP или IKEv2 клијенту.

MechanismCan carry extra prefixesWho owns the lifetime
Gateway-pushed routesOften, if the gateway is configured for itThe connection
Managed profile settingsDepends on the client and profile formatThe profile
Provider tunnel settingsYes, as included and excluded routesThe provider process
Manual commandYes, onceNobody

За програмере пакетних тунела, Apple-ове IPv4 поставке тунела експлицитно излажу укључене и искључене руте, а IPv6 има свој пандан. То су API-ји које добављач користи, а не доказ да сваки изворни VPN панел нуди администратору произвољну листу рута. Ако тренутна комбинација не може да изрази потребне префиксе, следећи корак је подржани пут конфигурације од оператера, а не друга апликација инсталирана у нади да ће се понашати боље.

Животни век укључује чишћење

Понекад је спољни помоћник заиста потребан, и тада је „додај руту“ најмањи део његовог посла. Мора да зна којој вези служи и који интерфејс та веза користи, да сачека да се релевантно стање мреже смири, да остане идемпотентан када се покрене двапут заредом, и да не чисти ништа што сам није инсталирао.

Последња клаузула је она која боли. Помоћник који брише сваку руту која одговара канцеларијском префиксу пре или касније ће обрисати руту коју није додао. Настали прекид се приписује VPN клијенту, јер је клијент део који корисник види. Одлучити шта помоћник поседује пре него што га напишете јефтиније је од накнадног објашњавања зашто је локална подмрежа престала да одговара.

Трка при поновном повезивању

Замислите брзо поновно повезивање. Сесија A пада, сесија B се подиже и инсталира своју руту, а затим се коначно изврши A-ово одложено чишћење. Ако то чишћење уклања руте по префиксу, односи са собом важеће стање B, и веза која је радила пре секунду сада рутира у ништа.

Ово је трка за власништво, и додавање сна у скрипту мења само која страна је добија. Решење је да се чишћење условљава идентитетом: упоредите интерфејс и сесију које је помоћник инсталирао са онима које су још важеће, и уклоните само при поклапању.

Шта тестирати и шта рута не може

Прихватање мора да покрије четири прелаза: прву везу, поновно повезивање на други интерфејс, неуспешан покушај повезивања и коначно искључивање. После сваког од њих прочитајте руту коју је систем стварно изабрао за адресу на даљој страни, а не ону коју сте очекивали.

route -n get 10.77.0.5
netstat -rn -f inet

Укључите и незгодне случајеве у исти круг: IPv6 тамо где је потребан, локални префикс који се преклапа са даљим, и руту до самог јавног VPN крајње тачке, која мора да настави да ради док је тунел подигнут. Затим запишите шта рута није. Она бира пакете; не даје дозволу на даљој страни и не ствара повратни пут, и то остају одвојени захтеви са одвојеним власницима.

Резултат који желите је префикс који прати свог подржаног власника везе кроз сваки прелаз, а не команда која је случајно једном успела на машини где је написана.

Повезани чланци