要访问远程局域网的内容,或者是想访问某些受限内容,一般说来,VPN是一个很好的解决方案,但是VPN的配置相对复杂,适合企业使用。所以,使用SSH是一个既方便又快捷的解决方案,服务端不需要做复杂的配置,只要稍稍配置客户端部分即可。
在OpenWrt上配置SSH代理,有利于是OpenWrt的LAN网络下的客户端均可使用代理,做到一次配置,多次使用。
要在OpenWrt上使用SSH代理,首先要有一个强大的SSH客户端,由于 OpenWrt 中默认自带的 SSH 服务端和客户端是 Dropbear,Dropbear 作为 SSH 客户端无法满足我们的需要,所以我们要安装 openssh-client。首先到路由器的文件系统中 /usr/bin 目录下,删除 ssh 和 scp。其实这两个文件都是到 Dropbear 的符号链接,所以放心删除。
然后我们打开终端,通过 ssh 登录路由器。登录后,先用:
opkg update
刷新一下软件包。然后安装openssh-client:
opkg install openssh-client openssh-keygen
我们使用 OpenSSH-Client 来登录主机并做端口转发,使用OpenSSH-Keygen生成密钥对,方便客户端不使用密码即可登陆服务端。
安装完之后,我们首先要做的就是设置 SSH 的密钥,这样就可以自动登录,而不用输入密码。
首先用 sh-keygen 来生成密钥对:
ssh-keygen -b 1024 -t rsa
会在/root/.ssh 文件夹下生成 id_rsa 和 id_rsa.pub 两个文件。然后把 id_rsa.pub 公钥上传到 SSH 服务器 ~/.ssh/ 文件夹下,改名为 authorized_keys。然后我们通过路由器SSH登陆我们的SSH服务器,测试是否可以免密码登录。实际上,这种密钥登陆采用加密密钥进行认证,登录过程是十分安全的,比采用密码登录还要安全。如果提示你有关权限问题的话,可能还需要改下 id_rsa 文件的属性。
chmod -rw------- /root/.ssh/id_rsa
接下来我们来测试一下
ssh -D 192.168.1.1: [代理端口] [用户名@你的主机地址] -qTfnN
打开浏览器,设置 SOCKS 代理为192.168.1.1和上面设置的端口。浏览器建议使用FireFox(火狐),IE浏览器貌似不支持Socket V5代理,谷歌Chrome浏览器使用Socket代理需要使用插件。成功设置后,代理应该成功了。
如果有FireFix(火狐)下的AutoProxy或者是Chrome下的SwitchySharp插件,可以用来自动管理自己的代理设置,设定指定的网站使用代理,其余的不使用。
接下来我们让路由器开机时自动运行代理。
在路由器 /etc/init.d/ 文件夹下,我们建立个文本文件,名字可以自由命名,比如叫proxy,编辑其中的内容:
#!/bin/sh /etc/rc.common # Copyright (C) 2013 zhyaof.net START=99
start() { ssh -D 192.168.1.1: [代理端口] [用户名@你的主机地址] -qTfnN }
stop() { killall sshd }
保存,加上可执行属性:
chmod +x /etc/init.d/proxy
然后使用命令:
/etc/init.d/proxy enable
即可加入开机自动运行了!
网上有些教程推荐在OpenWrt增加使用Autossh软件管理自己的SSH连接,我认为也未尝不可,只是我认为OpenSSH-Client已经可以实现的功能,没必要额外增加软件。
另外,需要注意的是,如果你是njit-client校园网用户,注意开机启动脚本中的START=NUMBER不可以相同,也不宜太接近,因为START参数指明开机启动的顺序,代理的启用必须在认证成功之后,否则网络不可达,但是,njit-client的启动也不宜太前,因为njit-client必须于网卡启动之后才能启动,否则njit-client无法找到网卡。