如何将 Ubuntu 变成 Android 手机的互联网网关

如何将 Ubuntu 变成 Android 手机的互联网网关

我想在我的 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

相关内容