Як адправіць адно прызначэнне IPv4 па-за тунель OpenVPN
Адзіны маршрут да хоста праз net_gateway можа адправіць адзін адрас IPv4 у абыход тунеля OpenVPN. Праверце наступны хоп, абсяг DNS, IPv6 і любыя блакіроўкі кліента.
Большасць поўных тунельных канфігурацый адпраўляюць кожны пакет праз VPN, і менавіта дырэктыва redirect-gateway робіць гэта так. Адно прызначэнне ўсё яшчэ можна выключыць. Даданне маршруту да хоста для гэтага адраса з запаўняльнікам net_gateway паведамляе кліенту, што да яго трэба дабрацца праз першапачатковы шлюз машыны, а ўсё астатняе працягвае ісці праз тунель.
Радок выглядае бясшкодна і часта такім і з'яўляецца, але ён вырашае толькі адно пытанне: куды ідуць пакеты менавіта для гэтага адраса IPv4. Ён не змяняе DNS, IPv6, палітыку брандмаўэра або тое, які працэс адкрыў злучэнне, і кожнае з гэтага можа ціха знішчыць выключэнне.
Што насамрэч пазначае net_gateway
Запіс профілю для гэтага выключэння — адзін радок: route 198.51.100.77 255.255.255.255 net_gateway. Першы адрас — дакументацыйны запаўняльнік для прызначэння, маска робіць яго маршрутам да аднаго хоста, а апошні токен пазначае запаўняльнік шлюза. OpenVPN развязвае запаўняльнікі шлюза, калі ўсталёўвае маршруты. vpn_gateway азначае ўласны шлюз тунеля, гэта значыць далёкі бок злучэння VPN. net_gateway азначае шлюз па змаўчанні, які меў хост да таго, як VPN нешта змяніў; звычайна гэта лакальны роўтар у фізічнай сетцы.
Трэці запаўняльнік, remote_host, паказвае на адрас сервера VPN, і ён існуе, каб тунель мог дабрацца да сервера па фізічным шляху. Блытаніна гэтых трох — самая частая прычына таго, што выключэнне ідзе не туды або наогул не ўсталёўваецца.
Значэнне чытаецца ў момант падключэння, а не запісваецца ў файл. Калі машына пераязджае ў іншую сетку, шлюз, які быў да VPN, змяняецца, і маршрут ідзе за новым. Звычайна гэта тое, што вам патрэбна, але гэта таксама азначае, што паводзіны выключэння залежаць ад сеткі, з якой стартаваў кліент.
Чаму маршрут да хоста перамагае тунельны маршрут па змаўчанні
Маршрутызацыя вызначаецца найбольш дакладным супадаючым прэфіксам. redirect-gateway def1 звычайна не замяняе маршрут па змаўчанні; ён дадае дзве паловы — маршрут для ніжняй паловы адраснай прасторы і яшчэ адзін для верхняй, таму першапачатковы маршрут па змаўчанні захоўваецца для іншых патрэб. Гэтыя паловы шырэйшыя за адзін адрас.
Маршрут для аднаго адраса з маскай 255.255.255.255 — гэта /32, і гэта максімальная дакладнасць, якую дае IPv4. Калі ацэньваецца пакет для гэтага адраса, /32 супадае і перамагае незалежна ад таго, які маршрут быў усталяваны першым. Менавіта такі механізм стаіць за выключэннем, і ён працуе аднолькава на Linux, macOS і Windows, пакуль маршрут сапраўды прысутнічае.
Windows дадае другое вымярэнне. Калі два маршруты аднолькава дакладныя, перамагае той, у якога ніжэйшая метрыка, а VPN-адаптар можа несці метрыку інтэрфейса, якая змяняе вынік. /32 усё яшчэ больш дакладны за паловы, таму выключэнне звычайна трымаецца, але састарэлы маршрут з папярэдняй сесіі можа даць заблытаны вынік, калі ён аднолькава дакладны.
Што выключэнне не пакрывае
DNS — першая прагаліна. Кліент можа праштурхнуць унутраныя налады рэзалвера, і аперацыйная сістэма працягне выкарыстоўваць іх для запытаў. Праграма, якая развязвае імя перад падключэннем, можа атрымаць унутраны адрас для сэрвісу, які павінен ісці напрамую, або знешні адрас, які развязваецца правільна, але потым спатыкаецца на наступнай прагаліне.
IPv6 — другі. Дырэктыва маршруту апрацоўвае толькі IPv4. Прызначэнне з дзвюма стэкамі можа аддаць перавагу IPv6, які ідзе праз тунель або праз маршрут IPv6 па змаўчанні хоста ў залежнасці ад палітыкі, таму выключэнне IPv4 ніколі не ўступае ў сілу. Вам патрэбны адпаведны маршрут IPv6 або свядомае рашэнне адключыць IPv6 для гэтага кліента.
Абсяг праграм — трэці. Правіла заснавана на прызначэнні, таму кожны працэс, які падключаецца да гэтага адраса, выкарыстоўвае прамы шлях, той гэта працэс ці не. І наадварот, вэб-сайт можа адказваць з некалькіх адрасоў, таму выключэнне аднаго /32 не выключае сайт. Калі сапраўднае патрабаванне — маршрутызацыя для кожнай праграмы, то табліца маршрутаў кліента Community — няправільны інструмент.
Як праверыць выключэнне, не падмануўшы сябе
Пачніце з усталяванага маршруту, а не з браўзера. На Linux спытайце ядро, які маршрут і наступны хоп яно выкарыстае для пэўнага адраса; на Windows прачытайце табліцу маршрутаў для гэтага /32. Пераканайцеся, што шлюз фізічны, а не тунельны. Калі запіс адсутнічае, профіль не быў ужыты або кліенту не хапіла правоў змяняць маршруты.
Затым праверце два прызначэнні. Запыт да выключанага адраса павінен выйсці праз фізічны інтэрфейс, а запыт да кантрольнага ўнутранага адраса павінен па-ранейшаму ісці праз тунель. Праверка толькі выключанага адраса нічога не даказвае пра астатні тунель, а праверка публічнага сайта правярае той адрас, які гэты сайт развязаў, і ён можа не супадаць з адрасам у правіле.
Нарэшце, праверце сродкі кіравання, якія могуць пераканаць маршрут. Кліенцкі kill switch або налада Windows block-outside-dns могуць забараніць прамы трафік, і гэта выглядае як злучэнне, якое не ўдаецца, хоць маршрут правільны. Не адключайце гэтыя сродкі, каб выключэнне нібыта працавала; калі палітыка забараняе прамы шлях, то выключэнне — праблема дызайну для таго, хто валодае службай VPN.
Пераправерце пасля перападключэння або змены сеткі, бо шлюз, які быў да VPN, і даступны шлях — гэта ўласцівасці моманту, а не профілю.