-
Notifications
You must be signed in to change notification settings - Fork 80
Home
Last updated on 2018/03/04
使用目前流行的 IP白名单 方式,通过维护一份国内 IP 的列表, 实现自动翻墙的透明代理, 为合理的科学上网提供便利. 这个教程的唯一目的是为了个人学习、个人满足工作查资料的需要, 请不要在国内的公共社区或公共场合传播,由此引发的 不可预知的责任,本资源一概不承担, 还请网友见谅。
本文基于网络上大量资料整理,恕在此不一一列举,没有大量网友的无私分享,就不会有这个文章。
本部署脚本原始基于华硕(ASUS) RT-AC66U, RT-AC87U, RT-5300 架构上实测成功, 应该适合于任何支持 Entware 包管理的 Merlin 或 OpenWRT 系统, 思路是一样的。
- 使用 ss+udprelay 部署, 要求梅林固件版本不低于: 380.68+, (需要 tproxy 支持), 其他部署方式不需要。
- opkg 路由器包管理系统, Entware-ng
- ss-redir
- 一台能够使用 ssh 登陆梅林的 Linux 宿主机(母鸡), Window 下请首先安装虚拟机.
- 一定的 CLI 操作能力.
假设你的 U 盘驱动器在 Linux 的设备为 /dev/sdd1
# mkfs.ext3 /dev/sdd1
注意!! 以上操作需谨慎, 设备一定搞对, 因为这是格式化操作, 本文不对因用户不了解, 造成的任何数据丢失, 承担责任!
将 U 盘插入到路由器 U 口上, 然后登陆路由器, 按照以下提示操作:
- 系统管理 => 系统设置
- ``Format JFFS partition at next boot
选择
是`。 -
Enable JFFS custom scripts and configs
选择是
。 -
Enable SSH
选择LAN+WAN
, 或者LAN
如果你只想通过网线联网时, 才登录 ssh. -
SSH Authentication key
, 将你的ssh公钥
粘帖到这里, 不懂啥是公钥, 请自行百度. - 最后, 点击
应用本页面设置
,等待提示完成后, 务必重新启动路由器, 确保再次进来时,Format JFFS partition at next boot
选项已经恢复成否
. - 测试 ssh 登录是否成功, 假设 192.168.1.1 是你的路由器 IP:
$ ssh admin@192.168.1.1
如果出现了如下提示符, 进入下一步.
ASUSWRT-Merlin RT-AC87U 380.65-0 Fri Feb 3 05:19:42 UTC 2017
admin@RT-AC87U-4A68:/tmp/home/root#
admin@RT-AC87U-4A68:/tmp/home/root#
7. 键入命令 entware-setup.sh
, 来初始化包管理系统 opkg.
admin@RT-AC66U-20F0:/tmp/home/root# entware-setup.sh
如果你的 U 盘分区格式没问题,这个脚本会出现类似如下提示让你选择:
admin@RT-AC66U-20F0:/tmp/mnt/sda/asusware/etc# entware-setup.sh
Info: This script will guide you through the Entware installation.
Info: Script modifies "entware" folder only on the chosen drive,
Info: no other data will be changed. Existing installation will be
Info: replaced with this one. Also some start scripts will be installed,
Info: the old ones will be saved on Entware partition with name
Info: like /tmp/mnt/sda1/jffs_scripts_backup.tgz
Info: Looking for available partitions...
[1] --> /tmp/mnt/sda
=> Please enter partition number or 0 to exit
[0-1]:
此时选择 1 即可, 等待安装完成.
如果运行 opkg --version
, 返回对应的版本信息, 表示安装成功, exit
退出路由器.
请注意: 下面的步骤是在你的宿主机( Linux 工作电脑上)上操作, 而不是在你的路由器上.
下载 链接. 如果你使用 mac 或 linux, 使用下面的 curl 命令就足够了.
$: curl -L https://github.com/zw963/asuswrt-merlin-transparent-proxy/archive/master.zip > transparent-proxy.zip
$: unzip transparent-proxy.zip
Archive: transparent-proxy.zip
ee43fd6ad2aa2e890b7f792c309fa5e270442676
creating: asuswrt-merlin-transparent-proxy-master/
inflating: asuswrt-merlin-transparent-proxy-master/.gitignore
inflating: asuswrt-merlin-transparent-proxy-master/LICENSE
inflating: asuswrt-merlin-transparent-proxy-master/README.md
creating: asuswrt-merlin-transparent-proxy-master/functions/
inflating: asuswrt-merlin-transparent-proxy-master/functions/deploy_start.sh
inflating: asuswrt-merlin-transparent-proxy-master/generate_dns
creating: asuswrt-merlin-transparent-proxy-master/route/
creating: asuswrt-merlin-transparent-proxy-master/router/opt/
creating: asuswrt-merlin-transparent-proxy-master/router/opt/etc/
creating: asuswrt-merlin-transparent-proxy-master/router/opt/etc/dnsmasq.d/
extracting: asuswrt-merlin-transparent-proxy-master/router/opt/etc/dnsmasq.d/foreign_domains.conf
creating: asuswrt-merlin-transparent-proxy-master/router/opt/etc/init.d/
inflating: asuswrt-merlin-transparent-proxy-master/router/opt/etc/init.d/S22ss-tunnel
inflating: asuswrt-merlin-transparent-proxy-master/router/opt/etc/iptables.sh
inflating: asuswrt-merlin-transparent-proxy-master/router/opt/etc/patch_router
inflating: asuswrt-merlin-transparent-proxy-master/router/opt/etc/restart_dnsmasq
inflating: asuswrt-merlin-transparent-proxy-master/ss+dnsmasq
inflating: asuswrt-merlin-transparent-proxy-master/ss+dnsmasq+chinadns
首先进入项目目录
$ cd ~/asuswrt-merlin-transparent-proxy-master
创建 shadowsocks 配置文件 router/opt/etc/shadowsocks.json 脚本.
$ touch router/opt/etc/shadowsocks.json
使用编辑器打开 shadowsocks.json, 内容示例如下.
// 这只是一个例子, 如果你要复制修改, 麻烦先手动删除所有 // 开头的注释!
{
"server":"123.123.123.123", // 这是你国外服务器地址(服务器上应该运行一个 shadowsocks server)
"server_port": 12345, // ss-server 监听的端口
"local_address":"192.168.1.1", // 确保这个地址设为你的路由器 ip 地址
"local_port": 1080, // 无需更改
"password": "yours_password", // ss-server 上设定的密码.
"timeout":600, // 不用改
"method":"aes-256-cfb" // ss-server 上设定的加密方式
}
此时有三个选择:
- ss+chinadns, 较好的兼容国内网站, 省流量, 但是某些运营商线路, 访问某些国外网站可能会比较慢, 这是因为大部分没有被墙的网站走的是直连, 首选, 老的 MIPS 架构路由器也可用.
- ss+chinadns+dnscrypt 这应该是目前最安全的方式, 因为加密传输嘛. 但是这个也是最麻烦的, 因为你必须在远程服务器上架设 dnscrypt server, 详见 dnscrypt-wrapper
- ss+dnsmasq+dnscrypt 也是加密 DNS 传输, 因为 DNS 投毒, 大家都懂的.但是使用的是我自己的白名单规则, 我个人一些老的路由器(AC66U) 上, 都在用这个, 一直工作的很好, 当然, 前提是你的 VPS 需要架设 dnscrypt server.
- ss+udprelay (仅 ARM 架构支持), 只需要 ss-redir 一个命令自己全部搞定, AC68U+ 的路由器不妨用这个.
因为作者主要用 ss+dnsmasq+dnscrypt 和 ss+udprelay, 因此不保证其他部署方式一直可用.
此时,在你的电脑上应该已经可以自动 ssh 登陆到你的路由器,
假设路由器 ip 地址是 192.168.50.1 (或域名 router.asus.com), 则在你的 宿主电脑上
执行以下命令.
$ ./ss+chinadns admin@192.168.50.1
或
$ ./ss+udprelay admin@192.168.50.1
等待完成, 如果无法翻墙, 按照以下方式尝试
- 断掉 WiFi 尝试再连接, 试试
- 如果 VPS 线路比较差, 等几分钟再试下, 是一个不错的建议.
- 重启路由器, 等启动完成后, 再试试.
如果还上不了, 可能部署或配置文件出了问题.
下面是 ss+dnsmasq+dnscrypt 安装成功输出示例, 供部署参考.
╰─ $ ./ss+dnsmasq+dnscrypt admin@192.168.50.1
rsync is not installed in remote host, fallback to use scp command.
dnscrypt-proxy.sh 100% 186 73.8KB/s 00:00
foreign_domains.conf 100% 34 12.1KB/s 00:00
iptables.sh 100% 4793 1.5MB/s 00:00
iptables_disable.sh 100% 466 204.2KB/s 00:00
patch_router 100% 1504 477.6KB/s 00:00
restart_dnsmasq 100% 84 35.3KB/s 00:00
shadowsocks.json 100% 194 85.8KB/s 00:00
localips 100% 265 109.0KB/s 00:00
update_ip_whitelist 100% 488 199.2KB/s 00:00
update_dns_whitelist 100% 463 191.2KB/s 00:00
chinadns_chnroute.txt 100% 121KB 3.6MB/s 00:00
user_ip_whitelist.txt 100% 35 14.3KB/s 00:00
user_domain_name_whitelist.txt 100% 42 18.3KB/s 00:00
remote host missing bash, try to install it...
Installing bash (4.3.42-1a) to root...
Downloading http://pkg.entware.net/binaries/armv7/bash_4.3.42-1a_armv7soft.ipk
Installing libncurses (6.0-1c) to root...
Downloading http://pkg.entware.net/binaries/armv7/libncurses_6.0-1c_armv7soft.ipk
Installing libncursesw (6.0-1c) to root...
Downloading http://pkg.entware.net/binaries/armv7/libncursesw_6.0-1c_armv7soft.ipk
Configuring libncursesw.
Configuring libncurses.
Configuring bash.
***********************************************************
Remote deploy scripts is started !!
***********************************************************
opkg version 0.1.8
Package libc (2.23-6) installed in root is up to date.
Package libssp (6.3.0-6) installed in root is up to date.
Installing libev (4.22-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/libev_4.22-1_armv7soft.ipk
Installing libmbedtls (2.4.2-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/libmbedtls_2.4.2-1_armv7soft.ipk
Installing libpcre (8.40-2) to root...
Downloading http://pkg.entware.net/binaries/armv7/libpcre_8.40-2_armv7soft.ipk
Package libpthread (2.23-6) installed in root is up to date.
Installing libsodium (1.0.12-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/libsodium_1.0.12-1_armv7soft.ipk
Installing haveged (1.9.1-5) to root...
Downloading http://pkg.entware.net/binaries/armv7/haveged_1.9.1-5_armv7soft.ipk
Installing libhavege (1.9.1-5) to root...
Downloading http://pkg.entware.net/binaries/armv7/libhavege_1.9.1-5_armv7soft.ipk
Installing zlib (1.2.11-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/zlib_1.2.11-1_armv7soft.ipk
Installing libopenssl (1.0.2k-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/libopenssl_1.0.2k-1_armv7soft.ipk
Configuring libev.
Configuring libpcre.
Configuring libmbedtls.
Configuring libsodium.
Configuring libhavege.
Configuring haveged.
Configuring zlib.
Configuring libopenssl.
Installing shadowsocks-libev (3.0.6-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/shadowsocks-libev_3.0.6-1_armv7soft.ipk
Installing libudns (0.4-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/libudns_0.4-1_armv7soft.ipk
Collected errors:
* resolve_conffiles: Existing conffile /opt/etc/shadowsocks.json is different from the conffile in the new package. The new conffile will be placed at /opt/etc/shadowsocks.json-opkg.
Configuring libudns.
Configuring shadowsocks-libev.
Installing dnscrypt-proxy (1.9.5-2) to root...
Downloading http://pkg.entware.net/binaries/armv7/dnscrypt-proxy_1.9.5-2_armv7soft.ipk
By default, dnscrypt-proxy will use the OpenDNS dnscrypt server.
You may choose another one if you wish:
Configuring dnscrypt-proxy.
skip install iptables
`"local_address":"192.168.50.1",' is replaced with `"local_address":"192.168.50.1",' for /opt/etc/shadowsocks.json
`UPSTREAM_PORT' is replaced with `65053' for /opt/etc/dnsmasq.d/foreign_domains.conf
`ss-local' is replaced with `ss-redir' for /opt/etc/init.d/S22shadowsocks
cat: can't open '/opt/share/dnscrypt-proxy/dnscrypt-resolvers.csv': No such file or directory
cat: can't open '/opt/share/dnscrypt-proxy/dnscrypt-resolvers.csv': No such file or directory
--2017-09-11 14:36:12-- https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf
Resolving raw.githubusercontent.com... 151.101.72.133
Connecting to raw.githubusercontent.com|151.101.72.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1392384 (1.3M) [text/plain]
Saving to: '/opt/etc/dnsmasq.d/accelerated-domains.china.conf.bak'
0K .......... .......... .......... .......... .......... 3% 152K 9s
50K .......... .......... .......... .......... .......... 7% 145K 8s
100K .......... .......... .......... .......... .......... 11% 107K 9s
150K .......... .......... .......... .......... .......... 14% 66.9K 11s
200K .......... .......... .......... .......... .......... 18% 83.9K 11s
250K .......... .......... .......... .......... .......... 22% 62.4K 12s
300K .......... .......... .......... .......... .......... 25% 74.7K 11s
350K .......... .......... .......... .......... .......... 29% 46.4K 12s
400K .......... .......... .......... .......... .......... 33% 34.8K 13s
450K .......... .......... .......... .......... .......... 36% 50.1K 13s
500K .......... .......... .......... .......... .......... 40% 83.3K 12s
550K .......... .......... .......... .......... .......... 44% 45.4K 12s
600K .......... .......... .......... .......... .......... 47% 39.2K 11s
650K .......... .......... .......... .......... .......... 51% 51.8K 11s
700K .......... .......... .......... .......... .......... 55% 27.6K 11s
750K .......... .......... .......... .......... .......... 58% 23.0K 11s
800K .......... .......... .......... .......... .......... 62% 26.7K 10s
850K .......... .......... .......... .......... .......... 66% 34.2K 10s
900K .......... .......... .......... .......... .......... 69% 74.2K 8s
950K .......... .......... .......... .......... .......... 73% 68.8K 7s
1000K .......... .......... .......... .......... .......... 77% 76.5K 6s
1050K .......... .......... .......... .......... .......... 80% 67.5K 5s
1100K .......... .......... .......... .......... .......... 84% 61.5K 4s
1150K .......... .......... .......... .......... .......... 88% 33.1K 3s
1200K .......... .......... .......... .......... .......... 91% 30.5K 2s
1250K .......... .......... .......... .......... .......... 95% 58.9K 1s
1300K .......... .......... .......... .......... .......... 99% 47.3K 0s
1350K ......... 100% 287K=27s
2017-09-11 14:36:40 (49.6 KB/s) - '/opt/etc/dnsmasq.d/accelerated-domains.china.conf.bak' saved [1392384/1392384]
dnsmasq: syntax check OK.
server=/#/127.0.0.1#65053
Shutting down dnscrypt-proxy... done.
Starting dnscrypt-proxy... done.
dnsmasq: syntax check OK.
Checking ss-redir... alive.
Shutting down ss-redir... done.
Checking dnscrypt-proxy... alive.
Shutting down dnscrypt-proxy... done.
Checking haveged... alive.
Shutting down haveged... done.
Starting haveged... done.
Starting dnscrypt-proxy... done.
Starting ss-redir... done.
dnsmasq: syntax check OK.
server=/#/127.0.0.1#65053
Shutting down dnscrypt-proxy... done.
Starting dnscrypt-proxy... done.
Applying iptables rule, it may take several minute to finish ...
ss-redir not enable udp redir, skip UDP rule.
貌似部署成功了!
如果无法翻墙, 按照下列步骤查错:
1. 断掉已连接的 WiFi, 并重新连接, 看看是否可以翻墙.
2. 保持 U 盘, 重启路由器, 并等待片刻, 看看是否可以翻墙.
3. 检查 /opt/etc 下配置文件, 并运行 /jffs/scripts/services-stop; /jffs/scripts/services-start 重启所有服务
如果需要重新部署.
1. 进入管理界面, 选择格式化 jffs, 并重启
2. 使用 entware-setup.sh 重新初始化包管理系统
3. 使用本脚本再次部署
如果无法连接路由器.
1. 拔下 U 盘, 重启, 尝试重新连接路由器
2. 进入管理界面, 选择格式化 jffs, 并重启
如果你不想配置 SSH 自动登录, 又对这个脚本做了什么不太放心, 你可以选择手动部署.
- 请首先尝试读懂部署脚本中的命令在干什么.
- 使用 ssh 登录路由器.
- 自己手动在路由器的命令行下键入命令. (脚本中,
deploy_start
之后的命令, 都是在路由器上执行.)
第一步: 访问 http://ip138.com, 你会看到如下提示:
您的IP是:[***.***.***.*** ] 来自:上海市浦东新区 电信
这证明此时, 访问国内的网站 (例如 ip138.com ), 直接走的运营商线路.
第二步. 访问万能的谷歌!! 搜索框中, 输入: my ip
, 如果能出结果 ......
恭喜你, 你的各种手机, 电脑, 平板, 可以尝试去体验下无缝的浏览自由世界的乐趣了!!
如果部署出现问题,可以选择以下步骤进行恢复:
- 请拔掉 U 盘后, 重启路由器, 如果可以进入管理界面, 格式化 jffs 分区重来.
- 点按路由器的重置按钮(按住不放几秒钟), 重置整个路由器.
白名单文件可以在路由器内 /opt/etc 下创建, 也可以在部署前, 项目 router/opt/etc/ 下创建.
ip 白名单示例:
╰─ $ cat router/opt/etc/user_ip_whitelist.txt
81.4.123.217 # entware 的地址
151.101.72.133 # raw.githubusercontent.com
域名白名单示例:
╰─ $ cat router/opt/etc/user_domain_name_whitelist.txt
pkg.entware.net
raw.githubusercontent.com
dnscrypt-proxy 配置文件示例:
╰─ $ cat router/opt/etc/dnscrypt-proxy.sh
resolver_address_with_port='服务器地址:端口'
provider_name='2.dnscrypt-cert.domain.com' # domain 随便改,其他部分写死
provider_key='3750:AED7:CEAB:DA91:137A:AFCD:3330:AEAA:2FEB:22AB:07FB:KVCE:3E72:31A3:5F1E:FE78' # 替换为你自己的.
# tcp_only=true # 某些地区网络 udp 协议常常抽风,建议打开这个设置。(移除开始的那个 #)
感谢以下项目的不断努力,才让我们探索自由,科学上网的愿望变为现实。
新增最新版(v3.0.6)的 shadowsocks-libev 服务器端部署脚本, 方便不会在服务器上配置 ss 的朋友.
应该在 Centos 7 与 Ubuntu 16.04 下完美工作. 这个版本的 shadowsocks-libev 依赖 mbedtls, Ubuntu 14.04 没有提供这个包, 因此不在考虑之列.
操作步骤如下:
- 购买一台可以连接外网的 VPS.
- 确保可以 root 登录.
- 参照部署脚本中的注释, 修改
你的密码
为 ss-server 所需真实密码, 稍后路由器连接需要这个密码. - 假设你的 VPS IP 地址是: 123.123.123.123, 运行:
./ss-server_install root@123.123.123.123
等待完成.
补充:
基于你选择的服务商, 如果是 Centos 7 可能需要手动添加 epel
的 source 进来, 否则找不到 mbedtls-devel
这个包.
$: rpm -ivh http://download.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
然后重新运行部署脚本.
有问题, 提 issue, 会不定期解决.