由于购买了Astrill VPN,这个VPN可以直接在DD-WRT或者梅林上直接安装插件实现翻墙,但是我本地的主路由一直使用openwrt,且非常稳定,实在不愿意把openwrt换成DD-WRT,于是想办法折腾一下安装一个DD-WRT路由专门来跑Astrill VPN插件。于是有了下面的经历:
首先在软路由的VMWare ESXI上新建了一个虚拟机,在DD-WRT官网找到了x86或x86_64的image固件,刷上了,然后按照Astrill官网给的方法和链接安装Astrill VPN插件,报错,并且无法使用,于是郁闷了,问了Astrill的support center,来回几次后,告诉我,并不支持intel cpu。于是准备放弃了的,但突然想起来,家里还有一个换软路由后淘汰的RT-AC68u,准备用AC68u试试。
然后,给AC68u刷了最新的梅林,连到openwrt上,一切貌似正常,可是发现一个很严重的问题,梅林固件不支持在web管理页面上设置路由自己的网关和DNS,于是ssh上固件,使用route add default gw ***.***.***.***设置网关,并且在nvram里也设置了网关和dns,可以用,这样就可以用Astrill官网提供的命令安装Astrill VPN插件了。但是一切都然并卵,重启之后,网关和dns没了,就说每次重启之后要用脚本设置,这个我也就忍了,但是问题是梅林的固件下安装openssh-client客户端几乎不可能,也不想折腾刷改版梅林了,本想就此放弃了,但是突然想到,以前玩过dd-wrt,很开放,只要它行什么姿势都让你来,如果两者结合一下呢。
最后(为了留下笔记,这里要分条目列了):
1. 在dd-wrt官网下载了最新的ac68u的beta版固件,没有用官网推荐的,因为无法打开jffs,下了个最新的。
2. 刷到ac68u,web管理页面上就支持让你填写网关、dns,开启jffs2,这简直太人性了。
3. 打开ssh到后台,准备安装openssh-client,结果一执行ipkg update,提示错误:mkdir: can't create directory '//usr/local/lib/': Read-only file system,WTF,看来这个版本有很多地方不让写!于是上论坛翻找,发现好像都是这个问题,不是版本的问题,于是放弃用ipkg安装,去安装个opkg去。
4. 首先要挂在/opt:在jffs上新建opt目录,然后挂在,mkdir -p /jffs/opt; mount -o bind /jffs/opt /opt;。
5. 安装opkg,我安装了entware,毕竟这里东西全。wget -O - http://pkg.entware.net/binaries/armv7/installer/entware_install.sh | sh;然后opkg update;。
6. 然后安装openssh-client,另外为了能够ssh自动登录,还要使用ssh-key来登录,于是也安装上openssh-keygen:opkg install openssh-client; opkg install openssh-keygen;。
7. 装完了,然后生成key,并准备使用:运行/opt/bin/ssh-keygen;,提示存key的文件,我用了/jffs/.ssh/local_rsa作为文件位置,然后一路默认,不加密码直接生成,然后在/jffs/.ssh/下生成了local_rsa和local_rsa.pub两个文件,把.pub的公key导入到服务端就行,服务端的key在~/.ssh/路径下,于是执行命令cat /jffs/.ssh/local_rsa.pub >> ~/.ssh/authorized_keys;然后还要修改权限:chmod -R 700 /jffs/.ssh/; chmod 600 ~/.ssh/authorized_keys;。
8. 使用命令建立ssh隧道,提供1080端口的socks4/5代理:/opt/bin/ssh -NfT -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ServerAliveInterval=60 -D *:1080 192.168.0.2 -i /jffs/.ssh/local_rsa;这里使用的参数备忘一下:
/opt/bin/ssh,这里使用的是openssh-client,如果直接输入ssh,是dd-wrt自带的dropbear ssh客户端,功能弱,不能tunnel;
-NfT不重要,不运行远程脚本,不定位到pty终端,运行在后台,总之就是运行时不要打扰的意思;
-D 建立tunnel,后面跟着*:1080,就是监听本地的1080端口;
-o 后面3个option,StrictHostKeyChecking=no和UserKnownHostsFile=/dev/null首次和每次登录时不检查RSA KEY,ServerAliveInterval=60就是每60秒晃荡一下,不要断开。
完成以上,在客户端使用socks代理,地址就是192.168.0.2,端口就是1080,流量就能走到192.168.0.2的ssh tunnel了。
9. 在dd-wrt上安装Astrill VPN插件,按照Astrill官网提示,一切顺利,在插件页面设置好自动重连,移动端加速,自动连接,设好收藏的服务器,自动切换,保存链接。找局域网的客户端,代理填入socks5,192.168.0.2端口1080;已经翻墙;结合浏览器switchyomega插件,配合gfwlist,实现了内外有别。
10. 最后设置成路由器开机脚本,记录在此备忘:
eval `nvram get astrill_bootstrap`;
#Astrill VPN插件运行自动添加的脚本;
sleep 60;
#这里先睡1分钟,因为多次实验发现,当挂载/opt后,Astrill VPN插件不能加载,估计跟jffs有关,不折腾了,睡1分钟最保险;
mount -o bind /jffs/opt /opt;
#挂载/opt;
sleep 10;
#不着急,睡10s玩一玩;
/opt/bin/ssh -NfT -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ServerAliveInterval=60 -D *:1080 192.168.0.2 -i /jffs/.ssh/local_rsa;
#建立ssh tunnel;
打完收功!
以上内容留存备忘。
没有评论:
发表评论