Sa isang sandali ang laptop ay nasa Wi-Fi ng opisina, sa susunod na sandali ito ay nakakabit sa telepono, at berde na muli ang indicator ng tunnel bago mo pa matapos magpalit ng mga bintana. Ang berdeng ilaw ay nag-uulat lamang na muling kumonekta ang tunnel; kung ano ang ginawa ng patakaran sa pagruruta at pagharang sa pagitan ay ibang tanong. Ang patakarang iyon ay isang hanay ng mga kundisyon sa pagtutugma na na-compile noong huling pag-install, at pinangalanan nito ang isang interface, isang address at isang pamilya ng address na tinanggal lang ng paglipat. Kaya ang parehong paglipat ay gumagawa ng tatlong kinalabasan na magkamukha: nagpapatuloy ang pagharang, hinaharangan ng patakaran ang sarili nitong pagbawi, o bumubukas ang isang landas na walang sumasaklaw.

Walang anuman sa screen ang naghihiwalay sa tatlong estadong iyon, kaya itanong kung aling mga identifier ang ikinabit ng mga patakaran sa halip na kung anong kulay ang ipinapakita ng indicator. Sa Linux, ang isang patakaran ay maaaring magpangalan ng isang interface o ng ipset na pinunan mula rito; sa Android, ang isang VpnService ay masasabihan kung aling mga underlying network ang susundan sa pamamagitan ng setUnderlyingNetworks. Ang bawat pagkakabit ay tumuturo sa isang link na malapit nang palitan, at bawat isa ay kailangang muling suriin pagkatapos.

Ano ang tunay na muling isinusulat ng paglipat

Kapag nawala ang lumang link, tinatanggal ng kernel ang mga address nito, binabawi ang mga rutang dumaan dito, at muling binubuo ang pagpili ng source address mula sa natitira. Lumilipat ang default route sa bagong gateway, at ang interface index na tinutukoy ng lumang patakaran ay nawala na o muling ginamit para sa ibang device. Nire-refresh din ang mga resolver kada link, kahit hindi sa parehong sandali ng mga ruta. Nangyayari ang lahat ng ito sa ilalim ng VPN client, kaya ang client na sinusubaybayan lamang ang sariling estado ng tunnel ay walang nakikita rito.

Ang problema ay ang isang patakaran ay nagko-code ng tiyak na identifier sa halip na ang intensyon sa likod nito. Ang patakarang nagtatapon sa lahat ng hindi lumalabas sa interface ng tunnel ay nagko-code ng pangalan ng interface; ang patakarang pumapayag sa endpoint ay nagko-code ng address na maaaring iruta ng bagong network sa ibang lugar. Kapag nawala ang identifier, hindi nagiging mali ang patakaran sa paningin: tumitigil itong tumugma sa anuman o nagsisimulang tumugma sa maling bagay.

Muling itayo ang panlabas na tunnel nang hindi binubutas

Ang panlabas na transport ay nakatali sa lumang source address, kaya kailangan nitong magbukas ng bagong socket mula sa bago. Kapag ang endpoint ay hostname at hindi literal na address, dapat magtagumpay ang paghahanap habang may bisa pa ang pagharang. Ito ang bitag ng pagkakasunod-sunod: ang patakarang sapat ang kahigpitan para itapon ang lahat maliban sa endpoint ay itatapon din ang paghahanap na kailangan upang mahanap ito, maliban kung maganap ang resolution bago itaas ang pagharang o maihatid ito sa isang tunnel na buhay pa. Maaaring gumana ang alinmang pagkakasunod-sunod, ngunit kung alam lamang ng client kung alin ang kinalalagyan nito.

Nagkakaiba ang mga client dito sa paraang mahalaga kapag nag-diagnose. Ang iba ay nagre-resolve muna at pagkatapos ay nag-i-install ng mga patakaran, kaya ang paglipat ay may nakikitang pagkagambala at pagkatapos ay kusang bumabangon; ang iba ay pinapanatili ang pagharang at umaasa sa natirang tunnel upang magdala ng paghahanap, na ganap na nabibigo kapag namatay ang tunnel kasama ng link. Ang pagdaragdag ng malawak na direktang default route upang maibalik ang konektibidad ay laging nagpapasa sa pagsubok at laging nag-iiwan ng pagtagas na pinipigilan mo.

Ang rutang tumuturo pa rin sa lumang gateway ay nagbibigay ng parehong sumasandal na pagbawi mula sa ibang dahilan, kaya basahin ang talahanayan bago sisihin ang client. Pinangalanan ng mga utos sa ibaba ang interface at source address na talagang gagamitin ng kernel, at iyon ang nagpapasya sa isang linya kung naka-install pa ang lumang landas.

ip route get 1.1.1.1
ip -6 route get 2606:4700:4700::1111

Kapag nagdala ng IPv6 ang bagong link at ang mga patakaran ay hindi

Ang mga selular at guest network ay madalas magbigay ng pandaigdigang IPv6 prefix kahit na ang wired LAN ng opisina ay hindi kailanman gumawa nito. Ang patakarang isinulat lamang bilang mga patakaran sa IPv4, ang default na anyo ng karamihan sa mga gawang-kamay na recipe ng iptables at nftables, ay walang sinasaklaw nito. Nananatiling konektado ang tunnel, lumalabas sa labas nito ang mga application na may maabot na IPv6, at hindi maipakita ng indicator ang pagkakaiba dahil totoong buhay ang tunnel. Ang salamin na kaso ay kasingkaraniwan: ang hanay ng patakaran para lamang sa IPv6 ay walang ginagawa sa network na hindi nag-aalok ng v6.

Ihambing ang iniaalok ng link sa binabanggit ng patakaran, sa magkabilang panig ng paglipat. Ito ang mga utos na naglilimbag ng parehong mga katotohanang ginagamit ng client:

ip -4 route show default
ip -6 route show default
sudo nft list ruleset | grep -c 'ip6 '

Kung ang ikalawang utos ay naglilimbag ng default route habang ang ikatlo ay nagbabalik ng zero, maaaring ilabas ng bagong link ang makina sa labas sa pamamagitan ng IPv6 na walang patakarang nagmamatyag. Patakbuhin muli ang tatlo pagkatapos ng paglipat, dahil ang kawili-wiling numero ay ang pagkakaiba ng dalawang pagtakbo. Kung ang ikalawa ay walang nililimbag, ang kabaligtarang kaso ang umiiral at anumang patakarang mabigat sa v6 doon ay palamuti lamang.

Nagpapalit ng kamay ang resolver sa gitna ng sesyon

Sa mga modernong sistema, ang mga resolver ay nakakabit sa mga link, kaya ang bagong link ay dumarating na may bagong hanay ng resolver at marahil ibang pananaw sa split-DNS. Ang systemd-resolved ay may isang scope kada link at pumipili sa pagitan ng mga ito ayon sa ruta, samantalang ang macOS ay nagbabasa ng scoped resolver mula sa dynamic na tindahan at gumagalang sa pagkakasunod-sunod ng interface. Ang client na nag-i-install ng sariling resolver ay nakikipag-agawan sa resolver ng link, at ang mga patakaran sa priyoridad na walang nagmamatyag ang nagpapasya ng panalo. Kung gayon, maaaring masira ang paglutas ng pangalan habang ang pagsasala ng packet ay ginagawa nang tumpak ang inilarawan para dito.

Basahin ang resolver na aktibo at hindi ang naka-configure. Sa isang host na systemd, ipinapakita ng subcommand na status kung saang link nagmula ang bawat scope at kung may bisa ang isang pangalang private-DNS:

resolvectl status --no-pager
resolvectl query intranet.example.com

Kung ang query ay lumalabas sa pisikal na link at hindi sa tunnel, natalo ang client sa agawan ng priyoridad at walang pagsasaayos ng firewall ang makakapag-ayos ng pagpapangalan. Ihambing ang landas ng query sa magkabilang panig ng paglipat upang makita kung alin ang gumalaw. Ang pangalang nagre-resolve sa isang pribadong address na hindi kayang iruta ng bagong network ay ikatlong kaso, at lumilitaw ito bilang timeout at hindi bilang error.

Sanayin ang paglipat at itago ang talaan

Sadyaing muling gawin ang pagbabago sa halip na hintayin ito. Itaas ang tunnel sa unang link, simulan ang isang mahabang paglilipat at paulit-ulit na paghahanap, pagkatapos ay palitan ang link at tingnan kung alin ang nabubuhay. Itala ang agwat ng pagkawala ng lumang link at ng pag-uulat ng tunnel na konektado ito, dahil sa bintanang iyon nanindigan ang patakaran o hindi. Patakbuhin din ang pagkakasunod-sunod sa kabilang direksyon, upang ang resulta ay hindi maging isang panig.

Ang mga exception ay kailangan ng sariling pagdaraan, dahil ang bypass na makatuwiran sa lumang network ay hindi awtomatikong makatuwiran sa bago. Ang printer, NAS o captive portal sa LAN ng bahay ay walang katumbas sa cellular, at ang exception na nakakarating sa kanila ay nagiging patakarang walang katumbas.

Itala ang mga pangalan ng interface, ang mga pamilyang iniaalok, ang gumaganang resolver at ang haba ng pagkagambala para sa bawat direksyon. Ang muling pagkonekta ay nagpapatunay na bumangon ang transport, hindi na nanindigan ang pagharang sa pagitan, at magkahiwalay na pahayag iyon para sa isang ticket. Sa talaang iyon, ang susunod na paglipat ay ihahambing sa isang kilalang estado at hindi sa alaala.

Kaugnay na mga artikulo