在Ubnt USG 上部署shadowsocks-libev和ChinaDNS实现透明代理

USG用的人少,所以没人折腾怎么把某软件放在上面运行进行透明代理,erx 倒是非常成熟了,有一键脚本,造福了大家。

最开始拿到USG的时候,我就想安装ss了,但捣鼓一番下来,失败,搁置放弃,转向V2RAY

无奈V2RAY 不是特别完美,对我的小鸡负载较大,勉强地使用一段时间后,发现经常断断续续。

正好上个星期没什么事情,研究一下怎么把ss-libev安装在USG上。


首先要感谢Otokaze,没有他的帮助,我一个小白完全没法理清回路,减少不必要的弯路

此贴根源出处:https://www.zfl9.com/ss-redir.html



完整记录一下shadowsocks-libev chinadns 搭建ubnt usg 透明代理的过程

首先是一台默认设置的ubnt usg
环境是pppoe拨号dhcp打开lanip 192.168.1.1
首先
ssh连接到usg
默认账户是admin 密码在ubnt控制器里可以看到
然后进入root账户,没记错的话usg debian7 默认禁止root登陆

sudo passwd root

修改你的ROOT密碼
su
输入你要改好的密码进入root账户
接下来是喜闻乐见的各种工具 依赖环境安装

vi /etc/apt/sources.list  //加一下debian7 的源进去

deb http://archive.debian.org/debian/ wheezy main

ps:wheezy的源不太好找了,要去各大镜像站点看dist目录下有没有wheezy的文件夹,有更好的可以替换。保存之后退出(不要问我VIM怎么保存退出)

apt-get update

apt- get upgrade(有朋友说这条命令可能会对定制版的软件进行升级,不建议使用)

apt-get install vim autoconf git-core aptitude gcc gettext make wget dialog

开始安装                                                    结束安装

aptitude install libc-bin=2.13-38+deb7u10 libc6=2.13-38+deb7u10

aptitude install build-essential

这些安装是有一定顺序的,里面的一个不能少 ,2019年4月经过验证,没有问题。

然后是两个wget安装文件
wget https://github.com/jedisct1/libsodium/releases/download/1.0.11/libsodium-1.0.11.tar.gz
tar xf libsodium-1.0.11.tar.gz && cd libsodium-1.0.11
./configure && make -j2 && make install
ldconfig

第二个wget文件(别管他是什么了,我也不知道是什么)

export MBEDTLS_VER=2.4.2
wget https://tls.mbed.org/download/mbedtls-$MBEDTLS_VER-gpl.tgz
(或者https://laidycy.com/wp-content/uploads/2019/07/mbedtls-2.4.2-gpl.tgz_.zip 然后mv mbedtls-2.4.2-gpl.tgz_.zip mbedtls-2.4.2-gpl.tgz)
tar xvf mbedtls-$MBEDTLS_VER-gpl.tgz
pushd mbedtls-$MBEDTLS_VER
make SHARED=1 CFLAGS=-fPIC
sudo make DESTDIR=/usr install
popd
sudo ldconfig

接下来还是工具的安装

sudo apt-get install build-essential libtool autoconf automake

apt-get install libpcre3 libpcre3-dev

apt-get autoclean

apt-get clean

接下来我在这两个文件上吃了亏,整整装了1小时,800m的依赖,装完后一查,有不适用推荐的安装法,但没实际测试过是不是会影响实际效果(PS:这两个文件影响是的ss-lib的编译,据说在编译ss-lib的时候,./confugre –disable-documentation就能跳过下面这两个安装了)

sudo apt-get –no-install-recommends install asciidoc

sudo apt-get –no-install-recommends install xmlto

(no前面是有两个-号,我不知道要怎么让wp显示出来)

然后还是各种依赖/环境

sudo apt-get install libc-ares-dev

sudo apt-get install libev-dev

curl的安装

git clone https://github.com/curl/curl.git

bash buildconf

./configure

make

make install

然后基本上整个大环境的安装就结束了整个大环境的安装应该要差不多1小时左右吧

还漏了个tproxy,没有这个东西其他都是白说,usgtproxy模块在论坛里有,搜一下,不用自己编译了,然后扔到那个帖子29楼说的地址,目录太长了,我就不发了,各位复制黏贴一下就好了
PS:我还是把tproxy拉过来了,各位请解压后放在/lib/modules/3.10.107-UBNT/kernel/net/netfilter/

下面是tproxy的下载链接

也可以直接wget,然后mv重命名
https://laidycy.com/wp-content/uploads/2019/04/xt_TPROXY.ko_.zip
https://laidycy.com/wp-content/uploads/2019/04/xt_socket.ko_.zip

下面安装shadowsocks-libev
git clone https://github.com/shadowsocks/shadowsocks-libev
cd shadowsocks-libev
git submodule update –init –recursive
bash autogen.sh
失败的,缺少git那一步的情况                                   成功的
如果autogen.sh能正常跑完的话,那么恭喜,你能继续下一步,否则你就要回到上面的各种依赖关系,看下缺什么装什么
bash configure

make

make install

编译安装ss-lib的时候一定会有很多错误,各位可以贴上来或者自行谷歌处理,大部分都是缺少相关组件或者是某些软件版本不对造成的相关文件

ss-lib编译完了后就只剩下chinadns了

wget https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gz

tar xf chinadns-1.3.2.tar.gz

编译chinadns 这一步一般没什么错误

cd chinadns-1.3.2/

./configure

make && make install

相关文件

mkdir /etc/chinadns/

cp -af chnroute.txt /etc/chinadns/

讲解一下chinadns的判断步骤

到此 大部分文件都安装完了

这个时候,如果会写ipset iptables 规则的同学可以离开了,参照 v2ray的规则 写下去就行了

啥 你问我为什么不继续用v2ray?

我的小机器跑v2ray有点吃力,所以 想想 还是ss 这种热门的东西吧

接下来是一键脚本


此脚本是由Otokaze制作 配合usg环境进行修改了的(版权归Otokaze,已授权本人进行修改)

ss-tproxy

此压缩包里面有两个文件

ss-tproxy

ss-tproxy.conf

把ss-tproxy 放在/usr/local/bin以及/usr/bin/ 两个目录下

同时把/usr/local/bin 目录下的ss-redir ss-tunnel 复制黏贴到/usr/bin/ 再chmod 755 这两个文件(否则开机自启动脚本不会生效)

还要记得chmod -R 777 ss-tproxy

ss-tproxy.conf 放在 /etc/下面

各位要编辑的就是ss-tproxy.conf

此脚本会修改dnsmasq配置文件,由chinadns监听53端口,会停止dnsmasq的dns服务。

Vi /etc/ss-tproxy.conf

然后把你的ss信息填写至相应位置吧 chiandns信息会改的同学也可以自行修改

ss-tproxy start(开始透明代理)

ss-tproxy status 状态

ss-tproxy stop 停止

写入开机自动运行脚本

cd /config/scripts/post-config.d

vi ss-tproxy-autorun.sh

在sh文件里面写入

#!/bin/bash

sudo ss-tproxy start

保存 退出

然后重启,应该就可以享受透明代理了


Q&A:

有可能会遇到全局走外网的情况,我这次再重新录gif的时候就碰到这个问题了。

检查你的/etc/ipset.chnip文件,看下是不是为空白文件,如果是空白文件,请替换下面的下载链接文件。

git clone https://github.com/laidycy/ubnt-usg-shadowsocks-chnip.git

cd 进去后,找到ipset.chnip文件,替换掉/etc/下的同名文件

Related

43 意见

  1. 楼主,用了你的教程。国外网站我现在能正常访问了,但是国内网站打不开,比如baidu.com。
    另外,想关闭翻墙,我用了ss-tproxy stop,不生效。虽然status显示都是停了,但是仍然上不了国内网站。一定要重启usg才行。

    你遇到过么?

    • 没,感觉你的情况有两种可能:
      1:chinadns没正常工作,导致国内网站解析不正常
      2:dnsmasq的监听端口不对。
      PS:我很久没摸USG了,很多配置都忘了,可能有些地方有遗漏,如果方便的话,加我TG聊,或者留下您的TG。

  2. 目前用了unifi-switch+4个AP,看到新版edgerouter4很强大,想熬一下等对应的usg设备。目前还在用华硕AC88翻墙,wifi关掉,但vlan支持太烂,懒得折腾。edgerouter4的马力跑v2ray应该够了吧?希望能跟大神学习

    • v2ray装过一次,其实对usg的负载不算很大,但是对vps的配置有一定要求,我装v2ray时用的vps是ovz 256m的配置,跑v2实在是吃力,所以放弃了。

      相信edgerouter4更是不在话下了。
      你可以选新的万兆的那个usg啊,顺带,我不是大神,我只是一个爱折腾的人。

  3. 编译ss-libv的时候,bash configure这步错误,
    config.status: error: cannot find input file: `Makefile.in’ ,怎么办…

    • 试试 git submodule init && git submodule update

      我当时也碰到了这个问题,但不记得是不是这一步解决的了。
      参考:https://github.com/shadowsocks/shadowsocks-libev/issues/1093

  4. 还有个问题,装好SS之后,每次更新(upgrade)USG之后,我所有的下载以及安装好的软件都没有了,就好像被格式化一样,是说每一次更新USG都需要重新安装一遍么?这个也太不合理了,还是说有设么办法让USG更新的时候留下我们之前做的改动?

    • 我建议去论坛问下,我装好之后就没更新了,理论上 upgrade后应该不会抹掉啊,但我也没试过。顺带问下,你的装好了?我想弄个一键脚本。

      • Ubnt的人给我回复了…看来要再想个办法了…

        Yes, it will get removed as USG don’t save any other software other than its own firmware. Other software will get removed from USG on upgrade as it removes the old firmware from USG and installs new firmware file on USG.

        However, any CLI command on USG will not remain persistent when USG is rebooted/provisioned. To save any CLI command on USG persistent, you’ll need to save the CLI command via a config.gateway.json file to make CLI changes persistent. For more information, you can refer to KB article given here:

        https://help.ubnt.com/hc/en-us/articles/215458888-UniFi-Advanced-USG-Configuration

        • 看来你的使用场景应该是企业环境,有upgrade的需求,我记得我在bbs的帖子里面就有人说了要慎重upgrade,但我也没当回事。比较方便的方法应该是弄个一键脚本出来,upgrade后直接跑一遍脚本就好了。

          • 论坛里说的是不要执行 apt-get upgrade,会更新很多ubnt定制模块到标准最新版,但是我这说的是firmware的upgrade,你在uck里面去upgrade也是一样的,难道有了新版的USG你不要upgrade么…

          • 另外,我到目前还是遇到dnsmasq一直启动监听的问题,还有tcpfastopen的问题,虽然我用的是最新版的ss-proxy

    • ss-tproxy 不是直接扔进去就可以使用了嘛?如果需要编译的话,我建议还是向原作者询问一下,包括这版ss-tproxy,也是我们两个一步一步试出来的。

  5. 博主你好,现在gfw已经屏蔽了ss协议,只能通过v2ray出国留学了,能不能介绍一下怎么在usg上部署v2ray进行透明访问呢?

    • GFW没屏蔽啊,我用SS好好的啊,是你的IP被阻断了吧?V2的话,在安装方面要更简单一些,其实整个流程还是一样的。部署chinadns,然后再部署v2ray,缺什么装什么。
      有时间的话,我再出一个V2RAY的教程吧。

  6. 已经成功翻墙,谢谢!但是碰到一个问题,USG上的端口转发都不生效了!你碰到这样的问题吗?

    • 我的USG没做端口转发,有可能是apt upgrade的锅,论坛里警告不要upgrade,会把定制版本的软件升级成标准版。有可能是这里出问题了,一会我试下看下我的端口转发。

      • 这个网站谈到端口转发,用的是ss-tproxy的3.0版本,如果替换成这个还能正常翻墙吗?https://ruby.ctolib.com/zfl9-ss-tproxy.html,

        • 还是Otokaze啊,他的博客在https://www.zfl9.com/。你可能需要对比一下改版的ss-tproxy和v3版的区别,然后删掉v3中一些不要的功能,应该就能保留端口转发了。

          我等会下载对比以下两个文件看下。

  7. I’m really enjoying the theme/design of your weblog.
    Do you ever run into any web browser compatibility problems?
    A handful of my blog audience have complained about
    my site not working correctly in Explorer but looks great in Opera.
    Do you have any advice to help fix this issue?

  8. erx是2.0.6固件
    运行apt-get install vim autoconf git-core aptitude gcc gettext make wget dialog之后提示
    You don’t have enough free space in /var/cache/apt/archives/.

留下一个答复

请输入你的评论!
请在这里输入你的名字

Latest posts

Categories