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

Адно поле, два чытачы: выбар зыходнага і праверка крыніцы

У кліенце прэфіксы вырашаюць, якія прызначэнні ідуць да гэтага суразмоўцы, а якія застаюцца ў звычайнай сетцы. Таму запіс 0.0.0.0/0 захоплівае кожнае прызначэнне IPv4, і менавіта таму імпарт профілю поўнага тунеля накіроўвае звычайнае агляданне праз аддаленую машыну. Вузкія запісы робяць наадварот: маршрутызуюць толькі пералічаныя сеткі, пакідаючы ўсё астатняе на месцы. Раздзел дакументацыі WireGuard пра маршрутызацыю крыптаключаў апісвае абедзве задачы ў адным месцы: выбар зыходнага суразмоўцы і праверку ўваходнай крыніцы.

На серверы тое ж поле апісвае, якія адрасы крыніц можа выкарыстоўваць кожны суразмовец. Гэта крыптаграфічная праверка, а не фільтр пакетаў: пакет, унутраная крыніца якога не адпавядае спісу суразмоўцы, адкідаецца ўнутры WireGuard яшчэ да таго, як яго ўбачыць хоць які міжсеткавы экран хоста. Абедзве задачы падзяляюць адзін спіс — менавіта таму спіс, скапіяваны з іншага месца, паводзіць сябе няправільна там, дзе вы не чакалі.

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

[Peer]
# split tunnel: only these networks
AllowedIPs = 10.77.0.0/24, 192.168.30.0/24

[Peer]
# full tunnel: everything, both families
AllowedIPs = 0.0.0.0/0, ::/0

Абедзве формы самадастатковыя, і яны з'яўляюцца альтэрнатывамі, а не крокамі. Першая накіроўвае праз тунель толькі тыя дзве сеткі; другая накіроўвае кожнае прызначэнне, а запіс ::/0 дадае IPv6 да стандартнага IPv4. Які б вы ні выбралі, гэтыя прэфіксы — усё рашэнне аб маршрутызацыі для гэтага суразмоўцы, як толькі wg-quick пачне ўсталёўваць маршруты.

Цэнтральны вузел патрабуе іншага спісу

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

[Peer]
# laptop: tunnel address 10.77.0.2, office LAN behind it
AllowedIPs = 10.77.0.2/32, 192.168.30.0/24

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

Прапуск усталявання маршрутаў пакідае прабел

wg-quick, памочнік, які ўздымае інтэрфейс з канфігурацыйнага файла, усталёўвае адрасы інтэрфейса і маршруты як частку гэтай працы. Усталяванне Table = off кажа памочніку прапусціць працу з маршрутамі, што не ўсталёўвае замены і не робіць прыватную сетку дасяжнай. Калі аўтаматычныя маршруты ўжо выконваюць працу, называць патрэбныя прэфіксы — больш ясная канфігурацыя. Адключыць кіраванне маршрутамі і пакінуць замену ненапісанай — гэта не дызайн, а ўпушчэнне.

Базавы інструмент wg паводзіць сябе інакш: ён наладжвае інтэрфейс і ніколі не кранае маршруты, таму ўсталёўцы, пабудаванай непасрэдна на ім, патрэбныя ўласныя каманды маршрутызацыі. Інструкцыі, напісаныя для аднаго інструмента, могуць выглядаць няправільна, калі выконваць іх для другога. Паспяховы ping — таксама слабы доказ, бо ён правярае адзін шлях, а не ўсе шляхі праграм, якія вам патрэбны.

DNS і IPv6 вырашаюцца асобна

Праверце адрас DNS-сервера, які абвяшчае тунель, і пераканайцеся, што маршрут да гэтага адраса існуе праз выбраныя прэфіксы. Налада рэзалвера не робіць рэзалвер дасяжным, а звужэнне тунеля можа ціха выдаліць маршрут, які вёў да яго. Асобна агледзьце IPv6, бо карэктнае раздзяленне IPv4 нічога не кажа пра стандартны маршрут IPv6, які ўсё яшчэ паказвае на фізічнае злучэнне. Тры асобныя рашэнні могуць змяніцца адначасова, калі вы рэдагуеце адзін блок суразмоўцы.

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

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