【问题标题】:Direct ALL android traffic through SSH tunnel [closed]通过SSH隧道引导所有android流量[关闭]
【发布时间】:2012-03-08 08:52:09
【问题描述】:

我正试图从无线提供商那里完全隐藏我手机上的所有流量。

我想通过 SSH 隧道通过 iptables 将流量引导到我的家庭路由器来做到这一点(不确定它们是否有帮助?)。

手机已植根并运行 CyanogenMod 7.1(因此支持 iptables)。

我看过this question,但我仍然对细节有点不放心。 该问题描述了如何为单个端口执行此操作 - 但我如何为每个端口上的每个数据包执行此操作?

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

【问题讨论】:

    标签: android linux ssh iptables cyanogenmod


    【解决方案1】:

    这并不能解决您的用例,因为这只会引导 firefox 的流量,但您不需要 root


    TL;DR

    1. 在 android 上安装 Termux 应用程序,编辑重要提示: Termux does not receive updates on Play Store anymore。而是从 F-Droid 安装应用程序和附加组件。

    2. 在 termux 中安装 openssh pkg i -y openssh

    3. 使用 动态端口转发 ssh 进入服务器 ssh user@server -D12345

    4. 在安卓上安装Firefox Beta(目前普通火狐不支持about:config配置)

    5. 打开 Firefox Beta,然后转到 about:config

    6. 搜索proxy

    7. 查找并设置以下属性:

      network.proxy.allow_hijacking_localhost: true
      network.proxy.socks: localhost
      network.proxy.socks_port: 12345
      network.proxy.type: 1
      

      确保network.proxy.socks_port 与上面 ssh 命令中的端口匹配

    8. 完成!,您现在正在浏览 Firefox 上的 ssh 服务器


    使用 ssh-keys 的完整说明

    用法

    1. 打开 Termux 并运行 ssh user@server -D12345(如果您之前运行过此命令,则只需按 Up+Enter
    2. 使用代理配置的 Firefox 导航
    3. 完成!您的流量正在通过服务器

    安装

    设置安卓

    Termux

    1. 安装Termux

    2. 通过运行以下命令配置 ssh 客户端:

      # Ask for storage permission
      termux-setup-storage &&
      # Install openssh
      apt install -y openssh &&
      # Generate an SSH key
      ssh-keygen -t ecdsa -f ~/.ssh/id_ecdsa &&
      # Set a password for the private key
      # Get public key
      echo -e '\nCopy the following public key:'
      cat ~/.ssh/id_ecdsa.pub
      
    3. (可选)如果您可以使用 ssh 访问服务器,则运行:

      ssh-copy-id user@server
      

      如果没有,则需要手动将公钥添加到服务器。这在下面的设置服务器部分中进行了解释

    火狐

    1. 安装Firefox Beta - 如果您可以访问about:config,普通的firefox可能会工作

    2. 打开火狐浏览器,进入网址about:config,搜索proxy,进行如下配置:

      network.proxy.allow_hijacking_localhost: true
      network.proxy.socks: localhost
      network.proxy.socks_port: 12345
      network.proxy.type: 1
      

      确保network.proxy.socks_port使用部分中ssh命令中使用的端口匹配

    设置服务器

    如果您成功运行命令ssh-copy-id,则此处无需执行任何操作。
    但如果没有,则需要手动添加生成的公钥:

    echo 'public key' >> ~/.ssh/authorized_keys
    

    以后我会在这里保持最新状态:https://github.com/madacol/knowledge/blob/master/Ssh%20poor-man's-vpn%20on%20android.md

    【讨论】:

    • 非常好!具有代理设置的 Firefox Beta 改变了游戏规则!
    【解决方案2】:

    您是否尝试过使用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 来执行此操作,请查看源代码并修改启动脚本。

    【讨论】:

    • 我没有,因为这只是一个在用户空间中运行的应用程序。我想加密从启动到关闭的每个数据包。使用该应用程序,数据包将照常通过运营商,直到我启用该应用程序。
    • 在这种情况下,您需要构建自己的固件。查看 sshtunnel 源,检查它正在运行哪些命令(设置隧道、运行、代理、重定向等),并将这些命令添加到启动脚本中。 “用户空间”部分只是启动整个过程的 GUI。本质上它是一个透明代理,而 iptables 仅用于将所有流量重定向到代理。
    • 顺便说一句,它确实有一个“自动连接”选项,一旦网络可用,它将启用隧道,因此您实际上不必手动运行应用程序。
    • 非常感谢。我会在周末做这个并发布我的发现。
    • 这条规则只重定向80。无法重定向443端口
    猜你喜欢
    • 2012-01-06
    • 2011-12-06
    • 2013-03-24
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多