Дадатковыя маршруты Mac VPN патрабуюць уладальніка, а не скрыпта ўваходу
Маршрут, дададзены аднойчы пры ўваходзе, не з'яўляецца палітыкай перападключэння. Дайце далёкім прэфіксам уладальніка і вырашыце, як яны з'яўляюцца, змяняюцца і знікаюць разам з гэтым злучэннем.
Дасягненне прыватнага прэфікса праз VPN — гэта патрабаванне з працягласцю: яно дзейнічае, пакуль гэта злучэнне прыдатнае, і сканчаецца разам са злучэннем. Скрыпт уваходу не можа гэтага выказаць, бо ўваход і ўзняцце тунэля — розныя моманты, і тунэль, які існуе пры ўваходзе, можа не быць тым, што праз хвіліну нясе трафік. Першае рашэнне — не які загад выканаць. Гэта пытанне, які кампанент валодае прэфіксам.
Прэфіксу патрэбны ўладальнік, а не момант
Пачніце з таго, што запішаце патрабаванне як сказ з дзейнікам: дасягніце 10.77.0.0/24 праз офісны VPN, пакуль гэта злучэнне ўзнятае. Гэты сказ называе прэфікс, злучэнне і ўмову, і ён адразу адхіляе два папулярныя заменнікі: хук уваходу і назву інтэрфейса, такую як ppp0 або utun2.
Назвы інтэрфейсаў прызначаюцца ў час выканання і не стабільныя паміж перападключэннямі. Хук, які супастаўляе назву, убачаную на мінулым тыдні, або не спрацуе, або спрацуе супраць чужога інтэрфейса. Абодва вынікі выглядаюць як памылка маршрутызацыі, а не як састарэлае дапушчэнне, якім яны з'яўляюцца. Тое ж пярэчанне датычыцца любога скрыпта, прывязанага да назвы, якая існуе толькі пакуль узняты пэўны тунэль.
Выкарыстоўвайце падтрыманую крыніцу намеру маршруту
Шлюз, кіраваны профіль або дакументаваны механізм маршрутызацыі кліента-ўладальніка — вось дзе гэта месца, калі такі механізм можа выказаць патрабаванне. Які з іх прымяняецца, залежыць ад пратакола і пастаўшчыка, і ключы не пераносяцца паміж імі, таму значэнне, якое наладжвае профіль OpenVPN нічога не кажа пра родны кліент L2TP або IKEv2.
| Mechanism | Can carry extra prefixes | Who owns the lifetime |
|---|---|---|
| Gateway-pushed routes | Often, if the gateway is configured for it | The connection |
| Managed profile settings | Depends on the client and profile format | The profile |
| Provider tunnel settings | Yes, as included and excluded routes | The provider process |
| Manual command | Yes, once | Nobody |
Для распрацоўшчыкаў пакетных тунэляў налады тунэля IPv4 ад Apple явна паказваюць уключаныя і выключаныя маршруты, і IPv6 мае свой адпаведнік. Гэта API, якія выкарыстоўвае пастаўшчык, а не доказ таго, што кожная родная панэль VPN прапануе адміністратару адвольны спіс маршрутаў. Калі бягучая камбінацыя не можа выказаць патрэбныя прэфіксы, наступны крок — падтрыманы шлях наладкі ад аператара, а не іншая праграма, усталяваная ў надзеі, што яна паводзіць сябе лепш.
Тэрмін службы ўключае прыборку
Часам знешні памочнік сапраўды патрэбны, і тады «дадайце маршрут» — самая дробная частка яго працы. Ён мусіць ведаць, якому злучэнню ён служыць і які інтэрфейс выкарыстоўвае гэта злучэнне, дачакацца, пакуль адпаведны стан сеткі ўсталюецца, заставацца ідэмпатэнтным пры двух запусках запар, і нічога не прыбіраць таго, што ён сам не ўсталяваў.
Апошняя ўмова — самая балючая. Памочнік, які выдаляе кожны маршрут, што адпавядае офіснаму прэфіксу, раней ці пазней выдаліць маршрут, які ён не дадаваў. Выніковая аварыя спішацца на кліент VPN, бо кліент — гэта тое, што бачыць карыстальнік. Вызначыць, чым валодае памочнік, да напісання танчэй, чым потым тлумачыць, чаму лакальная падсетка перастала адказваць.
Гонка перападключэння
Уявіце хуткае перападключэнне. Сеанс A падае, сеанс B уздымаецца і ўсталёўвае свой маршрут, а потым нарэшце запускаецца адкладзеная прыборка A. Калі гэтая прыборка выдаляе маршруты па прэфіксе, яна забірае з сабой сапраўдны стан B, і злучэнне, якое працавала секунду таму, цяпер маршрутызуецца ў нікуды.
Гэта гонка ўладання, і даданне паузы ў скрыпт змяняе толькі тое, які бок яе выйграе. Рашэнне — зрабіць прыборку ўмоўнай ад ідэнтычнасці: параўнайце інтэрфейс і сеанс, якія ўсталяваў памочнік, з тымі, што яшчэ актуальныя, і выдаляйце толькі пры супадзенні.
Што тэсціраваць і чаго маршрут не можа
Прыёмка мусіць пакрываць чатыры пераходы: першае злучэнне, перападключэнне на іншы інтэрфейс, няўдалую спробу злучэння і канчатковае адключэнне. Пасля кожнага чытайце маршрут, які сістэма фактычна выбрала для адраса на далёкім баку, а не той, які вы чакалі.
route -n get 10.77.0.5
netstat -rn -f inet
Уключыце нязручныя выпадкі ў той жа праход: IPv6 там, дзе ён патрабуецца, лакальны прэфікс, які перакрывае далёкі, і маршрут да самога публічнага канцавога пункта VPN, які мусіць працаваць, пакуль узняты тунэль. Затым запішыце, чым маршрут не з'яўляецца. Ён выбірае пакеты; ён не дае дазволу на далёкім баку і не стварае зваротны шлях, і гэта застаецца асобнымі патрабаваннямі з асобнымі ўладальнікамі.
Жаданы вынік — гэта прэфікс, які ідзе за сваім падтрыманым уладальнікам злучэння праз кожны пераход, а не загад, які выпадкова аднойчы атрымаўся на машыне, дзе быў напісаны.