Два прэфіксы /1 пакрываюць тыя ж адрасы IPv4, што і адзіны /0, і гэта роўнасць захоўваецца толькі ўнутры спісу дазволеных прэфіксаў суседа. Яна перастае выконвацца ў той момант, калі інструмент наладкі вырашае, як маршрутызаваць, бо Linux wg-quick апрацоўвае прадвызначаны прэфікс як асобны выпадак, а не як арыфметыку. Асобная галіна ўсталёўвае прысвечаную табліцу, два правілы палітыкі, адзнаку сокета і налады зваротнага шляху, якіх пара паўмаршрутаў ніколі не атрымлівае. Таму, калі пасля правак перастае працаваць проксі або браўзер, прэфіксы — найменш цікавая частка змены.

Спіс прэфіксаў — яшчэ не ўся канфігурацыя

AllowedIPs выконвае дзве задачы адначасова, і толькі адна з іх датычыцца пакрыцця. Для самога WireGuard спіс — гэта маршрутызацыя крыптаключамі: ён вырашае, якія прызначэнні шыфруюцца ў бок суседа і якія адрасы крыніцы гэты сусед можа выкарыстоўваць. Для wg-quick той жа спіс адыгрывае ролю спецыфікацыі маршрутаў, і маршрут, які ён стварае, залежыць ад таго, якой галіне спіс выпадкова адпавядае. Таму аднолькавае пакрыццё пры дзвюх розных формах спісу нічога не кажа пра аднолькавы стан хоста.

Прадвызначаная канфігурацыя забірае гэтае рашэнне ў вас, бо Table па змаўчанні аўтаматычны, і інструмент сам выбірае, дзе асядуць маршруты. Іншы менеджар сеткі, абгортка дыстрыбутыва або ўласнае значэнне Table зноў змяняюць вынік, і менавіта таму парада, напісаная для аднаго хоста, можа выглядаць памылковай на наступным.

Што прадвызначаная галіна дадае звыш маршруту

Запіс /0 накіроўвае wg-quick у шлях прадвызначанага маршруту: асобная табліца маршрутызацыі атрымлівае прадвызначаны, адно правіла палітыкі адпраўляе туды непазначаны трафік, другое правіла захоўвае больш дакладныя маршруты асноўнай табліцы галоўнымі, а інтэрфейс атрымлівае адзнаку фіэрвола на свой сокет. Гэтая адзнака — вартаўнік цыкла. Шыфраваныя дэйтаграмы, што нясуць трафік тунэля, выходзяць з усталяванай адзнакай, каб правіла, якое накіроўвае ўсё астатняе ў тунэль, не праглынула ўласныя транспартныя пакеты тунэля.

Пара запісаў /1 замест гэтага ідзе звычайным шляхам маршруту. У сканфігураваную табліцу трапляюць два маршруты, і ніводная з навакольных механізмаў не з’яўляецца — не таму, што яна непатрэбная, а таму, што гэтая галіна кода ніколі не выконвалася.

Дзе разыходзяцца два ўпарадкаванні

Разыходжанне спачатку праяўляецца як рэкурсія. Калі паўмаршруты знаходзяцца ў асноўнай табліцы, уласны транспартны адрас суседа трапляе ўнутры прэфікса тунэля, таму пакет, які павінен несці тунэль, супадае з маршрутам, што паказвае ўнутр тунэля. Нешта павінна зрабіць для яго выключэнне: маршрут хоста для бягучага канчатковага пункта, адзнака, ужытая ўручную, або правіла, спецыфічнае для інтэрфейса. Маршрут хоста працуе, пакуль адрас канчатковага пункта не зменіцца, што здараецца з канчатковымі пунктамі на базе DNS, вандроўнымі кліентамі і шматсярэднымі канфігурацыямі.

Па-другое, усё, што разважае пра адзнакі, змяняе паводзіны. Празрысты проксі, які перанакіроўвае злучэнні лакальна, стварае новыя сокеты, чые адзнакі і крыніцы адрозніваюцца ад зыходнага кліенцкага патоку, і правілы палітыкі, сгенераваныя прадвызначанай галіной, былі часткай таго, што ўпарадкавала гэтыя патокі. Чытанне ўласнага зыходнага злучэння проксі — іншае практыкаванне, чым праверка дасягальнасці зыходнага прызначэння.

Чытайце правілы і адзнакі перад правайкамі

Зафіксуйце бягучы стан, пакуль тунэль здаровы, потым яшчэ раз пасля змены, і параўнайце два дампы, а не разважайце з файла канфігурацыі. Уключыце правілы палітыкі, кожную табліцу, адзнаку інтэрфейса і запісаныя канчатковыя пункты.

ip rule show
ip -4 route show table all | grep -E 'default|wg1'
wg show wg1 fwmark
wg show wg1 endpoints

Калі першы радок вываду страціў правіла для непазначанага трафіку і прысвечаная табліца пустая, прадвызначаная галіна не працуе, і ніякая арыфметыка прэфіксаў не верне яе эфекты. Нулявая адзнака на інтэрфейсе, які раней меў адзнаку, — той жа сігнал, бачны ў адным значэнні.

Адрэпетыруйце страту тунэля перад выпускам

Калі размяшчэнне паўмаршрутаў — свядомы выбар, яно павінна яўна забяспечыць адсутныя часткі: шлях канчатковага пункта, які вытрымлівае змены адрасоў, меркаваныя паводзіны пры падзенні тунэля і эквівалентную апрацоўку для IPv6. Запішыце гэта як патрабаванні, а не выяўляйце падчас збою. Потым адрэпетыруйце адмову, бо поўны тунэль, які моўчкі вяртаецца на фізічны ўзыходны канал, горш за той, што проста перастае працаваць.

sudo ip -4 route add 198.51.100.20/32 via 192.0.2.1 dev eth0
ip -4 route get 198.51.100.20
sudo wg-quick down wg1

Пошук маршруту павінен вызначыць канчатковы пункт з фізічнага інтэрфейса, не перасякаючы тунэль, а адключэнне інтэрфейса павінна пакінуць хост у стане, які абяцаў дызайн. Проксі, які працуе пасля замены, даказвае, што згенераваны стан хоста меў значэнне; ён не даказвае, што прадухіленне цыкла і паводзіны ў адключаным стане перажылі правайкі.

Падобныя артыкулы