OpenWrt SS Simple-obfs 混淆教程

这里可以下载编译好的 Simple-obfs for OpenWrt shadowsocks-libev:

https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/

编译、使用环境:

  • 操作系统: Ubuntu 64 bit
  • OpenWrt版本: 18.06.1
  • 路由器: NetGear WNDR4300

怎样下载OpenWrt DK

您可以下载已编译的SDK,也可以使用“make menuconfig”命令自行编译

如果编译 ipk 所使用的 OpenWrt 版本和路由器的 OpenWrt 版本不同,那么可能会有兼容性问题。为了确保兼容, 我们在同一个页面下载 imagebuilder 和 SDK

今天是2018年9月24日,适合于WNDR4300路由器 的 SDK 下载地址为: http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/

先决条件:

请参阅OpenWrt Buildroot页面以安装所需的软件以在SDK上构建软件包

注意:在某些主机上,需要安装ccache包

Ubuntu 下编译 simple-obfs ipk 详细过程

  • 安装 ccache

    sudo apt-get install ccache
    
  • 下载 OpenWrt-SDK

    cd ~/Downloads
    wget http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz
    
    tar -xf openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz
    mv openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64 openwrt-sdk
    cd openwrt-sdk-nand
    
  • 添加 feeds

    git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds
    
  • 获取 simple-obfs Makefile

    git clone https://github.com/aa65535/openwrt-simple-obfs.git package/simple-obfs
    
  • 最大化控制台,否则可能有错误

    include/toplevel.mk:136: recipe for target 'menuconfig' failed

  • 选择要编译的包 Network -> shadowsocks-libev

    make menuconfig
    

    选择 Network ---> 回车进入, 选择 simple-obfs

  • 开始编译

    make package/simple-obfs/compile V=99
    

把 openwrt-sdk-nand/packages/mips_24kc/base 下的 simple-obfs_0.0.5-3_mips_24kc.ipk 复制到 imagebuilder/packages 目录下就可以编译进翻墙固件

OpenWrt 路由器安装 simple-obfs

scp simple-obfs.ipk root@192.168.1:/tmp/
ssh root@192.168.1.1
cd /tmp/
opkg install simple-obfs

查看一下 simple-obf客户端 obfs-local 参数:

obfs-local -h

simple-obfs 0.0.5
maintained by Max Lv

usage:

obfs-local

-s <server_host>           Host name or IP address of your remote server.
-p <server_port>           Port number of your remote server.
-l <local_port>            Port number of your local server.
--obfs <http|tls>          Enable obfuscating: HTTP or TLS (Experimental)

--obfs-host <host_name>    Hostname for obfuscating (Experimental).
--obfs-uri <uri_path>      HTTP path uri for obfuscating (Experimental).

[-a <user>]                Run as another user.
[-f <pid_file>]            The file path to store pid.
[-t <timeout>]             Socket timeout in seconds.
[-c <config_file>]         The path to config file.
[-n <number>]              Max number of open files.
[-b <local_address>]       Local address to bind.


[--fast-open]              Enable TCP fast open.
                        with Linux kernel > 3.7.0.
[--mptcp]                  Enable Multipath TCP on MPTCP Kernel.

[-v]                       Verbose mode.
[-h, --help]               Print this message.

OpenWrt路由器配置 simple-obfs obfs-local ss-redir 正确上网姿势

# 登录 OpenWrt 路由器
root@192.168.1.1

cd /etc/
cp shadowsocks.json shadowsocks.nobfs.json
vi shadowsocks.json
# 改成类似如下的值:

{
    "server": "32.kige.com",
    "server_port": 80,
    "password": "killgfw",
    "local_port": 7654,
    "method": "chacha20-ietf-poly1305",
    "timeout": 600,
    "fast_open": true,
    "plugin": "obfs-local",
    "plugin_opts": "obfs=http;obfs-host=32.kige.com;fast-open"
}

深刻simple-obfs 客户端 obfs-local 参数用法

  • "server": "32.kige.com"

    服务端地址,这里写了域名,也可以写 IP 地址

  • "server_port": 80

    还记得吗,没有使用混淆数据插件 simpe-obfs 时,我们默认的 server_port 是 1098,那时的1098端口是可以自定义的,现在的 80 端口是固定的

    因为 obfs-local 要把数据发送到服务端 nginx http 服务监听的 80 端口,如果你写成 87 端口,nginx 是接收不到数据的,那么客户端和服务就无法交换数据,何谈翻墙

    明显,这里 obfs-local 在和服务端交换数据时在站前面,shadowsocks-libev 客户端 ss-redir 隐在后面

  • "local_port": 7654

    这是 ss-redir 在本地监听的端口,可以自定义,只要和 /usr/bin/ss-firewall-asia 转发数据的端口一致就可以了

    iptables 把需要加密和混淆的数据发到路由器 7654 端口,ss-redir 收到后和再和 obfs-local 一起加密和混淆数据,再由 obfs-local 发送到 32.kige.com:80

  • "method": "chacha20-ietf-poly1305"

    升级版数据加密算法,被检测出数据特征的概率较小

    如果用 xchacha20-ietf-poly1305 则更为安全,是目前最安全的加密算法,不过可能比 chacha20-ietf-poly1305 消耗更多的计算资源

  • "fast_open": true

    操作系统开启 TCP fast_open 后才能在 config.json | shadowsocks.json 中设置

    "fast_open": true

TFO开启成功以后,数据交换的速度会更快一点

相关资源: