Linux端口转发到Socks代理

问题描述 投票:0回答:1

我已经阅读了有关Raspberry Pi项目的教程。简而言之,该项目包括一个TOR中间盒AP,它通过以太网接口连接到互联网,客户端可以通过它的WiFi接口连接到raspberry Pi WLAN网络。进入WiFi接口的所有流量都通过iptables端口转发命令重定向到本地TOR SOCKS代理。

sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --syn -j REDIRECT --to-ports 9040

现在我的问题是,TOR socks代理如何根据应用程序的请求知道真正的套接字目标端口?例如,假设我使用firefox打开stackvoerflow.com。 Firefox向stackoverlfowIP发出请求:80 ..但iptables将请求路由到localhost:9050,应用程序是否知道中间存在SOCKS代理(假设代理设置未在浏览器设置中设置)?如果目标端口已被iptables从80更改为9050,那么TOR本地SOCKS代理如何知道真正的目标端口?

linux sockets networking proxy
1个回答
0
投票

有一个内核API(getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, (struct sockaddr*) &orig_addr, sizeof(orig_addr)))可供代理知道实际请求的目的地。

A simple example daemon there

顺便说一下,有一个新的TPROXY目标方法比REDIRECT更强大(可以是双向透明),但需要额外的设置(--tproxy-mark然后需要ip rule fwmark ...,代理现在使用setsockopt(fd, SOL_IP, IP_TRANSPARENT, &flag, sizeof(flag))然后使用比REDIRECT更多的标准方法)。 TOR不需要,但新应用程序可能不再使用REDIRECT。

TPROXY example

© www.soinside.com 2019 - 2024. All rights reserved.