用 EdgeRouterX 路由器与 UAP-AC-LR 搭建翻墙环境的介绍。
来源: https://www.lifetyper.com/2016/12/bypass-gfw-with-shadowsocks-and-dnsmasq-on-edgerouter-x.html
正文年终将至,给自己发了个年终奖,买了台 EdgeRouterX 和 UAP-AC-LR,AP 这部分没什么好讲的,设置都很简单,只是吐槽一下那个 CloudAccess 基本是个鸡肋。EdgeRouter 的系统真的好强大,根本就是一台运行 Debian 的 Linux 电脑,256M 的 RAM/NAND Flash 和双核 880Mhz 的 CPU 也十分给力,听说有人直接在路由器上编译一些 package。
任何路由器到手第一件事就是翻墙,EdgeRouterX 也不例外。EdgeRouterX 当前 (1.9.1) 的固件中的 dnsmasq 已经有 ipset 支持了,所以不需要额外处理。ipset 和 iptables 命令也都内置,但是注意这两个命令只有 root 权限才能用,所以你用自己的账号 ssh 上去之后,先切换到 root 吧:
网上已经有不少关于给 edgerouterx 编译 shadowsocks 的文章了,不过真的很乱,恕我直言,没有一篇文章写得完整又全部正确的,总有一些大大小小的坑要踩,这些文章中写得最接近完美的是这篇,但还是有点小错误。而且,好像最新的也就是 2.4.6 版,官方代码都到 2.5.6 了啊,这编译代码的还没写代码的勤快啊,还是自己动手吧。
放弃交叉编译,直接用 QEMU 虚拟 MIPSEL 的 CPU 来跑一个 debian wheezy 系统吧,直接原生编译。注意到 EdgeRouterX 是 MIPSel 架构的 (EdgeRouter Lite 是 MIPS),去这里下载现成的系统:
根据下载页面的介绍,下载了 vmlinux-3.2.0-4-4kc-malta 和 debian_wheezy_mipsel_standard.qcow2 这两个文件,后一个就是我们要用的系统了,现在只有两百多兆,等你搭建完环境之后,大概是 3 个 G。。。。
对了,你还得先装 QEMU,这个在 Mac 下直接用 homebrew 安装就好了。
安装完之后可以直接按下载页面的参数启动 32 位模拟机的 debian 系统,不过默认好像只分配 128M 内存,可以自己加 – m 参数调到 256M,这也是 32 位模拟机的上限了。
默认的登陆名和密码都是 root,登录之后安装编译所需的工具:
不过你是通过 git 还是 wget 下载源码 tarball,先 cd 进入源码目录,然后开始编译:
按 shadowsocks 官方的介绍这里也是要添加 – b 参数的,而那篇文章漏掉了,不加这个参数你可能会碰到 no upstream tarball 的错误,这个 – b 参数其实就是跳过这个打包源码的工作,因为编译本身并不需要 tarball。
编译完成之后的 deb 文件是在源码目录的上一层的,所以不要在源码目录里继续找了,同时生成的还有个 libshadowsocks 的 deb 文件,不知道是干啥的。
怎么把文件传出来呢?SCP 直接传到路由器上就行了。我还不知道 QEMU 模拟机和宿主机之间怎么复制粘貼,网上那个端口重定向后 ssh 到 qemu 模拟机的方法也没成功,这些不影响使用就先略过了。
注意 scp 要复制到路由器的 / tmp 目录,因为你默认只有路由器的非 root 账户 (网上的修改 EdgeOS 的 root 账户改用明文密码登录的方法我也没成功),传到别的目录是没权限的。
ssh 到路由器之后用 dpkg 安装?嗯,还会报错,提示 shadowsocks 安装缺少一个必须的 apg 包,看到这个错误我几乎要崩溃了,难道还要自己去编译一个 apg?还好,edgeos 其实就是 debian,直接添加 debian 的源就可以安装 apg 了,也就几百 K 而已。注意在 edgeos 上使用 debian 源的时候适应要注意看信息提示,因为安装一个 pip 就 40 多 M,直接会让路由器的存储空间爆掉。
在 ssh 到路由之后用如下命令添加源:
然后
然后就可以安装 shadowsocks 了。
但是官方的 shadowsocks-libev 默认的配置文件是做服务器用的,我需要的 ss-redir 和 ss-tunnel 都没启动。所以我就修改了一下 / etc/init.d/shadowsocks-libev 文件,顺便把创建 ipset 和防火墙转发规则一起弄进去了。说实话,这个文件里有些东西我都没看懂,只是照着原来的文件和参考别人的一些配置文件改的。
注意一下就是 ss-redit 和 ss-tunnel 都会有 localport 参数,而且都不同,所以配置账户的 / etc/shadowsocks-libev/config.json 文件里就不要写 localport 这一项了,我已经写在配置文件中了,分别是 1080 和 5300。
最后往 / etc/dnsmasq.d 目录下放一个 gfw-list.conf 文件,内容无非就是 ipset 分流和把域名指定用 ss-tunnel 解析, 类似这样:
最后,上文件。EdgeRouterX_ShadowSocks.tar
没有评论:
发表评论