Att sätta multicast-flaggan på en WireGuard-enhet gör gränssnittet lämpligt för upptäcktsprogramvara, och det är allt flaggan gör. Den talar inte om för protokollet vart ett gruppaket ska ta vägen, och på en enhet med flera peers finns inget enda självklart svar. Tre separata portar står mellan en körande daemon och en upptäckt tjänst.

Testa dem i ordning, för att klara en säger ingenting om nästa.

Port ett: flaggan och daemonens policy

En Linux WireGuard-enhet skapas som en punkt-till-punkt-länk utan ARP, och den bär inte multicast-flaggan som standard. Att lägga till flaggan är en lokal gränssnittsändring, utförd av det som än hanterar enheten. Avahi har sin egen världsbild ovanpå detta, och dess standardpolicy hoppar helt över punkt-till-punkt-gränssnitt. Därför gäller två oberoende lämplighetstester innan ett enda paket rör sig.

Daemonen behöver alltså ett uttryckligt beslut, inte bara en körande process. Dess dokumenterade kontroller omfattar allow-interfaces, deny-interfaces och allow-point-to-point, och den sista är inställningen folk missar.

Kontrollerna nedan rapporterar länkens flaggor, multicast-rutten och huruvida daemonens konfiguration alls kan parsas:

ip -d link show wg0
ip route get 224.0.0.251
avahi-daemon --check

En daemon som startade framgångsrikt har inte nödvändigtvis öppnat sockets på det gränssnitt du bryr dig om. Läs dess effektiva konfiguration i stället för att anta att tjänstestatus är lika med täckning.

Port två: rutten till gruppen

Den andra porten är vanlig routing. Ett paket adresserat till 224.0.0.251 följer vidarebefordringstabellen som allt annat, och om tabellen skickar ut det via det fysiska LAN-gränssnittet ändrar ingen WireGuard-konfiguration det. Reparera rutten först så blir resten av utredningen kortare. Titta på vad kärnan rapporterar för gruppadressen innan du rör några peer-nycklar.

ObservationGate it belongs toWhat it does not prove
Multicast flag present on wg0Interface eligibilityThe daemon will use the interface
Route to the group via wg0ForwardingAny peer will receive it
Destination inside a peer's allowed listPeer selectionThat peer's network will answer

Utan en specifik rutt faller kärnan tillbaka på länkens egen multicast-hantering, vilket är varför standarden ser rätt ut på ett platt LAN och fel så snart samma grupptrafik ska lämna via en tunnel. Felet är tyst från avsändarens sida: frågan går någonstans, och svaret kommer aldrig fram.

Port tre: WireGuard väljer en peer per paket

WireGuard väljer en utgående peer genom att slå upp destinationen i de tillåtna adressmängderna, och Linux sändningsväg utför den uppslagningen en gång per paket. Det finns ett resultat, och paketet krypteras för den peeren. Samma grupprefix i flera peers tillåtna listor skapar inte medlemskap eller replikering; det skapar en tvetydig uppslagning som löses till en av dem.

På en dedikerad länk med två ändpunkter är detta precis vad du vill ha, eftersom det finns en enda avsedd mottagare för den medvetet burna grupptrafiken. På ett gränssnitt med fem peers är det en begränsning, inte en funktion, och rättelsen hör hemma i designen och inte i konfigurationen av någon enskild peer.

En fan-out-design behöver en uttrycklig relay, separata länkar eller en helt annan upptäcktsmekanism. Att publicera ett recept för två ändpunkter som en lösning för många klienter eftersom varje klient kan pinga gatewayen är hur detta rullas ut fel.

Den inkommande riktningen kontrolleras annorlunda: källan till ett mottaget paket måste ligga inom den autentiserade peerns tillåtna lista. Att lägga till en multicast-destination där ersätter inte avsändarens verkliga källägande.

Reflektion är en gräns, inte en bro

Avahis reflektor återger mDNS-meddelanden mellan de gränssnitt den väljer, på applikationsnivå. Det är en upptäcktsgräns mellan nätverk, inte en Ethernet-brygga och inte en allmän multicast-router. Två reflektorer kopplade till samma nätverk skapar gärna en slinga av upprepade annonseringar.

Reflektion lämnar också över tjänstenamn och deras metadata till ett annat nätverk, vilket är ett integritetsbeslut lika mycket som ett routingbeslut. Begränsa de valda gränssnitten, och använd tjänstefilter där den installerade versionen stöder dem, så att bara de annonseringar en behörig användare behöver korsar gränsen.

Upptäckt och användning förblir separata resultat. En klient kan se en annonsering för en tjänst vars annonserade adress är onåbar från där klienten befinner sig, eller vars port nekas av dess åtkomstpolicy. Bekräfta tjänsteanslutningen efter att annonseringen dyker upp, och om programmet stöder ett stabilt DNS-namn eller en uttrycklig serveradress, föredra det framför att utöka link-lokal upptäckt. Beskrivningen av kryptonyckelrouting täcker det destinationsbaserade peer-valet som allt detta vilar på.

Relaterade artiklar