GNU/Linux >> Znalost Linux >  >> Linux

Jak zástupce transparentních ponožek ví, kterou cílovou IP adresu použít?

Vím o dvou SOCKS proxy, které podporují transparentní proxy pro jakékoli odchozí TCP spojení:Tor a redsocks. Na rozdíl od HTTP proxy mohou tyto SOCKS proxy transparentně zastupovat jakékoli odchozí TCP spojení, včetně šifrovaných protokolů a protokolů bez metadat nebo hlaviček.

Oba tyto proxy vyžadují použití NAT k přesměrování veškerého odchozího TCP provozu na lokální port proxy. Například, pokud používám Tor s TransPort 9040 na svém místním počítači bych potřeboval přidat pravidlo iptables takto:

iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 9040

Pokud je mi známo, toto by nahradilo původní cílovou IP a port 127.0.0.1 a 9040 , takže vzhledem k tomu, že se jedná o šifrovaný stream (jako SSH) nebo bez hlaviček (jako whois), jak proxy zná původní cílovou IP a port?

Přijatá odpověď:

Dělá to takto:

static int getdestaddr_iptables(int fd, const struct sockaddr_in *client, const struct sockaddr_in *bindaddr, struct sockaddr_in *destaddr)
{
        socklen_t socklen = sizeof(*destaddr);
        int error;

        error = getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, destaddr, &socklen);
        if (error) {
                log_errno(LOG_WARNING, "getsockopt");
                return -1;
        }
        return 0;
}

iptables přepíše původní cílovou adresu, ale pamatuje si starou. Kód aplikace jej pak může načíst dotazem na speciální volbu soketu SO_ORIGINAL_DST .


Linux
  1. Jak používat metodu CONNECT na HTTP proxy pomocí Telnetu?

  2. Jakou cestu používá `sudo ` k hledání “?

  3. Jak Gcc ví, kde je Boost nainstalován?

  1. Jak zjistit, který sériový port se používá?

  2. Jak nakonfigurovat docker pro použití proxy

  3. Jak nastavím curl, aby trvale používal proxy?

  1. Jak používat `který` u aliasovaného příkazu?

  2. Jak mohu vědět, který proces používá swap?

  3. Jak mohu použít SSH s proxy SOCKS 5?