netgear R7000 shadowsocks客户端

各种不爽,最近拿到款netgear r7000路由器几个月,竟然无法翻墙。

第三方dd-wrt,刷了之后却无法安装软件,等于废了120%,还各种不稳定。 至于openwrt,不用提了,满脸伤心泪,早知道当初就弄个openwrt列表中的了。 后来实在受不了openwrt raspberry pi的各种问题(虽然最后有可能是个伤心的误会),决 定试试tomato了。刷了之后,还是一堆问题,最后却没办法直接刷回去了。

既然tomato也是开源的,那就找找源代码吧,结果竟然找到了完整的源代码,感谢shibby

我之前也找了dd-wrt源代码,由于不在官方列表中,各种不爽,各种缺失,最后不了了之。 在和GFW的激烈战斗中,终于下完整了所有源代码。首先编译检查,没有任何问题。我并不 想将shadowsocks编译到固件中,这样不利于更新,因此,我决定放到jffs2中。

结果与使用方法

shadowsocks客户端 将jffs挂载到opt下,我的这个版本的选项在Administration->JFFS中,对tomato不熟悉, 没有发言权,enable JFFS, 然后format/erase, 填入”当挂载的时候执行命令”以下内容

mount -o bind /jffs/opt /opt && /opt/bin/start_cron.sh

start_cron.sh在压缩包的bin目录下,之所以这样弄是为了将检查shadowsocks和pdnsd的脚 本加入到定时任务中,这样一旦由于某种原因挂了之后,可以自动的重新启动。之所以这样 弄是因为在我的这个版本中,计划任务的这个无论如何都无法启动执行,不知道tomato的这 个问题原因在那儿,而tomato又使用的是cru,并非常用的cron,反正就这样,能用就行。 pdnsd和shadowsocks的配置都在etc中,自己酌情配置,pdnsd中我配置的是google的dns,走 tcp。

自己编译

我编译出来的shadowsocks可能比较老旧,如果你想自己编译的话,这里就是方法了:

  1. 将shadowsocks和pdnsd的源代码放置到源代码的router目录下。
  2. 在router/Makefile中添加如下内容:
obj-y += shadowsocks-libev
obj-y += pdnsd

shadowsocks-libev:
    cd shadowsocks-libev && CC=$(CC) STRIP=$(STRIP) \
        CPPFLAGS="-Os -Wall $(EXTRACFLAGS) -ffunction-sections -fdata-sections -I$(TOP)/zlib" \
        LDFLAGS="-L$(TOP)/zlib -ffunction-sections -fdata-sections -Wl,--gc-sections -fPIC" \
        $(CONFIGURE) --prefix=$(INSTALLDIR)/shadowsocks-libev

shadowsocks-libev-install: shadowsocks-libev
    $(MAKE) -C shadowsocks-libev install

pdnsd: 
    cd pdnsd && CC=$(CC) STRIP=$(STRIP) \
        CPPFLAGS="-Os -Wall $(EXTRACFLAGS) -ffunction-sections -fdata-sections -I$(TOP)/zlib" \
        LDFLAGS="-L$(TOP)/zlib -ffunction-sections -fdata-sections -Wl,--gc-sections -fPIC" \
        $(CONFIGURE) --prefix=$(INSTALLDIR)/pdnsd --with-cachedir=$(INSTALLDIR)/pdnsd

pdnsd-install: pdnsd
    $(MAKE) -C pdnsd install
  1. 编译路由器代码,在我这边是这样子的:
make r7000e
  1. 编译后的那两个软件包在arm-uclibc/install下的各自的目录中
  • powerd

    编译tomato的ss只要有工具链就行了吧,目前shibby的tomato用的工具链是hndtools-arm-linux-2.6.36-uclibc-4.5.3.tar.bz2

    • rix

      是这样子的。我本来的打算是实在不行编译整个固件的,防止我用的和他的不兼容,因此拖了整个代码库。而且,r7000本身的固件空间是很大的,只是不支持写入,写入的话就只能是jffs了。

  • 编译tomato出现了一大堆诡异的错误!不知道楼主遇到没!还有这个这个添加方式是按照makefile的形式写!还是直接把他们添加到后面?

    • rix

      有可能是编译器路径没弄对把。
      最好是先不修改直接编译,如果没有问题的话再添加新的模块。
      makefile的形式,是添加到makefile文件中的。

      • 博主能否说明一下makefile的添加格式,是否按照tomato所给的格式还是按照你上面给的:
        添加该软件,跟着就添加编译参数?
        还是根据tomato 所给的格式添加?

        • rix

          将文章中代码复制到makefile中,最好在后面

      • rix

        还有.openwrt 现在支持r7000了。我自己无论从二次开发编译的角度而言,还是从使用感受而言,都更新欢openwrt