Чаму сервер за VPN-кліентам адказвае праз тунэль
Уваходныя злучэнні не ўдаюцца, калі адказы ідуць па стандартным маршруце VPN замест шляху прыходу. Палітычная маршрутызацыя або трансляцыя крыніцы вяртае зваротны шлях.
Уваходныя злучэнні да хоста, які таксама запускае VPN-кліент, не ўдаюцца вельмі пэўным чынам: рукапоціск прыходзіць, дэман адказвае, а кліент не атрымлівае нічога ў адказ. Нішто не блакуе порт. Адказ выйшаў праз тунэль, бо тунэль валодае стандартным маршрутам, а ядро маршрутызуе адказы па прызначэнні, а не па памяці пра тое, адкуль прыйшоў запыт. Дэман спраўны, і порт адкрыты.
Адказу прызначаецца маршрут, а не памяць
VPN-кліент, які ўсталёўвае стандартны маршрут, дадае запіс, што пераўзыходзіць шлюз LAN, альбо па метрыцы, альбо падзяляючы прастору на дзве больш канкрэтныя паловы. Выходныя пакеты цяпер выбіраюць інтэрфейс тунэлю. Ядро ніколі не пытаецца, адкуль першапачаткова прыйшоў пакет, на які адказваюць. Гэтае адзінае ўпушчэнне тлумачыць кожны наступны сімптом.
Прамы кірунак маршрутызуецца па прызначэнні, і адваротны таксама. Адказ адрасаваны публічнаму кліенту, якога тунэль ахвотна павязе. Далёкі бок атрымлівае пакет, крыніцай якога ён не валодае, адкідвае яго, а першапачатковы кліент чакае, пакуль скончыцца тайм-аўт.
Строгая фільтрацыя зваротнага шляху можа скінуць уваходны пакет яшчэ да таго, як дэман яго прачытае. Праверце гэты лічыльнік першым, бо скід фільтрам і памылка маршрутызацыі знешне выглядаюць аднолькава.
ip route show default sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.eth0.rp_filter nft list ruleset | grep -A3 'hook forward'
Першая каманда паказвае, які стандартны маршрут цяпер перамагае. Другая паведамляе, ці дзейнічае строгая фільтрацыя глабальна ці для кожнага інтэрфейса, а трэцяя паказвае любое правіла ланцуга перасылкі, якое можа мець дачыненне.
Тры спосабы захаваць зваротны шлях
Выключэнне прызначэння паслугі з тунэлю — самы вузкі варыянт. Маршрут хоста, накіраваны на шлюз LAN, плюс дэман, прывязаны да фізічнага адраса замест усіх адрасоў, трымае гэты адзін паток па-за тунэлем. Змена лакальная і лёгка адкочваецца.
Палітычная маршрутызацыя — агульны адказ. Правіла, прывязанае да адраса крыніцы або да адзнакі файрвола, выбірае табліцу, стандартны маршрут якой паказвае на шлюз WAN, пакуль уласныя злучэнні хоста працягваюць ісці праз тунэль. Трымайце прыярытэт яўным, каб правіла не было пазней зацёмнена.
ip rule add from 203.0.113.25/32 table 100 priority 100 ip route add default via 192.0.2.1 dev eth0 table 100 ip route get 198.51.100.7 from 203.0.113.25
Першыя дзве каманды будуюць альтэрнатыўны шлях для адказаў з публічнага адраса. Трэцяя пытае ў ядра, які шлях абярэ менавіта гэтая крыніца і прызначэнне, і так вы пацвярджаеце, што правіла хоць неяк дзейнічае.
Трансляцыя крыніцы — трэці варыянт і адзіны, які вытрывальвае маршрутызатар, што ўжо робіць NAT перад паслугай. Адказ мусіць вярнуцца да гэтага маршрутызатара, і маскарадынг на інтэрфейс WAN дасягае гэтага, хаваючы кліента ад журналаў паслугі. Замена стандартнага маршруту ўручную пасля падлучэння — гэта дыягностыка, бо кліент перапісвае табліцу пры наступным перападлучэнні.
Калі скрынка таксама маршрутызуе для LAN
Тая ж адмова з'яўляецца на адзін крок далей, калі хост маршрутызуе для прылад за сабой. Уваходнае злучэнне перасылаецца на ўнутраную прыладу, адзіны зваротны шлях якой — тунэль, і адказ дасягае знешняга кліента з адраса правайдэра. Унутраная прылада ўвесь час працуе правільна.
Тады адсочванне злучэнняў бачыць адказ для патоку, якога яно ніколі не запісвала, і скідае яго. Трансляцыя прызначэння дастаўляе ўваходнае злучэнне на прыладу, а трансляцыя крыніцы робіць выгляд, што адказ паходзіць ад самога маршрутызатара.
Палітычны маршрут, які трымае перасылаемы порт на WAN, пакуль уласны трафік маршрутызатара ідзе праз тунэль, — гэта акуратнейшы эквівалент. Без трансляцыі крыніцы адказ адрасаваны знешняму кліенту, і ўнутраная прылада не мае маршруту да гэтага адраса наогул.
Тры праверкі, якія раздзяляюць прычыны
Выканайце тры праверкі: злучэнне ў скрынку з інтэрнэту, злучэнне з яе да публічнага хоста і запыт імені. Калі першыя дзве разыходзяцца, вінаваты зваротны шлях. Калі імёны не знаходзяцца ў абодвух кірунках, рэзалвер — іншая няспраўнасць, якая проста падзяляе тунэль.
Спачатку выпраўце пытанне маршрутызацыі, потым глядзіце на імёны. Змешванне двух — гэта як працоўны сервер вінавацяць за зламаны рэзалвер.
Запішыце, які інтэрфейс называе выключэнне, і трымайце канфігурацыю пад кантролем версій. Правіла, напісанае супраць інтэрфейса, які пераймянуюць пасля абнаўлення, праходзіць сёння і не праходзіць пасля наступнага перазапуску.