我已经阅读了有关Raspberry Pi项目的教程。简而言之,该项目包括一个TOR中间盒AP,它通过以太网接口连接到互联网,客户端可以通过它的WiFi接口连接到覆盆子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代理如何知道真正的目标端口?
答案 0 :(得分:0)
有一个内核API(getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, (struct sockaddr*) &orig_addr, sizeof(orig_addr))
)可供代理知道实际请求的目的地。
顺便提一下,新的TPROXY目标方法比REDIRECT更强大(可以双向透明),但需要额外的设置(--tproxy-mark
然后需要ip rule fwmark ...
和代理现在使用setsockopt(fd, SOL_IP, IP_TRANSPARENT, &flag, sizeof(flag))
,然后使用比REDIRECT更多的标准方法。 TOR不需要,但新应用程序可能不再使用REDIRECT了。