本文的方法是按照飞羽博客的方案3操作的,原文是用在openwrt上的,不利于大家照着操作,这里特此整理一份简明教程版,以供同学们参考
update:
lz编译的tomato k26RT-N适用的新版的shadowsocks在这里下载 http://oglopss.github.io/ctng-ss-jekyll/
目的
临时回国,没买vps,想要方便的手机电脑翻墙,把国内家里的路由器做成自动翻墙路由器
方法
把shadowsocks的服务端直接放在tomato路由器上(而不是常见的教程里的放在买来的vps上,其实没区别,都是linux系统)
需要准备的软硬件
- tomato的路由器一台(位于国外你的家里,当然也可以是dd-wrt,openwrt的路由器),这里lz使用的是asus rt-n66u,下文中用N66代替他的地址
- shadowsocks (lz已经交叉编译好了2.3.4的静态和动态版本,下载地址在文末)
1. shadowsocks服务端设置
在国外的路由器上开启jffs存储空间,(或者你的路由器高级点能插u盘的话此处不表,网上教程很多),将ss-server复制上去
# 创建必要的文件夹
ssh root@router-abroad "mkdir -p /jffs/ss" ssh root@router-abroad "mkdir -p /jffs/etc/config"
# 把ss-server拷上去 scp ss-server root@router-abroad:/jffs/ss
# 创建配置文件
ssh root@router-abroad
vi /jffs/ss/ss-server-config.json
# 配置文件内容如下,按i键进入编辑模式,然后中键贴入,按Esc,输入:wq保存退出
{
"server":"0.0.0.0",
"server_port":8388,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"mypassword",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false,
"workers": 3
}
# lz目前测试了最新的ss 3.3.1 貌似需要去掉local_开头的两行设置,不然会出现错误
# ERROR: connect: Invalid argument
# 如果不是很确定配置文件写的对不对,可以先前台运行验证一下,注意需要-u
/jffs/ss/ss-server -s 0.0.0.0 -p 8388 -k <mypassword> -m aes-256-cfb -b 127.0.0.1 -u
# 确保他能运行
chmod +x /jffs/ss/ss-server
# 创建自动启动运行script vi /jffs/etc/config/ss-server.fire
# 文件内容如下 注意有-u
#!/bin/sh
/jffs/ss/ss-server -c /jffs/ss/ss-server-config.json -f /tmp/ss-server.pid -u
# 确保他能运行
chmod +x /jffs/etc/config/ss-server.fire
tomato的设置如图所示:
jffs设置
Admistration->JFFS
firewall设置
Admistration->scripts
iptables -A INPUT -p tcp --dport 8388 -j ACCEPT
# 验证ss-server已启动
root@unknown:/tmp/home/root# ps | grep ss
6236 root 2680 S /jffs/ss/ss-server -c /jffs/ss/ss-server-config.json -f /tmp/ss-server.pid -u
# 验证ss-server已监听8388端口
root@unknown:/tmp/home/root# netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 xxx.xxx.xxx.xxx:8388 0.0.0.0:* LISTEN
至此服务器端已经设置完成,你可以重启路由器,使用上面的方法验证服务器端是否正常运行
手机翻墙
有现成的apps可以装 看这里
windows笔记本电脑翻墙
有gui的客户端shadowsocks-qt5可以装 看这里
有编译好的版本可以直接用 Shadowsocks的图形化客户端Shadowsocks-Qt5介绍,这个什么时候用呢?lz觉得是如果只有一台笔记本需要翻墙,没有很多需要连wifi的设备的需求的话,你可以用这个,或者是想简单测试下ss server有没有搭好,那可以用它,不然如果有很多设备都需要翻的话,远没有下面的“自动翻墙路由器”方便,因为没台设备都需要装ss的客户端并进行设置。lz写有 shadowsocks-qt5 for windows 试用心得
国内家里的路由器上的shadowsocks客户端设置 – 制作自动翻墙路由器
这里使用的是ss-redir透明代理客户端
# 创建必要的文件夹
ssh root@router-in-China "mkdir -p /jffs/ss"
ssh root@router-in-China "mkdir -p /jffs/etc/config"
# 把ss-redir拷上去
scp ss-redir root@router-in-China:/jffs/ss
# 创建配置文件
ssh root@router-in-China
vi /jffs/ss/ss-redir-config.json
# 配置文件内容如下,按i键进入编辑模式,然后中键贴入,按Esc,输入:wq保存退出
# 我没在这里放local_port是因为我想让ss-tunnel也用这个配置文件
{
"server":"my_server_ip_abroad", # 这是你国外住处的路由器的地址
"server_port":8388,
"local_address": "0.0.0.0",
"password":"mypassword",
"method":"aes-256-cfb",
}
# 如果不是很确定配置文件对不对,可以先命令行前台测试一下
/jffs/ss/ss-redir -s <my_server_ip_abroad> -p 8388 -k <mypassword> -m aes-256-cfb -l 1080
# 确保他能运行
chmod +x /jffs/ss/ss-redir
# 创建自动启动运行script
vi /jffs/etc/config/ss-redir.fire
# 文件内容如下 在命令行里加local_port 1080
#!/bin/sh
/jffs/ss/ss-redir -c /jffs/ss/ss-redir-config.json -l 1080 -f /tmp/ss-redir.pid
# 确保他能运行
chmod +x /jffs/etc/config/ss-redir.fire
# 下面使用ss-tunnel解决dns问题
# 创建自动启动运行script
vi /jffs/etc/config/ss-tunnel.fire
# 文件内容如下 使用ss-tunnel转发UDP的DNS请求,要加-u, 当然相应的server端也要加-u
#!/bin/sh
/jffs/ss/ss-tunnel -c /jffs/ss/ss-redir-config.json -l 5353 -L 8.8.8.8:53 -f /tmp/ss-tunnel.pid -u
# 确保他能运行
chmod +x /jffs/etc/config/ss-tunnel.fire
你可以这样加一大堆网站进去,也可以只加自己常用的(如果不多,可以在tomato webui里直接加)
# 从gfwlist得到dnsmasq_list.conf 并放进jffs
ssh root@router-in-China "mkdir -p /jffs/etc/dnsmasq.d"
scp dnsmasq_list.conf root@192.168.2.22:/jffs/etc/dnsmasq.d/
vi /etc/dnsmasq.custom
#其中加入下面的一行
conf-dir=/jffs/etc/dnsmasq.d
nvram setfile2nvram /etc/dnsmasq.custom
nvram commit
dnsmasq_list.conf文件格式如下所示
#使用不受污染干扰的DNS解析该域名 可以将此IP改为自己使用的DNS服务器
server=/google.com/127.0.0.1#5353
#将解析出来的IP保存到名为gfwlist的ipset表中
ipset=/google.com/gfwlist
此外,飞羽博客说他会每周更新dnsmasq_list.conf,自动生成dnsmasq_list.conf 的脚本在这里:https://github.com/cokebar/gfwlist2dnsmasq
dns和dnsmasq设置
dnsmasq的设置比如:(测试,只加了几个,lz用不着ls加的那么多网站感觉)
server=/facebook.com/127.0.0.1#5353
ipset=/facebook.com/gfwlist
server=/google.com/127.0.0.1#5353
ipset=/google.com/gfwlist
server=/youtube.com/127.0.0.1#5353
ipset=/youtube.com/gfwlist
server=/twitter.com/127.0.0.1#5353
ipset=/twitter.com/gfwlist
server=/dropbox.com/127.0.0.1#5353
ipset=/dropbox.com/gfwlist
iptables设置比如:
iptables -A INPUT -p tcp --dport 8388 -j ACCEPT
iptables -A INPUT -p tcp --dport 1080 -j ACCEPT
# gfwlist set
modprobe ipt_REDIRECT
modprobe ipt_set
ipset -N gfwlist iphash
# iptables -t nat -A PREROUTING -p tcp -m set --set gfwlist dst -j REDIRECT --to-port 1080
# ss-redir
iptables -t nat -N SHADOWSOCKS
iptables -t nat -A SHADOWSOCKS -d your-server -j RETURN
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -p tcp -m set --set gfwlist dst -j REDIRECT --to-port 1080
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
tomato的设置如图所示:
注:这下面还没写完(未亲自操作验证),由于lz在国内没有一个空闲的路由器用于测试,所以暂时不方便试,希望哪位同学能提供一台tomato路由器供lz远程测试,最好不要是唯一的路由器,不然万一lz设错了你怎么上网?
希望有同学能贡献一台国内的空闲tomato路由器用于测试,希望是如下架构:(此图是用draw.io在线画的)
lz远程测试了一下,似乎翻不了 ss-tunnel总是timeout,也许可以试试飞羽博客上提到的unbound
lz已亲身远程操作国内的路由器验证,目前依然是可行的
文件下载:(在墙外的dropboxgithub上)
update: lz用travis ci编译了大部分最新版,放在了github,请去这里下载
shadowsocks-libev_2.3.1_mipsel_OpenSSL_static.tar.gz
shadowsocks-libev_2.3.1_mipsel_OpenSSL_dynamic.tar.gz
openssl-1.0.2d_dynamic.tar.gz
update2: 关于line聊天软件,lz在手机上装了个packet capture,看到line有去连
203.104.160.12:443
203.104.160.31:443
203.104.160.11:443
不知道需要加哪些,所以lz在dnsmasq配置里加了
server=/line.naver.jp/127.0.0.1#5353
ipset=/line.naver.jp/gfwlist
在防火墙里加了
iptables -t nat -A SHADOWSOCKS -p tcp -d 203.104.160.0/24 -j REDIRECT --to-port 1080
之后似乎可以用line了
update 3:(未测试,因为lz是在国外远程ssh回国内的路由器上测试的,怕万一把国内家里的设置弄乱,找不到会的人修复)
上文中有忽略的一点是,如果国内的路由器需要opkg装东西,意思就是他自身也需要翻墙的时候,需要在firewall里添加如下设置,但是本文讨论的路由器们不存在此问题,因为都是屌丝路由器,根本没空间装opkg.但是记录在这里一下以备参考,(可以用于,当你远程设置国内家里的路由器翻国外的时候,你可以在ssh连接后ping下原本被墙的网站测试,如果不做这一步,路由器自身没翻,是ping不到被墙网站的,你无法判断你的翻墙设置有没有成功,当然你问国内家里使用此路由器上网的人能不能翻也可以)
抄袭cokebar的设置,firewall script里加上
iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080
然后确保Advanced -> DHCP/DDNS 里开启了 Use internal DNS, 不知道是否 Basic -> Network里的static dns是不是填公用dns,未测试
参考:
搭建智能翻墙路由器
Shadowsocks & ChinaDNS on OpenWRT
从选 VPS 到架设 UDP 转发型 SS 到路由设置
WNDR4300安装Openwrt,使用shadowsocks配置透明代理,使用chinadns+dnscrypt-proxy处理DNS污染
OpenWrt 透明代理配置并解决 Chromecast 的更新问题
Asia Chats: LINE and KakaoTalk Disruptions in China
为什么不用chnroutes!多直接暴力!哈哈!lz可以尝试一下!
因为不会…啊哈哈哈,我也是才学翻墙的,随便找了个教程就照着做了,原理不通阿,求个教程连接
我的博客里面有
http://www.router008.com/Tomato-ShadowSocks-Mipsel.html
很高兴能看到这个文章,我的路由器也是RT-N66U,一直在找编译好的SS (因为自己不会编译)。谢谢你提供的编译好的文件,晚上回去就试一试。
有一个问题,你提供了编译的文件有静态的和动态的,这2个版本有什么区别?我该如何正确的使用合适的版本?
动态的小,100k,静态的大很多,静态的是如果你用动态的运行不了,说少symbol什么的时候,此时你可以试试静态的。假如你也是和我一样用tomato shibby v131的话,你用动态的就行了
谢谢你这么快的回复,我会先用动态的试试。
我现在是Tomato Shibby V130,尝试在“”数位天堂“”下载V131版本,但是由于刚刚注册,等级不够,不知道你是否方便提供V131的链接?
130的估计肯定也行,作者官网直接可以下 http://tomato.groov.pl/?page_id=164 ,我看到132都已经出了,你可以试试最新的 http://tomato.groov.pl/download/K26RT-N/build5x-132-EN/Asus%20RT-N66u%2064k/
再次感谢,我刷V132的试试看。
刷了v132,按照博主提供的步骤下来,还是不能fq。
dns和dnsmasq设置 是否还有其他的步骤没有贴出来?
不好意思重复的回复。之前的回复有点不太清楚。
刷了v132,按照博主提供的步骤下来,还是不能fq。
到了这里:dns和dnsmasq设置
后面是否还有其他的步骤?
我发现我没转贴完,而且没有自己试过 因为没有国内的机器 你连到国外的ss-server了么?先找个windows客户端试试看,如果确实能翻出去了再来搞“自动翻墙路由器”也不迟。update: 最近尝试过,已测试可行
我是自己买的vps,手机和电脑一直在用。
刚刚看了路由器的log,发现出现的问题如下:
Oct 22 14:42:03 unknown user.info /jffs/ss/ss-redir[1006]: initialize ciphers… aes-256-cfb
Oct 22 14:42:03 unknown user.err /jffs/ss/ss-redir[1006]: bind: Address already in use
Oct 22 14:42:03 unknown user.err /jffs/ss/ss-redir[1006]: Could not bind
Oct 22 14:42:03 unknown user.err /jffs/ss/ss-redir[1006]: bind() error
这是说客户端没能启动吧,你客户端配置文件或者启动命令行是啥
http://www.router008.com/Tomato-ShadowSocks-Mipsel.html你可以使用该方案,使用前确定是什么架构的路由器!
楼主能否直接给IPK包啊?
谢谢
因为磊科q3不能插优盘,flash也很小根本装不了entware,所以没有研究,你自己做一个呗
update: 没有做的原因是,既然你有entware/optware, ss已经直接在repo里了,直接opkg install就可以了,用不着从我这拿; 如果你flash太小装不了entware,那何须用得上ipk? 综上,你用不着ipk吧
楼主,请教如何配置多用户使用?
你把密码告诉所有人不就行了,如果想每个人的账号端口不一样, libev版只能开多个进程来多开,因为他设计目的是为了费资源尽量小,https://github.com/shadowsocks/shadowsocks-libev/issues/5 如果你服务器端不是放路由器上或者你路由器比较高级可以用python或者go版
我成功连接后内网可以正常访问,但是外网无法连接呢?这是二级路由,DHCP动态IP由主路由分配,内网可以正常连接SS,但是外网直接无法连接IP,怎么回事呢?希望LZ解答,谢谢!
已经重启解决,不麻烦楼主回复啦!
你好,楼主,我的版本是Tomato DualWAN 15.02.0068 MIPSR2 K26 USB WR-525W专用版
想搭建个SS服务器,主要是现在免费WIFI太不安全,想用手机端的ss连接家里的网络,没看懂你的教程,需要安装吗?代码复制到哪里?麻烦帮忙指教一下行吗?
把编译好的ss可执行文件复制到路由器的/jffs
路由器的/jffs 怎么进去?是否直接复制到“挂载后执行”里面?
ssh进到路由器里,然后 cd /jffs
还有第一段的代码要复制到哪里?
不知道你说的是哪段
你的压缩包里有6个文件,是否只要ss-server有用?其他5个没用?还有,如果路由器获取的是动态IP,那配置文件里的server ip能否直接用动态域名代替?
如果你想把路由器当server,是的,只需要那一个文件, server端的配置文件里的server ip 应该是 0.0.0.0吧, 客户端的server ip当然是可以填动态域名的
非常感谢你的耐心回答!现在终于有些明白了,但还是有些地方不解,望能继续给于帮助。
# 把ss-server拷上去
scp ss-server root@router-abroad:/jffs/ss
这段代码里的root@router-abroad必须一样吗?还是要改成自己的路由器名称?
还有解压后的ss-server文件该放在电脑的哪里?你ssh连接使用的是哪个软件?ss-server是否放在和它同一目录?
router-abroad是你放在国外的路由器的ip或者ddns地址, ss-server随便放哪里都可以,scp是拷贝的命令, 我用的是Linux,ssh命令是自带的,如果用Windows的话你可以装cygwin,此外需要学习下linux基本操作
你好!我windows端ssh连接使用的是PuTTY,输入命令后显示如下,是什么问题?
能否帮帮忙,使用PuTTY连接路由器代码如何一步一步输,我的路由器在国内,内外访问路由器的IP是192.168.3.1
root@ZRCC-AP:/jffs# scp ss-server 192.168.3.1:/jffs/ss
Host ‘192.168.3.1’ is not in the trusted hosts file.
(fingerprint md5 46:d4:a9:4d:1f:79:df:28:3d:ad:7d:38:d1:b1:fd:28)
Do you want to continue connecting? (y/n) y
root@192.168.3.1’s password:
ss-server: No such file or directory
召唤身边认识的会使用linux基本命令的同学来帮你下 似乎更有效率
认识的人没有会使用linux的,我国外VPS上架设shadowsocks 服务器也是用windows端的PuTTY,直接复制你的命令代码好像并不顺利
你不能完全照搬阿,至少得知道每行是什么意思吧,scp ss-server 192.168.3.1:/jffs/ss 的意思是: 假设你现在位于电脑的某个目录下,此目录中有ss-server文件,用ssh连接到192.168.3.1,并将本机的当前目录下的ss-server文件复制到192.168.3.1的/jffs/ss 目录下, 你用putty连接路由器之后,就已经在路由器的终端里了,再照搬上述命令当然不行了,你应该去google”用putty如何往远端机器上拷文件”
非常感谢!又进了一步,现在ss-server文件以及上传到/jffs/ss目录了,现在到
# 创建自动启动运行script
vi /jffs/etc/config/ss-redir.fire
# 文件内容如下 在命令行里加local_port 1080
#!/bin/sh
/jffs/ss/ss-redir -c /jffs/ss/ss-redir-config.json -l 1080 -f /tmp/ss-redir.pid
这里的#!/bin/sh是什么意思?百度过还是不太明白,也要复制进去吗?
是到这步
# 创建自动启动运行script
vi /jffs/etc/config/ss-server.fire
# 文件内容如下 注意有-u
#!/bin/sh
/jffs/ss/ss-server -c /jffs/ss/ss-server-config.json -f /tmp/ss-server.pid -u
我只要在Tomato上架shadowsocks服务器
#!/bin/sh 无法输入
只复制/jffs/ss/ss-server -c /jffs/ss/ss-server-config.json -f /tmp/ss-server.pid -u
提示pattern not found
楼主你好,我在国外家里台式机ubuntu server 上装了shadowsocks server,想着长期开机回国临时用一下。 供应商路由器需要有什么配置么?自己测试似乎连不上,也不知道什么原因。
之前尝试很多相关教程,很多都不靠谱,而且f.cp46.cn/tfr2计数方式一直没摸透,这个播放量计数真的很诡异.今天刚找到个新的工具,比较干净