En TPROXY-räknare kan öka medan applikationen inte tar emot något. Regeln matchade, men lokal leverans beror fortfarande på policyrouting och en kompatibel mottagande socket.

Linux TPROXY kan fånga trafik utan att skriva om destinationen som DNAT gör. Paket som adresseras till en icke-lokal destination måste därför nå en lämplig lokal socket.

Följ leveransvägen

  1. Trafiken når avlyssningsvärden på det avsedda gränssnittet och adressfamiljen.
  2. Avlyssningsregeln och paketmarkeringen anger policyn för lokal leverans.
  3. En matchande policyregel väljer en rutt som levererar paketen lokalt.
  4. Proxyn använder en stödd transparent lyssnare med det socket-alternativ som krävs.

Kärnans IPv4-exempel kräver applikationsstöd för IP_TRANSPARENT. En vanlig lyssnare på samma port, eller en global icke-lokal bind-inställning, bevisar inte det stödet.

ObservationNästa kontroll
Inga relevanta inkommande paketTrafikväg och ingångsgränssnitt
Paket anländer; avlyssningsräknaren står stillAdressfamilj, kedja och matchningsvillkor
Regeln matchar; lokal leverans misslyckasMarkering och val av policyrutt
Socketen lyssnar; applikationen ser ingetTransparent socketförmåga och lyssnarens ägare
Begäran börjar; senare svar misslyckasMatchning av etablerad socket och returrutter

Spara den inlästa konfigurationen och nätverksnamnrymden med varje observation. En senare regel kan skriva över en markering eller välja en annan rutt. Om avlyssningen sker på värden medan lyssnaren körs i en container levererar inte en giltig värdlokal rutt automatiskt in i den containern.

Räkna med senare paket

Kärnexemplet innehåller socketmatchning och en DIVERT-väg som markerar paket som tillhör transparenta sockets. Om den utelämnas kan senare trafik stanna på en annan väg även när den första avlyssningen lyckas.

Använd applikationens stödda transparenta läge och motsvarande kärndokumentation för varje adressfamilj. Ett IPv4-kommando för lokal rutt konfigurerar inte IPv6, och stöd i en familj bevisar inte socketbeteendet i den andra.

TPROXY genererar inte heller någon SOCKS-förhandling. En komponent från transparent till SOCKS måste fortfarande hitta destinationen och förhandla med sin uppström.

Byta från REDIRECT

Notera hur den befintliga applikationen får den ursprungliga destinationen. REDIRECT ändrar destinationen och förlitar sig på rätt återställningsmekanism; TPROXY behöver sin transparenta socket och routinguppsättning. Välj efter applikationen och källadresspolicyn.

Koppla räknare till den valda rutten, socketförmågan och applikationsloggen innan du byter avlyssningsläge. På en distribution som tillhandahåller de nödvändiga funktionerna är ett saknat leveranssteg en bättre utgångspunkt än att kompilera om kärnan.

Relaterade artiklar