GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Woher weiß ein transparenter Socks-Proxy, welche Ziel-IP verwendet werden soll?

Mir sind zwei SOCKS-Proxys bekannt, die transparentes Proxying für jede ausgehende TCP-Verbindung unterstützen:Tor und Redsocks. Im Gegensatz zu HTTP-Proxys können diese SOCKS-Proxys beliebige transparent weitergeben ausgehende TCP-Verbindung, einschließlich verschlüsselter Protokolle und Protokolle ohne Metadaten oder Header.

Beide Proxys erfordern die Verwendung von NAT, um ausgehenden TCP-Datenverkehr an den lokalen Port des Proxys umzuleiten. Zum Beispiel, wenn ich Tor mit TransPort 9040 betreibe Auf meinem lokalen Rechner müsste ich eine iptables-Regel wie diese hinzufügen:

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

Meines Wissens würde dies die ursprüngliche Ziel-IP und den Port durch 127.0.0.1 ersetzen und 9040 , da dies also ein verschlüsselter Stream (wie SSH) oder einer ohne Header (wie Whois) ist, woher kennt der Proxy die ursprüngliche Ziel-IP und den Port?

Akzeptierte Antwort:

So funktioniert es:

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 überschreibt die ursprüngliche Zieladresse, merkt sich aber die alte. Der Anwendungscode kann es dann abrufen, indem er nach einer speziellen Socket-Option SO_ORIGINAL_DST fragt .


Linux
  1. Wie verwende ich die CONNECT-Methode auf einem HTTP-Proxy mit Telnet?

  2. Wie verwendet man „what“ für einen Alias-Befehl?

  3. Welchen Pfad verwendet „sudo“ für die Suche nach „?

  4. Woher weiß Gcc, wo Boost installiert ist?

  5. Wie richte ich curl ein, um dauerhaft einen Proxy zu verwenden?

Linux-Dateibefehl:Was macht er und wie wird er verwendet?

Wie verwende ich Proxy in der Linux-Befehlszeile?

So verwenden Sie den which-Befehl in Linux

Wie kann ich HTTP über SSH über SOCKS tunneln?

Wie kann ich SSH mit einem SOCKS 5-Proxy verwenden?

Wie viele Daten verwendet SSH normalerweise?