Набор nftables, які сілкуецца DNS, і WireGuard: як працуе перадача
DNS-адказ можа напаўняць набор nftables, але набор не маршрутызуе нічога. Прасачыце чатыры перадачы і тры тэрміны жыцця, якія вызначаюць, ці будзе кіраванне працаваць.
Імёны пераўтвараюцца ў адрасы, і гэтыя адрасы могуць трапіць у набор міжсеткавага экрана, які пазней уплывае на маршрутызацыю, што робіць кіраванне па імені магчымым без проксі. Хітрасць у тым, што чатыры кампаненты павінны перадаць кіраванне правільна: рэзалвер, набор, класіфікатар, які пазначае новы паток, і партнёр, які яго нясе. Кожная перадача зрываецца па-свойму, і кожная трымае свой час.
Разглядайце дызайн як ланцуг, а не як канфігурацыю. Пытанне на кожным кроку: які кампанент валодае рашэннем і што адбываецца, калі яго ўваход адсутнічае.
Што DNS-адказ можа і чаго не можа
dnsmasq можа капіяваць адрасы з адказаў у набор nftables, і гэта падкормка, а не рашэнне аб маршрутызацыі. Гэты параметр, апісаны ў кіраўніцтве dnsmasq, указвае сямейства, табліцу і набор, а яго пачатковы 4# выбірае толькі запісы A, таму прызначэнні v6 патрабуюць асобнай арганізацыі. Набор павінен ужо існаваць, бо рэзалвер дадае элементы ў тое, што стварыў уладальнік экрана. Нішто на гэтым кроку не выбірае інтэрфейс, табліцу або партнёра.
Кліент таксама павінен выкарыстоўваць гэты рэзалвер для імені. Праграма з уласным шыфраваным DNS або закэшаваны адказ з часоў да палітыкі падключаецца, не ствараючы ніводнага запісу ў наборы.
Набор — гэта ўваход, а не маршрут
Элемент у наборы — гэта ўмова супадзення. Нешта павінна зірнуць на яго, вырашыць, што гэты пакет пачынае новы паток, і ўжыць палітыку, якая накіроўвае паток праз тунель. У Linux гэта звычайна азначае выхадны шлях з падтрымкай маршрутаў, які можа ставіць пазнаку, правіла, што адпраўляе пазначаныя пакеты ў асобную табліцу, і маршрут у гэтай табліцы на прыладу WireGuard. Адно членства не ўсталёўвае нічога з гэтага.
nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips
Партнёр ужывае другую праверку пакрыцця, пра якую забываюць. WireGuard шыфруе пакет толькі для партнёра, чые дазволеныя адрасы ўключаюць прызначэнне, таму маршрут палітыкі ў інтэрфейс не дастатковы, калі спіс партнёра выключае гэты прэфікс. Трымайце спіс пад кантролем уладальніка маршрутызацыі, а не спадзявайцеся на тое, што зробіць менеджар.
Пазнакі, табліцы і пакрыццё партнёра
Пазнакі — гэта агульная прастора імён, таму і значэнне, і маска павінны быць узгоднены з усім астатнім, што іх выкарыстоўвае. Правіла, якое адпраўляе пазначаны трафік у асобную табліцу, патрабуе пэўнага выніку, калі ў гэтай табліцы няма адпаведнага маршруту, бо запыт без адказу можа перайсці да наступнага правіла і выпусціць пакет праз фізічны інтэрфейс. Маршрут па змаўчанні тыпу blackhole ў асобнай табліцы ператварае гэты ціхі ўцёк у бачнае скідванне. Чаго дызайн усё яшчэ не можа — гэта зачыніцца пры адмове для прызначэння, якое ніколі не трапляла ў набор.
Уласныя вонкавыя пакеты тунеля павінны ўцячы ад класіфікатара. Інструменты WireGuard даюць пазнаку сокета менавіта для гэтага, і яе выкарыстанне не дазваляе накіраваць інкапсуляцыю назад у інтэрфейс, які яна будуе.
Правярайце кожны тэрмін жыцця асобна
Тры сховішчы старэюць па трох графіках: кэш рэзалвера, элементы набору і адсочванае злучэнне. Правярайце іх у гэтым парадку і назірайце, ці кожнае рухаецца, калі павінна. Каманды ніжэй чытаюць рэзалвер, набор, табліцу злучэнняў і правілы палітыкі, нічога не змяняючы.
dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show
Свежы запыт, які дадае элемент, даказвае, што падкормка працуе, а састарэлы элемент, які перажыў свой адказ, — гэта неадпаведнасць тэрмінаў жыцця, якую варта запісаць. Новае злучэнне ў табліцы злучэнняў з чаканай пазнакай паказвае, што класіфікатар працаваў, а старое злучэнне, якое захавала першапачатковую пазнаку, — гэта правільныя паводзіны, а не памылка. Спіс правілаў адказвае, ці існуе запыт палітыкі наогул, што ёсць іншае пытанне, чым ці ён супаў. Прачытайце чатыры вынікі ў гэтым парадку, і зламаная перадача выдасць сябе.
Калі патрабаванне ў тым, каб пэўнае імя заўсёды выкарыстоўвала адзін шлях, набор, які сілкуецца DNS, не можа гэтага даказаць, бо агульныя адрасы нясуць і іншыя імёны. Проксі або механізм узроўню праграмы — гэта інструмент для такой гарантыі.