Праверка маршрутызацыі VPN у прасторах імёнаў без змены маршрутаў хоста
Тры змадэляваныя ролі, тры ізаляваныя кантэксты і адзін veth на кожнае злучэнне. Параўнайце лабараторыю прастораў імёнаў з лабараторыяй маршрутаў хоста, перш чым чапаць хост.
Дзве лабараторыі могуць мадэляваць адну і тую ж тапалогію VPN і правальвацца цалкам па-рознаму: адна жыве ў сеткавых прасторах імёнаў, другая — на ўласных маршрутах хоста. Версія з прасторамі імёнаў трымае кожны інтэрфейс, маршрут і сокет у кантэксце, які можна выдаліць, тады як версія з хостам хутчэй запускаецца і пакідае пасля сябе стан. Менавіта гэты рэшткавы стан робіць другую лабараторыю цяжка паўторнай праз месяц. Параўнайце спачатку ачыстку, бо яна вырашае, ці зможаце вы правесці эксперымент двойчы.
Два спосабы пабудаваць адну лабараторыю, і калі кожны перамагае
У лабараторыі з маршрутамі хоста вы дадаяце тунельны інтэрфейс і маршруты на машыну, на якой працуеце, таму эксперымент дзеліць лёс з вашым shell, вашым менеджэрам пакетаў і кожным іншым злучэннем. У лабараторыі з прасторамі імёнаў кожная роля атрымлівае свой уласны стэк інтэрфейсаў, адрасоў, маршрутаў і сокетаў, а выдаленне прасторы імёнаў прыбірае ўсё гэта. Ні адна мадэль не правільнейшая, бо яны адказваюць на розныя пытанні. Выбірайце прасторы імёнаў, калі тэма — маршрутызацыя і перасылка, і лабараторыю з хостам, калі тэма — як інтэгруецца адзін кліент працоўнага стала.
| Aspect | Namespace lab | Host-route lab |
|---|---|---|
| Isolation | Full stack per role | Shares the host stack |
| Cleanup | Delete named namespaces | Manual route and rule removal |
| Realism | Strong for routing | Needed for GUI clients |
Змешваць абедзве — звычайная памылка: лабараторыя з прасторамі імёнаў, правераная супраць кліента толькі на хосце не даказвае нічога ні пра адну з пастановак. Вырашыце, якое пытанне вы ставіце, перш чым ствараць першае злучэнне.
Адзін кантэкст на ролю, злучаныя наўмысна
Стварыце адну прастору імёнаў на ролю і перанясіце кожны канец кожнай пары veth у кантэкст, які ёй валодае. Першых чатырох каманд дастаткова, каб убачыць форму:
ip netns add client
ip netns add gateway
ip link add veth-c type veth peer name veth-g
ip link set veth-c netns clientДайце лабараторыі дыяпазоны, якія ні з чым на хосце не перакрываюцца, і запішыце да пачатку, якая прастора імёнаў валодае якім адрасам. Працоўнай лабараторыі патрэбны два асобныя шляхі: знешні, каб канцавы пункт VPN дасягнуў свайго партнёра, і зваротны шлях для рэсурсу, які абараняецца. Мадэлюйце іх як два рашэнні, бо лабараторыя, якая будуе толькі выходную палову, праходзіць тэст рукапоціску і правальвае тэст праграмы.
Роля перасылкі — там, дзе лабараторыі робяцца цікавымі
Адна роля павінна перасылаць, што азначае ўключыць перасылку ўнутры гэтай прасторы імёнаў і дадаць тое правіла, якое патрабуе дызайн. Стан перасылкі свой для кожнай прасторы імёнаў, таму налада хоста не мае дачынення да лабараторыі, а налада лабараторыі не выцякае вонкі, як апісвае дакументацыя па сеткавых прасторах імёнаў. WireGuard дакументуе, што інтэрфейс і яго знешні сокет могуць жыць у розных прасторах імёнаў, што ёсць карысным тронам і выдатным спосабам заблытаць сябе. Не мяркуйце, што перанос інтэрфейса пераносіць кожную частку злучэння аднолькава.
Праверце лічыльнік перасылкі пасля тэставага пакета, бо правіла, якое ніколі не супала, і правіла, якое адкінула пакет, выглядаюць у табліцы маршрутаў аднолькава. Толькі лічыльнікі адрозніваюць іх.
Запішыце базавую лінію, потым зламайце адзін маршрут
Пачніце з запісу таго, што існуе, з кантэкстам побач з кожным радком. Прачытайце прасторы імёнаў, затым маршрут, які тэставы пункт прызначэння пройдзе ўнутры адной з іх, затым лічыльнікі на злучэнні, якое яго нясе:
ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-gТрэцяя каманда — тая, якую людзі прапускаюць, і менавіта там жывуць доказы: лічыльнікі адкінутых і памылак кажуць, ці дасягнуў пакет ролі перасылкі наогул. Запішыце тыя ж тры выгляды пасля змены, і няхай дыфам будуць доказы, а не ваша памяць пра іх. Затым зламайце роўна адну рэч, альбо выдаліўшы маршрут, альбо дадаўшы правіла забароны на шляху перасылкі, і пацвердзіце сімптом, які вы прадказалі: завершаны рукапоціск без адказу або збой развязання адраса замест тайм-аўту. Лабараторыя, якая дэманструе толькі поспех, вучыць вельмі мала.
Ачыстка — гэта тое, што робіць наступны запуск паўторным
Трымайце ачыстку ў межах названых вамі рэсурсаў, бо суцэльны скід файрвола або выдаленне маршруту хоста — гэта не паўторнасць, а другі інцыдэнт. Захавайце тапалогію, дакладныя каманды і назіранні, якія вы чакалі, каб наступны запуск узнавіў тую ж памылку, а не здагадваўся, які кантэкст трымаў папярэдні стан. Без гэтага запісу лабараторыя — гісторыя, а не працэдура.
Выкарыстоўвайце лакальна згенераваныя ўліковыя даныя для лабараторыі і трымайце прадукцыйныя акаўнты па-за агульнымі прыкладамі. Затым выдаліце кожную прастору імёнаў і пацвердзіце, што выгляд хоста не змяніўся, — гэта і ёсць уся прычына выбару такой мадэлі. Лабараторыя, якую вы не можаце чыста выдаліць, — гэта змена хоста з лішнімі крокамі.