2012-02-16 101 views
3

我想完全隐藏无线提供商的手机上的所有流量。直接通过SSH隧道的所有安卓流量

我想通过iptables(通过不知道他们帮助吗?)将流量通过SSH隧道引导到我的家庭路由器来实现此目的。

这款手机已经植根并运行CyanogenMod 7.1(因此具备iptables功能)。

我已经看过this question,但是我对细节还是有些不稳定。 这个问题描述了如何为单个端口执行此操作 - 但我怎样才能为每个单一端口上的每个数据包执行此操作?

这个问题既有实际意义也有学术兴趣。 谢谢。

回答

3

您是否尝试过使用sshtunnel?仅仅使用iptables是不够的。

至于它是如何实际进行的概述:

  1. 登录到使用ssh服务器和HTTP代理端口转发到Android设备。因此,任何去往localhost:3128的流量都将实际送往远程机器(您的家庭路由器)。
  2. 由于Android没有全局代理设置,因此您将所有到达端口80(对​​于HTTPS为443)的流量重定向到localhost:3128。这就是iptables的进来:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to localhost:3128

如果你想重定向其他协议也一样,你使用SOCKS代理有类似的设置。重定向DNS,通过隧道重定向端口53等。

总而言之,要完成隐藏“所有流量”并不那么容易,所以只需使用该应用。如果您想修补Cyanogenmod来执行此操作,请查看源代码并修改启动脚本。

+0

我还没有,因为这只是一个在用户空间中运行的应用程序。我想要加密从启动开始到关机结束的每个数据包。有了这个应用程序,数据包将正常通过运营商,直到我启用应用程序。 – CatZilla 2012-02-17 14:05:26

+0

在这种情况下,您需要构建自己的固件。查看sshtunnel源代码,检查它正在运行的命令(设置隧道,运行,代理,重定向等),并将其添加到启动脚本中。 '用户空间'部分只是启动整个过程的GUI。本质上它是一个透明的代理,而iptables仅用于将所有流量重定向到代理。 – 2012-02-17 14:19:28

+0

顺便说一句,它有一个'自动连接'选项,一旦网络可用,将启用隧道,所以你实际上不必手动运行应用程序。 – 2012-02-17 14:44:38