2011年3月12日星期六

Windows2008设置OpenVPN服务技巧

由于Windows2008 web版没有提供vpn服务角色,其他版本的windows自带的vpn服务器改端口麻烦而且它只支持tcp连接,所以如果碰到VPN要用指定端口连接,或者想 用win做linux的vpn服务器的话,openvpn是个不错的选择。测试安装,资料来源于互联网整理


1. 服务端


环境:win2008 web +openvpn2.1.4


(1)安装openvpn,最好默认安装,否则后面配置时注意路径。


(2)到安装目录下的easy-rsa文件夹下,用文本编辑器打开vars.bat.sample文件,根据需要修改最后几行(其实也可以不改,就是为了 配置过程中输入的东西少点):


set KEY_COUNTRY=CN


set KEY_PROVINCE=HN


set KEY_CITY=LY


set KEY_ORG=ET


set KEY_EMAIL=a@b.com


(3)鼠标点开始-运行,输入cmd 回车进入命令行窗口


cd C:\Program Files\OpenVPN\easy-rsa 进入到安装目录下的easy-rsa文件夹,分别执行下面三个命令:


init-config


vars


clean-all


上面是初始化工作,以后,在进行证书制作工作时,仍旧需要进行初始化,但只需要进入openvpn\easy-rsa目录,运行vars就 可以了,不需要上面那些步骤了。


(4)生成根证书,分别执行命令:


build-ca


build-dh


(5)生成服务端密钥:


build-key-server server


(6)生成客户端密钥


build-key client1


build-key client2 可以继续配置第二个VPN客户端密钥


以上三步执行过程中需要输入一些参数,大部分只需按要求输入即可,[ 中括号 ]内提示默认值,不改直接回车即可。


其中一些是需要注意的:


common name,出现三次,据说要求每次输入的都不一样,至于都一样行不行我没试,那就随便输入三个不一样的参数。


A challenge password []:  An optional company name []: 这两个都可以留空


将生成的keys文件夹内的ca.crt, dh1024.pem, server.crt, server.key, ca.key复制到 OpenVPN\config目录下


(7)配置文件


port 443


proto tcp//#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议


dev tap


//下面四项注意路径,如果不是放在config目录下请用绝对路径


ca ca.crt


cert server.crt


key server.key


dh dh1024.pem


server 192.168.10.0 255.255.255.0


ifconfig-pool-persist ipp.txt


push “route 0.0.0.0 0.0.0.0″


push “redirect-gateway def1 bypass-dhcp”


push “dhcp-option DNS 192.168.175.5″ //这个根据实际自行修改,随后说明如何获得


keepalive 20 120


comp-lzo


persist-key


persist-tun


status openvpn-status.log


verb 3


要配置的大概就是这些,将配置文件另存为 server.ovpn 文件,并保存到openvpn\config目录下即可。如果需要通过服务器端连接外网,还需配置 win2008自带的vpn服务器,在nat/防火墙那里把本地连接接口添加进去。


(8) 右键点击 server.ovpn 文件名选择Start OpenVPN on this config file即可启动 , 或者通过 OpenVPN GUI 的控制启动 VPN


DNS提示


说明: 有些 domain 被封掉了, 这时, 如果要访问这些网站, 应该将 server 上的 dns push 到 client.


开始→运行→输入“cmd”→打开命令提示符界面→输入“nslookup”,其中Address就是DNS服务器的IP地址。


*  LINUX下可以在 /etc/resolv.conf 中找到:


在使用OpenVPN时,有的时候需要使用VPN的DNS,有的时候却需要使用本地网络的DNS。OpenVPN可以在配置中支持DNS设置,如果是server来配置客户端DNS, 需要在配置文件中加入:


push “dhcp-option DNS 208.67.222.222″


push “dhcp-option DNS 208.67.220.220″


如果是在客户端配置,需要在配置文件设置:


dhcp-option DNS 208.67.222.222


dhcp-option DNS 208.67.220.220


DNS的IP地址要根据实际情况设定。


如果是希望使用本地的默认DNS,要确认在配置文件中把DNS的配置注释掉。


;push “dhcp-option DNS 208.67.222.222″


;push “dhcp-option DNS 208.67.220.220″


如果需要在多种情况下切换,可以在客户端创建多个openvpn配置文件,在连接时选择需要的配置即可。


2.客户端


客户端安装openvpn后,只需把服务端生成的ca.crt client1.crt client1.key三个文件拷到openvpn\config目录下,再建一个配置文件 client.ovpn 即可。


配置文件内容:


client


dev tap


proto tcp


remote 10.1.x.x 443//服务器ip 端口


resolv-retry infinite


nobind


persist-key


persist-tun


ca ca.crt


cert client1.crt


key client1.key


ns-cert-type server


comp-lzo


verb 3


然后右键点击 client.ovpn 文件名选择Start OpenVPN on this config file即可启动, 或者通过 OpenVPN GUI 的控制启动 VPN


小技巧:


让openvpn随系统自启:编个批处理,写入以下代码:


net start openvpnservice


openvpn-gui-1.0.3 –connect client1.ovpn


pause


其中:


net start openvpnservice 是启动openvpn的系统服务。


openvpn-gui-1.0.3  –connect client.ovpn是用命令行方式连接openvpn,这里要注意路径问题:一是openvpn-gui-1.0.3,这个文件在 OpenVPN\bin目录下,如果出现不是有效命令,请在系统环境变量里把“C:\Program Files\OpenVPN\bin”添加进去;二是client.ovpn配置文件的路径,如果配置文件不是在config根目录,请用绝对路径。


到此OpenVPN虽然配置完成,可以成功组成虚拟个人网,客户端(192.168.10.2)和服务器(192.168.10.1)可以ping通。但客户端还不能通过服务器代理访问外网。为了达到这个目的现需要在服务器端开启NAT服务。


 


具体步骤如下:


1.  启动Routing And Remote Access服务(必须)


停止系统防火墙服务,或添加vpn端口443例外到防火墙规则


如果需要用到局域网


启动Server ,Workstation ,TCP/IP NetBIOS Helper服务(以上3个服务基本上默认已经启动)


2. 修改注册表


HKEY_LOCAL_MACHINE\SYSTEM


\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter= 1  


重启


3.进入命令行(*如果没有routing这个模块,看稍后提取文件)


  netsh


   routing ip nat


   install


   add interface name="本地连接 2" mode=full //服务器上用于上外网的连接


   add interface name="本地连接 3" mode=private //安装OpenVPN时生成的虚拟连接


   add interface name="内部" mode=private


 


以上步骤实现后,则VPN+NAT配置成功。可拨入主机,并可通过主机代理出去访问主机所在的资源。如同处在主机带的局域网中。


注意:最后三行中的"本地连接 2"、"本地连接 3"和“内部”是在“网络连接”中显示的名字,“本地连接”一般都能看到,而“内部”只有在有vpn client连接的时候才能看到。一般来说,“内部”这个名字是不用改的,“本地连接 2”、“本地连接 3”请根据自己机器的具体情况修改。


至此,配置完毕,如果不能拨号,重启后即可


提取文件:Windows Vista/7 windows2008中netsh没有routing这个模块


Vista可以提取Windows xp或Windows Server 2003中%systemdrive%windows/system32/下的ippromon.dll和ipmontr.dll文件到Vista/7下的Windows/system32目录下


Win7必须提取Windows Server 2008 R2 中的以上文件到以上目录


然后cmd运行以下命名


netsh


delete helper ipmontr.dll


delete helper ippromon.dll


add helper ipmontr.dll


add helper ippromon.dll


然后再执行上面的第3步即可


如果外网vpn连接后不能上网,请点击vpn连接属性,去掉“使用远端网关和dns”