mDNS преку WireGuard: три порти пред да одговори партнер
На Avahi му треба соодветен интерфејс, рута до групата и партнер што го поседува одредиштето. Три порти, три одделни проверки и никакво разгранување.
Поставувањето на multicast знамето на WireGuard уред го прави интерфејсот соодветен за софтвер за откривање, и тоа е сето она што го прави знамето. Тоа не му кажува на протоколот каде треба да оди групниот пакет, а на уред со неколку партнери нема еден очигледен одговор. Помеѓу демон што работи и откриена услуга стојат три одделни порти.
Тестирајте ги по ред, бидејќи поминувањето на едната не кажува ништо за следната.
Прва порта: знамето и политиката на демонот
Linux WireGuard уред се создава како точка-до-точка врска без ARP и стандардно не го носи multicast знамето. Додавањето на знамето е локална промена на интерфејсот, што го врши управувачот на уредот. Avahi има свој поглед на светот над тоа, а неговата стандардна политика целосно ги прескокнува точка-до-точка интерфејсите. Затоа пред да се движи и еден пакет се применуваат два независни теста за соодветност.
Значи на демонот му треба јасна одлука, а не само процес што работи. Неговите документирани контроли вклучуваат allow-interfaces, deny-interfaces и allow-point-to-point, а последната е поставката што луѓето ја пропуштаат.
Проверките подолу ги известуваат знамињата на врската, multicast рутата и дали конфигурацијата на демонот воопшто се парсира:
ip -d link show wg0
ip route get 224.0.0.251
avahi-daemon --check
Демон што успешно стартувал не мора да отворил сокети на интерфејсот што ве интересира. Читајте ја неговата ефективна конфигурација наместо да претпоставувате дека статусот на услугата е еднаков на покриеноста.
Втора порта: рутата до групата
Втората порта е обично рутирање. Пакет упатен на 224.0.0.251 ја следи табелата за препраќање како и сите други, и ако табелата го испраќа надвор низ физичкиот LAN интерфејс, никаква WireGuard конфигурација тоа нема да го промени. Прво поправете ја рутата и остатокот од истрагата станува пократок. Погледнете што јадрото известува за групната адреса пред да допрете кои било клучеви на партнер.
| Observation | Gate it belongs to | What it does not prove |
|---|---|---|
Multicast flag present on wg0 | Interface eligibility | The daemon will use the interface |
Route to the group via wg0 | Forwarding | Any peer will receive it |
| Destination inside a peer's allowed list | Peer selection | That peer's network will answer |
Без конкретна рута јадрото се враќа на сопствената multicast обработка на врската, поради што стандардното изгледа точно на рамна LAN мрежа и неточно штом истиот групен сообраќај треба да излезе низ тунел. Неуспехот е тивок од страната на испраќачот: барањето оди некаде, а одговорот никогаш не пристигнува.
Трета порта: WireGuard избира еден партнер по пакет
WireGuard избира излезен партнер со пребарување на одредиштето во множествата дозволени адреси, а Linux патеката за пренос го прави тоа пребарување еднаш по пакет. Резултатот е еден и пакетот се шифрира за тој партнер. Истиот групен префикс во дозволените списоци на неколку партнери не создава членство или репликација; создава двосмислено пребарување што се решава на еден од нив.
На посветена врска со два краја ова е точно она што го сакате, бидејќи има еден предвиден примач за свесно пренесениот групен сообраќај. На интерфејс со пет партнери ова е ограничување, а не функција, и поправката припаѓа на дизајнот, а не на конфигурацијата на кој било поединечен партнер.
Дизајнот со разгранување бара јасен реле, одделни врски или сосема поинаков механизам за откривање. Објавувањето на рецепт за два краја како решение за многу клиенти затоа што секој клиент може да пингува портата е начинот на кој ова се распоредува погрешно.
Влезната насока се проверува поинаку: изворот на примен пакет мора да падне во дозволениот список на автентицираниот партнер. Додавањето multicast одредиште таму не го заменува вистинското сопствеништво на изворот на испраќачот.
Одразот е граница, а не мост
Одразувачот на Avahi ги репродуцира mDNS пораките меѓу интерфејсите што ги избира, на апликациско ниво. Тоа е граница за откривање меѓу мрежи, а не Ethernet мост и не општ multicast рутер. Два одразувачи поврзани на исти мрежи со задоволство ќе создадат јамка од повторени објави.
Одразот исто така ги предава имињата на услугите и нивните метаподатоци на друга мрежа, што е одлука за приватност исто колку и одлука за рутирање. Ограничете ги избраните интерфејси и користете филтри за услуги каде инсталираната верзија ги поддржува, за да ја преминуваат границата само објавите што му требаат на овластен корисник.
Откривањето и користењето остануваат одделни резултати. Клиентот може да види објава за услуга чија објавена адреса е недостапна од местото каде што е клиентот, или чијшто порт неговата политика за пристап го одбива. Потврдете ја врската со услугата откако објавата ќе се појави, и ако апликацијата поддржува стабилно DNS име или јасна адреса на сервер, претпочитајте го тоа наместо да го проширувате локалното откривање на врската. Описот на рутирање со криптоклуч ја покрива изборот на партнер заснован на одредиште од кој зависи сето ова.