通过SSH隧道直接输入所有Android流量

时间:2012-02-16 22:26:41

标签: android linux ssh iptables cyanogenmod

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

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

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

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

这个问题具有实际和学术意义。 感谢。

2 个答案:

答案 0 :(得分:3)

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

至于如何实际完成的概述:

  1. 使用ssh登录您的服务器并将HTTP代理端口转发到Android设备。因此,前往localhost:3128的任何流量实际上都会转到远程计算机(您的家庭路由器)。
  2. 由于Android没有全局代理设置,因此您将所有流量转到端口80(以及HTTPS的443)重定向到localhost:3128。这就是iptables的用武之地:
  3. iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to localhost:3128

    如果您也想重定向其他协议,则使用具有类似设置的SOCKS代理。要重定向DNS,请将端口53重定向到隧道等。

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

答案 1 :(得分:1)

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


TL; DR

  1. 在Android上安装Termux应用

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

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

  4. 在Android上安装Firefox Beta(到目前为止,纯Firefox不支持使用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键的完整说明

用法

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

安装

设置Android

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. 打开Firefox并转到URL 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