Pandorabox之透明代理

  1. 1. SS-tunnel
  2. 2. ChinaDNS
  • DHCP/DNS
  • Update
    1. 1. OpenWrt SDK
    2. 2. 依赖
    3. 3. 下载&编译
  • 2017-8-15 update
  • enter description here
    先修改Lan接口,避免在无线中继的时候发生本地Lan接口与wwan接口发生冲突导致无法登陆路由器。

    网络 -> Lan -> IPv4地址, 设置为 192.168.33.1更改之后需要重新连接一下网络。

    透明代理使用shadowsocks-libevChinDNS实现。使用ssh登陆路由器,安装所需软件。

    1
    2
    3
    ssh root@192.168.33.1
    opkg update
    opkg install shadowsocks-libev luci-app-shadowsocks ChinaDNS luci-app-chinadns --force-checksum

    这个版本的软件源有点问题,所以直接opkg install基本上都过不了sha256sum检测,所以需要加上--force-checksum参数强制忽略。两个luci界面都有zh-cn汉化包,为了节省路由器空间,就不装了。

    默认的chnroute表很老了,需要更新:

    1
    2
    3
    4
    mv /etc/chnroute.txt /etc/chnroute.txt.bak
    wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /etc/chnroute.txt
    # 如果没有问题
    rm -rf /etc/chnroute.txt.bak

    然后我们需要对其进行启用。

    shadowsocks需要启动ss-redir来实现透明代理和ss-tunnel来实现UDP转发保证国外DNS查询不被污染。下面是具体需要注意的配置。

    SS-tunnel

    1
    2
    3
    4
    {
    "UDP Local Port": 1153,
    "Forwarding Tunnel": 8.8.8.8:53
    }

    ChinaDNS

    1
    2
    3
    4
    5
    6
    {
    "Enable DNS compression pointer": true,
    "Local Port": 1053, //不能与ss-tunnel冲突
    "CHNRoute File": "/etc/chnroute.txt",
    "Upstream Servers": "223.5.5.5,127.0.0.1:1153" //第一个是国内阿里DNS服务器,第二个是进过ss-tunnel转发后的Google DNS服务器
    }

    DHCP/DNS

    最后需要在网络->DHCP/DNS->服务器设置修改默认的DNS配置

    1
    2
    3
    4
    {
    "本地服务器": "127.0.0.1#1053", //ChinaDNS处理后的DNS服务器,可以根据ip分流。
    "忽略解析文件": true
    }

    总的来说,GoogleDNS(8.8.8.8:53)首先进过ss-tunnel转发到本地的127.0.0.1:1153上,然后通过ChinaDNS与国内DNS服务器融合成新的127.0.0.1:1053 实现了国内外分流。

    Update

    由于实用过程中还是经常不稳定,决定采用DNS-Forwarder方案。
    然而,官方并没有我的小米Mini路由架构的二进制包,只能自己动手丰衣足食了。

    OpenWrt SDK

    首先明确小米路由器Mini的架构是ramips/mt7620a而现在运行的Pandorabox 16.10基于Openwrt Barrier Breaker。

    依赖

    1
    sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk zlib1g-dev subversion mercurial

    下载&编译

    1
    2
    3
    4
    5
    curl https://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2 | tar -xjf
    cd OpenWrt-SDK-*
    git clone https://github.com/aa65535/openwrt-dns-forwarder.git package/dns-forwarder # 获取Makefile
    make menuconfig # 选择要编译的包: Network -> dns-forwarder
    make package/dns-forwarder/compile V=99

    然而,愿景很好,但是在我的Deepin上make menuconfig这步就出错,想想barrier_breaker也是很久之前的版本了,出错大概是ldxxxx,感觉应该是GCC版本不兼容的缘故,然而Deepin上GCC只有6.2.0没有官方要求的4.8,怎么办呢?当时暂时想到下面几条解决方案

    1. 在自己电脑上重新编译一份GCC4.8: 太麻烦,而且还不能保证一定能成功。
    2. 用虚拟机装老版本的Ubuntu: 太浪费时间了,本身电脑BIOS就没有开启虚拟化支持。
    3. docker? 不错可以试一下。

    docker运行老版本ubuntu镜像不用太简单,一条命令搞定:

    1
    sudo docker run -t -i ubuntu:12.04.5 /bin/bash

    然而docker版本的ubuntu太过于精简了,需要配置一下:

    1
    2
    3
    4
    5
    6
    # 安装缺失依赖
    apt-get install ccache curl
    # openwrt-sdk 编译不能以root用户进行,需要新建一个普通用户
    useradd kevin
    su kevin
    # 继续之前的编译步骤

    好了,终于编译成功了,然而还是高兴的太早,仍然报错:

    1
    * pkg_hash_fetch_best_installation_candidate: Packages for helloworld found, but incompatible with the architectures configured

    还是求助于Google,然后发现了这篇博客:小米路由器mini折腾之配置opkg篇,于是我的路由器就成砖了。hhhhhhhhh

    未完待续。。。。。。。。。。。。。。

    2017-8-15 update

    拿去店里救砖成功。刷了不死breed,但是现在反而没有什么折腾劲了。