Имената се разрешават до адреси и тези адреси могат да попаднат в набор на защитната стена, който по-късно влияе на маршрутизирането, което прави насочването по име възможно без прокси. Уловката е, че четири компонента трябва да си предадат правилно: резолверът, наборът, класификаторът, който маркира нов поток, и партньорът, който го пренася. Всяко предаване се проваля по различен начин и всяко пази своето време.

Разглеждайте дизайна като верига, а не като конфигурация. Въпросът на всяка стъпка е кой компонент притежава решението и какво се случва, когато входът му липсва.

Какво може и какво не може 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, не може да го докаже, защото споделените адреси носят и други имена. Прокси или механизъм на ниво приложение е инструментът за тази гаранция.

Подобни статии