Праграма, прывязаная да адрасу VPN, усё роўна ідзе праз няправільны маршрут
Сокет, прывязаны да адрасу VPN, ідзе па звычайным маршруце па змаўчанні. Праверце прыналежнасць адраса і пошук з улікам крыніцы, перш чым дадаваць правілы палітыкі.
Праграма прывязваецца да адрасу VPN, а злучэнне ўсё роўна выходзіць праз звычайны маршрут па змаўчанні. У прывязцы нічога не зламалася: яна зрабіла менавіта тое, што робіць прывязка. Прывязка сокета да лакальнага адраса выбірае адрас крыніцы, які ядро ставіць у загаловак. Яна не ўсталёўвае маршрут і не стварае правіла палітыкі, якое адпраўляе пакеты з гэтай крыніцай у пэўны тунэль.
Астатняя частка гэтага кіраўніцтва — парадак праверкі, які я выкарыстоўваю, разам з камандай, што дае кожнае назіранне.
Што прывязка насамрэч вырашае
Прывязка прызначае сокету лакальны адрас. Затым ядро выконвае той жа пошук маршруту, які выканала б інакш, калі толькі правіла палітыкі не змяняе табліцу, якую чытае гэты пошук.
Таму пакет можа выйсці з адрасам крыніцы VPN на фізічным інтэрфейсе. На тым баку ён прыходзіць з прыватнага дыяпазону, якога сетка не чакала на гэтым шляху, зваротны трафік не мае маршруту назад, і злучэнне завісае або скідаецца.
Даведачнік па сокетах IP у Linux апісвае семантыку прывязкі. Палова пра маршрутызацыю жыве ў ip-rule і ip-route, і гэта асобныя даведнікі невыпадкова.
Упэўніцеся, што адрас належыць гэтай прасторы імёнаў
Адрас, да якога можна прывязацца, павінен існаваць на інтэрфейсе ўнутры сеткавай прасторы імёнаў, дзе працуе праграма. Адрас партнёра, адрас шлюза або адрас, які існуе толькі ў іншай прасторы імёнаў, прывязаць нельга, і выклік завяршаецца памылкай EADDRNOTAVAIL.
ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>Выканайце гэтыя тры каманды ў тым жа кантэксце, што і праграма: тая ж прастора імёнаў і, калі атрымаецца, той жа карыстальнік. Старая схема net30 не даказвае, які адрас ваша цяперашняя тапалогія прызначыла кліенту. Чытайце інтэрфейс, які сапраўды ўзняты.
Прачытайце пошук для гэтай крыніцы і прызначэння
Адна каманда адказвае на пытанне, на якое прывязка не адказала:
ip route get 203.0.113.10 from 10.8.0.2
ip rule showПершы радок друкуе маршрут, які пройдзе пакет ад гэтай крыніцы да гэтага прызначэння, уключаючы выходны інтэрфейс і пераважную крыніцу. Калі ў ім названы фізічны інтэрфейс, прывязка і маршрут супярэчаць адно аднаму, і пакет выйдзе з крыніцай, да якой шлях не можа вярнуцца.
Затым ip rule show пакажа, ці выбрала б якое-небудзь правіла іншую табліцу. Прыярытэты тут важныя, бо першае адпаведнае правіла перамагае, а правіла, што ловіць усё вышэй за ваша, робіць вашае правіла нябачным.
Усталёўвайце правіла палітыкі, толькі калі так задумана
Маршрутызацыя па крыніцы — гэта свядомае рашэнне, а не рамонт для адной праграмы. Калі ўладальнік палітыкі хоча, каб трафік з падсеткі тунэля ішоў праз тунэль, правіла належыць у яго канфігурацыю, а не ў аднаразовую каманду на вашым ноўтбуку.
Працаздольная форма — асобная табліца з маршрутам па змаўчанні праз тунэль плюс правіла, што накіроўвае дыяпазон крыніц VPN у гэтую табліцу. Дадайце выключэнні, патрэбныя задуме, бо табліца толькі з тунэльным маршрутам па змаўчанні перахапіць прызначэнні, якія павінны заставацца лакальнымі або дасягацца праз фізічны шлях.
ip route add default dev tun0 table 100
ip rule add from 10.8.0.2 table 100 priority 100
ip route get 203.0.113.10 from 10.8.0.2Адкот рабіце праз ip rule del і ip route flush table 100. Усё, дададзенае такім чынам, знікае пасля перазагрузкі, калі яго не запіша кіраўнік; гэта адначасова ўласцівасць бяспекі і прычына не трымаць адзіную копію ў гісторыі вашай абалонкі.
Праверце трыма назіраннямі
Запішыце крыніцу, якую запытала праграма, маршрут, які выбраў пошук, і крыніцу, якую фактычна ўбачыў сервер.
Гэтыя тры могуць разыходзіцца, і кожнае разыходжанне паказвае ў іншае месца. Захоп на інтэрфейсе тунэля даказвае, што пакет выйшаў з правільнай крыніцай. Захоп на фізічным інтэрфейсе даказвае, што ён выйшаў няправільна. Толькі погляд з боку сервера даказвае шлях ад пачатку да канца.
Калі праграма прапануе опцыю прывязкі да прылады або рэжым маршрутызацыі для кожнай праграмы, стаўцеся да гэтага як да іншага механізму з іншымі абмежаваннямі. Падобныя на выгляд налады не ўсе вядуць да аднаго рашэння ядра.