Я знаю о двух прокси SOCKS, поддерживающих прозрачное прокси для любого исходящего TCP-соединения: Tor и redsocks . В отличие от прокси-серверов HTTP, эти прокси-серверы SOCKS могут прозрачно проксировать любое исходящее TCP-соединение, включая зашифрованные протоколы и протоколы без метаданных или заголовков.
Оба этих прокси-сервера требуют использования NAT для перенаправления любого исходящего TCP-трафика на локальный порт прокси-сервера. Например, если я запускаю Tor TransPort 9040
на своей локальной машине, мне нужно добавить правило iptables, например:
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 9040
Насколько мне известно, это заменит исходный IP-адрес назначения и порт на 127.0.0.1
и 9040
, учитывая, что это зашифрованный поток (например, SSH) или поток без заголовков (например, whois ), как прокси-сервер знает исходный IP-адрес и порт назначения?