首页 文章

Linux端口转发到Socks代理

提问于
浏览
0

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

1 回答

  • 0

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

    A simple example daemon there

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

    TPROXY example

相关问题