Linux端口转发到Socks代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux端口转发到Socks代理相关的知识,希望对你有一定的参考价值。

我已经阅读了有关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代理如何知道真正的目标端口?

答案

有一个内核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

以上是关于Linux端口转发到Socks代理的主要内容,如果未能解决你的问题,请参考以下文章

内网代理转发工具

使用 SSH 隧道实现端口转发SOCKS 代理

正反向代理

端口转发总结归纳

Linux-ssh隧道详解

ssh代理设置