我想在我的 Android 上使用学校的互联网,问题是他们有一个 Squid 代理,而我手机上的许多应用程序根本不使用代理。
显而易见的解决方案是在我的 Android 上安装透明代理,强制所有应用程序通过它进行连接。问题是我需要 root 手机才能使用,但我不想这样做,因为这不是我的手机,root 有点冒险-
另一个更安全的解决方案是让我的计算机作为网关运行,因此我将我的 Ubuntu IP 放在手机的网关参数中。
我在我的 ubuntu (cntlm) 上运行了一个小型代理,因此我将 Android 流量重定向到它。我使用“iptables”执行了以下操作:
iptables -t nat -A PREROUTING -s 10.0.1.118 -p tcp -j REDIRECT --to-ports 8888
iptables -t nat -A PREROUTING -s 10.0.1.118 -p udp -j REDIRECT --to-ports 8888
10.0.1.118是手机的IP,8888是cntlm(我电脑上的代理)的端口。
现在,在手机上:当我进入www.google.com
导航器时,什么也没有得到(未找到网站,Firefox 错误消息)。
但是,当我输入http://74.125.143.101
(Google 的 IP)时,我收到来自学校代理的错误消息(所以它在某种程度上起作用了 - 我的电脑将手机的流量重定向到 Squid 代理)。
错误信息是:
尝试处理请求获取时无法检索所请求的 URL
/ http/1.1
host 74.125.143.101
user-Agent
……
我认为问题出在“GET”标头中,应该是GET 74.125.143.101 HTTP/1.1
。但我不明白发生了什么,而且我是一名经过认证的 CCNA。
答案1
你可以使用这个
在手机上配置与在 ubuntu 上使用的相同的代理端口,并将代理 IP 配置为 ubuntu 服务器的 IP。
在你的 ubuntu 上执行此操作
iptables -t nat -A POSTROUTING -s 1.1.1.1 -j SNAT --to 1.2.3.4
iptables -t nat -A PREROUTING -s 1.1.1.1 -d 1.2.3.4 -j DNAT --to 5.6.7.8
1.1.1.1 是电话 IP
1.2.3.4 是 ubuntu IP
5.6.7.8 是代理服务器 IP
并启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
答案2
您正在重定向所有内容。包括 DNS 流量。这不起作用;CNTLM 不代理 DNS。
尝试明确允许端口 53 不受干扰地通过:
iptables -t nat -I PREROUTING -s 10.0.1.118 -p tcp --dport 53 -j ACCEPT iptables -t nat -I PREROUTING -s 10.0.1.118 -p udp --dport 53 -j ACCEPT
答案3
解决方案是添加:
1- DNS 服务器:将 DNS 流量重定向到该服务器,其余 udp 流量重定向到 CNTLM
这并不能完全解决问题,无论我输入网站名称还是 IP,都会收到相同的错误(在安装 DNS 服务器之前,我输入网站 IP 时就会收到错误,因此 DNS 解析有效)
2- 在分析了有/无代理的情况下手机的流量后,我得到了以下信息:
没有代理
获取/http/1.1
主机 74.125.143.101
用户代理 ...
..
使用代理
获取 74.125.143.101/ http/1.1
主机 74.125.143.101
用户代理 ...
因此解决方案是添加主机名以获取标头,我将编写一个应用程序
我确信它会起作用 :D