SSH与VPN客户端配置完全手册&给VPN添加路由表+自动替换DNS服务器
SSH与VPN客户端配置完全手册
一、导言
很多时候在公用网络(如公共场所开放式的Wifi)或者传输关键数据时,我们需要加密的信道来保证数据的安全,SSH和VPN是现在很常用的两套传输方式,现在以Windows和Linux系统为例给出SSH和VPN的客户端配置。
二、SSH配置
SSH是什么?SSH(Secure Shell)是一种建立在应用层和传输层基础上、专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。 SSH之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。 如果你有一个国外的ssh账号的话,则可以使用SSH隧道作为一个安全上网代理。
1.SSH在Windows 客户端配置
Windows下常用的SSH客户端有开源的Putty以及在其基础上的加上GUI外壳的MyEntunnel。使用MyEntunnel可以避免记忆复杂的命令行,还可以安全的保存密码。但是有个问题,通过MyEnTunnel或者plink下载或者看视频速度很慢,最高不超过35KB/s。(由于Release版的Putty限速于40KB/s,Dev版的Putty无此问题,详情参考此文。)
推荐另一款SSH客户端Tunnelier,相比MyEntunnel有两点优势:1.不限速2.更方便的使用公钥/私钥系统做SSH认证。
前者的重要性毋庸置疑,而后者使用生成的公钥而非密码认证在安全上有更多的优势,详情在此文有 更多的探讨。 软件设置比较简单: Login选项卡,输入ssh服务器的登录信息。 Options选项卡,On Login部分把几个勾都去掉,很多时候你的SSH提供商并没有给你Shell Access权限。 Services选项卡,SOCKS/HTTP Proxy Forwarding部分 Enabled,修改本地监听端口,形成Socket v5 代理。 公钥配置使用Keypair Manager,如下图,Generate一对密钥,Export出公钥Public Key, Import进服务器。登陆时用自己的私钥,每次输入口令Passphrase,即可。
然后Save Profile As另存配置。
Tips:
可以从命令行运行
Tunnelier:tunnelier -profile=profilename.tlp -loginOnStartup
2.SSH在Linux客户端配置
Linuxer不用GUI,因而这里以Ubuntu 10.04 Lucid为例。
1
|
ssh -fnN -D localport -p hostport 'username@hostname' |
其中 hostname是SSH主机名或者IP地址 hostport是远程主机的SSH服务端口,当其非默认端口22时需要在这里设置。 localport即Socket v5 Proxy监听端口,一般SSH设定为7070. 剩下参数意义如下
-q :- be very quite, we are acting only as a tunnel.
-f :- move the ssh process to background, as we don’t want to interact with this ssh session directly.
-N :- Do not execute remote command.
-n :- redirect standard input to /dev/null.
-f :- move the ssh process to background, as we don’t want to interact with this ssh session directly.
-N :- Do not execute remote command.
-n :- redirect standard input to /dev/null.
其中-N很重要,有的时候,主机商没有给你SSH Shell Access权限时,必须要开启,否则有可能自动关闭这个SSH连接。
- 自动重连
Linux系统中不像Windows有非常好用的GUI,但是却又异常强大的bash,利用它,我们可以完成SSH自动重连。 要使用重连的机制,需要先建立远程服务器公钥对本机的私钥配对形成信任关系,使用ssh-copy-id这个小工具,这样才可以免输密码。
(1)先生成一对密钥。
1
|
ssh -keygen -t rsa |
这个命令生成一个密钥对:id_rsa
(私钥文件)和id_rsa.pub
(公钥文件)。默认被保存在~/.ssh/
目录下。
(2)建立信任关系
通过CPanel将公钥import进SSH服务器或者scp到服务器,或者最最简单方便的ssh-copy-id这个脚本。
1
2
3
4
5
6
7
8
|
$ ssh -copy- id -i ~/. ssh /id_rsa .pub username@ hostname If you need shell access please contact support. Now try logging into the machine, with "ssh -p XXXX 'user@host'" , and check in : . ssh /authorized_keys to make sure we haven 't added extra keys that you weren' t expecting. |
如果你和我一样,使用的SSH服务非默认的22端口,你需要使用这个修改版的ssh-copy-id(引自此文)。
如此调用即可~
1
|
ssh -copy- id -p local -i ~/. ssh /id_rsa .pub username@ hostname |
3.自动重连脚本(来自Blogkid大大)
1
2
|
curl -s -I http: //www .google.com/ –socks5 localhost:7070 > /dev/null [ $? -gt 0 ] && ssh -fN username@ hostname -D 7070 |
脚本很简单,就是使用curl通代理访问一下google(这里也可以是任意别的网站)。如果访问失败了,就重开一个ssh进程监听7070端口。
3.浏览器配置
众所周知由于IE对SOCKET5代理不好,大家一般都是用 FireFox/Chrome。直接将FireFox/Chrome设置Socket5代理就是可以正常使用的。但是这样,上国内网站也会绕道国外,影响 速度。好在FireFox/Chrome有大量优秀的插件,FoxyProxy和Switchy!是很常用的通过URL筛选决定是否通过代理访问网站的插 件,配合对应的pac脚本,非常好用。
三、VPN配置
目前被广泛应用的VPN实现中有三个主流:SSL、IPSec及PPTP。PPTP协议最早由MS推出,优点在于其在Windows平台预装了客户端,在新版的Linux中(如9.04版以后的Ubuntu)也给与了客户端和GUI的支持,密码分析专家已经透露了其安全弱点。
OpenVPN是一免费开源软件,属于SSL VPN,比PPTP更加安全。OpenVPN的安装比PPTP要复杂一点,但是其开源的特性给了其广泛的移植性,对Linux服务器也更加友好,在运营商ISP阻止PPTP连接时,OpenVPN也能够保持不受影响。
1.OpenVPN在Windows下配置
将*.ovpn *.ca 拷贝到X:/Programme Files/OpenVPN/config即可。
OpenVPN此番在Windows下配置颇具一番周折。开始使用了VPN提供商给的OpenVPN 2.0.9版,但是在使用中,频频报错,首先是 TAP-WIN32 开启中出现Permission Denied/权限不够,给了X:/Programme Files/OpenVPN/bin 的所有exe管理员权限才过去,接着出现了一下错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Fri May 08 13:14:24 2009 route ADD 67.228.223.13 MASK 255.255.255.255 192.168.1.1 Fri May 08 13:14:24 2009 ROUTE: route addition failed using CreateIpForwardEntry: One or more arguments are not correct. [if_index=9] Fri May 08 13:14:24 2009 Route addition via IPAPI failed Fri May 08 13:14:24 2009 route ADD 0.0.0.0 MASK 128.0.0.0 192.168.4.65 Fri May 08 13:14:24 2009 ROUTE: route addition failed using CreateIpForwardEntry: One or more arguments are not correct. [if_index=23] Fri May 08 13:14:24 2009 Route addition via IPAPI failed Fri May 08 13:14:24 2009 route ADD 128.0.0.0 MASK 128.0.0.0 192.168.4.65 Fri May 08 13:14:24 2009 ROUTE: route addition failed using CreateIpForwardEntry: One or more arguments are not correct. [if_index=23] Fri May 08 13:14:24 2009 Route addition via IPAPI failed Fri May 08 13:14:24 2009 route ADD 192.168.4.0 MASK 255.255.255.0 192.168.4.65 Fri May 08 13:14:24 2009 ROUTE: route addition failed using CreateIpForwardEntry: One or more arguments are not correct. [if_index=23] Fri May 08 13:14:24 2009 Route addition via IPAPI failed Fri May 08 13:14:24 2009 Initialization Sequence Completed with errors |
网上Google了很久,有人建议添加
ip-win32 netsh
或者
route-method exe route-delay 2
据没有得到解决,后来Google到这篇帖子提到到
OpenVPN 2.1_rc2 (just released) has a fix for the “route addition failed using CreateIpForwardEntry” error on Vista.
于是去http://openvpn.net/download.html 中最新的Release,2.1.1才干掉这个错误。
但是此时,依然无法打开任何网页,但却可以ping通IP地址,于是在找到OpenVPN 适配器TAP-Win32 Adapter V9 对应的本地连接4的TCP/IP设置中添加Google DNS 8.8.8.8/8.8.4.4,全部解决。 给出OpenVPN在Windows下的使用建议:
1.要开启DHCP服务
2.当OpenVPN无错时,可以试试添加DNS。
2.OpenVPN在Linux的配置
OpenVPN在Linux下配置相对容易
1
2
3
4
|
wget http: //openvpn .net /release/openvpn-2 .1.1. tar .gz tar -xvf openvpn-2.1.1. tar .gz cd openvpn-2.1.1 . /configure |
提示缺少实时压缩lzo库,故安装lzo库
1
2
3
4
5
6
7
|
wget http: //www .oberhumer.com /opensource/lzo/download/lzo-2 .03. tar .gz tar -xvf lzo-2.03 cd lzo-2.03 . /configure && make && sudo make install #继续安装OpenVPN cd .. /openvpn-2 .1.1 . /configure && make && sudo make install |
使用时调用一下命令即可。
1
|
sudo openvpn --config ~ /client/client .ovpn --ca ~ /client/ca .crt |
四、VPN与SSH的区别
VPN其实也是在本地与远程服务器之间建立了一个加密的通道,但是,与SSH不同的是,VPN客户端会虚拟一个网卡出来(这个虚拟的网卡连接的就是 刚才说的那个加密通道),然后修改路由,使流量从加密通道走。当然,VPN也存在跟SSH相同的问题,如果访问国内网站,会绕道国外,速度很慢。聪明的人 们又想出了办法:连接了VPN的电脑相当于有两块网卡,只要让国内流量从真实网卡走而国际流量从虚拟网卡走,这个问题就解决了。实际的操作就是手工加入国 内IP的路由,让这部分流量直接走本地连接来搞定。
在解决绕道的问题上,大家可以看出SSH方式和VPN方式的不同了,SSH方式可以在URL的级别上筛选网址走加密通道,而VPN方式只能筛选IP。
举个例子,SSH代理+Swithy!+PAC可以做到使http://www.abc.com/xxx走代理,而http: //www.abc.com/yyy不走代理,这是VPN方式力所不及的,因为前者和后者的IP是完全相同的。当然,VPN方式也有它得天独厚的好处,就 是不用对应用软件进行任何设置即可使用,这对一些根本没法设置Socket v5代理的应用软件是莫大的福音,这也是SSH方式力所不及的。
(引用自Kangzj.net)
===========================================================================================
给VPN添加路由表+自动替换DNS服务器
VPN(Virtual Private Network)是通过一个公用网络建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。使用这条隧道可以对数据进行几倍加密达到安全使用互联网的目的。
一、给VPN添加路由表
然而,在VPN流量的有限的情况下,一来我们希望部分特定的IP走VPN线路,访问其他IP时候依然走公网网关;二来,对于海外VPN,访问国内IP走公网线路也有利于访问速度的保证;再者,也可以消除一些中国内部的资源也限制海外的ip访问情况;要实现这一目的,我们需要给VPN添加路由表。以OpenVPN为例。
1.Windows
Windows用户最好使用最新OpenVPN 2.1以上的版本,因为openvpn v2.1比之前版本增加了一个名为max-routes的新参数, 通过设置该参数, 我们可以在配置文件里(服务端, 客户端)直接添加超过100条以上的路由信息.
chnroutes上给出的脚本
教育网同学可以考虑使用这个添加教育网IP的路由表版本(修改自 @Felixonmars 的脚本)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import re import urllib b = re. compile ( "([\d\.]+)\s+[\d\.]+\s+([\d\.]+)" ) c = b.findall(a) line_count = 0 m = [ "#iptable for CERNET" ] for d in c: m.append( "route " + d[ 0 ] + " " + d[ 1 ] + " net_gateway 5" ) line_count = line_count + 1 e = open ( 'routes_cernet.txt' , "w" ) e.write( "\n" .join(m)) e.close() |
具体设置步骤如下:
- 在命令行里执行 python chnroutes_openvpn_v2.1/cernet_ovpn, 这将生成一个名为 routes.txt/routes_cernet.txt 的文本文件.
- 使用你喜欢的文本编辑器打开上述文件, 并把内容复制粘贴到openvpn配置文件的末尾
- 同时在openvpn配置文件的头部添加一句 max-routes num, 其中num是一个不小于文件routes.txt的行数的数字, 实际上因为还有一些服务器端push过来的路由信息, 所以保险起见可以用 routes.txt的行数加上50, 比如目前得到的routes.txt的行数是940, 你可以把数字设置为1000: max-routes 1000
2.Linux
Linux平台不建议使用opvn中添加路由表(本人Ubuntu 10.10系统采用此方法时在退出OpenVPN时删除路由表时出现权限问题),而是采用一个脚本文件。Windows平台也不建议使用脚本,因为Windows平台创建进程的开销非常大,具体表现出来为route程序执行过慢,导致整个脚本执行的时间太长;Linux平台基本不算问题,因为Linux创建进程是非常快的,所以脚本执行时间非常短。基本在5秒左右就完成,5秒后网络立马就稳定下来了。
chnroutes上给出的脚本
教育网同学可以考虑使用这个添加教育网IP的路由表版本(修改自 @Felixonmars 的脚本)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#!/usr/bin/env python import re import urllib VPNUPBASE = """#!/bin/bash export PATH="/bin:/sbin:/usr/sbin:/usr/bin" OLDGW=`ip route show | grep '^default' | sed -e 's/default via \\([^ ]*\\).*/\\1/'` if [ $OLDGW == '' ]; then exit 0 fi if [ ! -e /tmp/openvpn_oldgw ]; then echo $OLDGW > /tmp/openvpn_oldgw fi """ VPNDOWNBASE = """#!/bin/bash export PATH="/bin:/sbin:/usr/sbin:/usr/bin" OLDGW=`cat /tmp/openvpn_oldgw` """ b = re. compile ( "([\d\.]+)\s+[\d\.]+\s+([\d\.]+)" ) c = b.findall(a) upfile = open ( 'vpnup_cernet' , 'w' ) downfile = open ( 'vpndown_cernet' , 'w' ) upfile.write(VPNUPBASE) upfile.write( '\n' ) downfile.write(VPNDOWNBASE) downfile.write( '\n' ) for d in c: upfile.write( "route add -net " + d[ 0 ] + " netmask " + d[ 1 ] + " gw $OLDGW\n" ) downfile.write( "sudo route delete -net " + d[ 0 ] + " netmask " + d[ 1 ] + "\n" ) downfile.write( 'rm /tmp/openvpn_oldgw\n' ) upfile.close() downfile.close() |
具体设置步骤如下:
- 下载 chnroutes_ovpn_linux/chnroutes_ovpn_linux_cernet
- 从终端进入下载目录, 执行python chnroutes_ovpn_linux/chnroutes_ovpn_linux_cernet, 执行完毕之后同一目录下将生成两个新文件’vpnup/vpnup_cernet’和’vpndown/vpndown_cernet’
- 在终端里运行命令 chmod a+x vpnup vpndown 把这两个文件设置为可执行
- 把这两个文件copy到openvpn的配置目录并修过openvpn配置文件, 在末尾加上两句
script-security 2 up vpnup down vpndown
二、自动替换DNS服务器
一般在OpenVPN的server端都会写上类似于
push "dhcp-option DNS 10.8.0.1" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
这样的语句将DNS设置push给客户端,但实际上,这个只对Win32平台下的OpenVPN有效,对于Linux平台下,无路是server端的push或者是client端配置文件中手动加上–dhcp-option都没有用。DNS服务器依然是连接OpenVPN前的DNS服务器,遭到DNS污染的网站依旧会遭到DNS污染,只能考虑执行自定义脚本来完成:
3
4
5
6
7
8
9
10
|
RESOLVE= /etc/resolv .conf FOREIGNDNS1= '4.2.2.1' FOREIGNDNS2= '4.2.2.2' DNSMARK= '_MK' sed "s/^nameserver/#$DNSMARK nameserver/" -i $RESOLVE echo "nameserver $FOREIGNDNS1" >> $RESOLVE echo "nameserver $FOREIGNDNS2" >> $RESOLVE |
3
4
5
|
RESOLVE= /etc/resolv .conf DNSMARK= '_MK' sed -e '/^nameserver/d' -e "s/^#$DNSMARK //" -i $RESOLVE |
很简单,就是使用sed来完成/etc/resolv.conf文件的内容替换。
嗯,就这样。
参考文献:
- Ubuntu 多网环境自动路由表(区别教育网内外) Felix’s Blog
- OpenVPN连接后自动替换DNS服务器 apt-blog.net IT民工养成计划 PT博客
- chnroutes – Project Hosting on Google Code
原文:http://logicmd.net/2010/08/config-handbook-for-ssh-and-vpn/
http://logicmd.net/2010/10/add-route-table-and-auto-replace-dns-while-connecting-to-vpn/
博主你好
本人新作《Google+ Games 社交游戏推出,附hosts与介绍》
地址:http://wuxiao.info/485
欢迎采纳,谢谢
作者:Changer
邮箱:wuxiao0715@gmail.com
更多信息,请关注:www.wuxiao.info
感谢支持,已发布。