< 返回上层

windows下利用OpenVPN搭建VPN服务器

2016-10-03 22:28:10 9007次

一、OpenVPN是一款功能强大,可跨平台(支持Win 2000/XP/2003, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, 和 OpenBSD)使用的SSL VPN服务器软件(具体说明见官方主页官方主页http://openvpn.net)。
       下载地址:http://openvpn.net/index.php/download.html



二、安装与配置


第一步:安装openvpn这一部分是服务端跟客户端都要做的工作,操作完全相同双击 openvpn-2.2.2-install.exe进行安装,点击NEXT,I Agree,NEXT之后开始选择安装路径,建议按默认路径C:Program FilesOpenVPN安装(以免后面生成证书麻烦) 。点击 Install 开始安装,安装过程中,弹出硬件安装窗口,点击仍然继续,安装虚拟网卡。点击 next,Finish 完成安装。


第二步: VPN服务器配置:
说明:架设OPENVPN服务器,服务器方面做的工作比较多,客户端相对来说就比较简单。
服务器采用RSA证书和密钥验证方式对客户端进行验证,默认情况下证书和用户是一对一的,多个用户使用同一证书会被踢出。所以首先要做的工作就是证书的制作。
在进行操作之前,首先进行初始化工作:

(1)修改C:Program FilesOPENVPNeasy-rsavars.bat.sample的以下部分
set HOME=%ProgramFiles%OpenVPNeasy-rsa
set KEY_COUNTRY=US
set KEY_PROVINCE=CA
set KEY_CITY=SanFrancisco
set KEY_ORG=FortFunston
set KEY_EMAIL=mail@domain.com
请根据自身情况修改,也可以不修改!下面是解释
set HOME=C:Program FilesOPENVPNeasy-rsa
set KEY_COUNTRY=CN                               #(国家)
set KEY_PROVINCE=GuangDong              #(省份)
set KEY_CITY=ShenZhen                             #(城市)
set KEY_ORG=oovc.com                              #(组织)
set KEY_EMAIL=admin@oovc.com            #(邮件地址)

文件中以#开始的是注释,请不要写到文件中。


打开命令提示符:
开始-->运行...-->键入cmd,回车,进入命令提示符
或者 开始-->程序-->附件-->命令提示符

进入C:Program Filesopenvpneasy-rsa目录下:
命令如下:
(1)cd C:Program Filesopenvpneasy-rsa
init-config
vars
clean-all

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


(2)下面开始证书?制作:
生成根证书:(请输入红字部分)
build-ca
Common Name (eg, your name or your server's hostname) [changeme]:OpenVPN-CA
Name [changeme]:

build-dh

生成服务端密钥:
build-key-server server 
下面贴出需要交互的部分,其他地方默认。
Common Name (eg, your name or your server's hostname) [changeme]:server
Name [changeme]:


The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'OpenVPN'
organizationalUnitName:PRINTABLE:'changeme'
commonName            :PRINTABLE:'server'
name                  :PRINTABLE:'changeme'
emailAddress          :IA5STRING:'mail@host.domain'
Certificate is to be certified until Aug 19 11:12:06 2022 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y

生成客户端密钥
build-key client

Common Name (eg, your name or your server's hostname) [changeme]:client
Name [changeme]:


The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'OpenVPN'
organizationalUnitName:PRINTABLE:'changeme'
commonName            :PRINTABLE:'11111111'
name                  :PRINTABLE:'changeme'
emailAddress          :IA5STRING:'mail@host.domain'
Certificate is to be certified until Aug 19 11:24:35 2022 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y


build-key client2 //可以继续配置第二个VPN客户端密钥
//生成的密钥存放于C:Program Filesopenvpneasy sakeys目录下


接下来开始配置服务器和客户端:

(3)将生成的ca.crt,dh1024.pem,server.crt,server.key复制到C:Program FilesOpenVPNconfig目录下,这四个文件是VPN服务端运行所需要的文件。

(4)ca.crt,client.crt,client.key这三个是VPN客户端所需要的文件,复制到客户端机器的C:Program FilesOpenVPNconfig目录下

(5)在C:Program FilesOpenVPNconfig目录下创建服务端配置文件server.ovpn:


服务器端配置文件示例:(server.ovpn)

local 192.168.3.1     //openvpn服务端网卡的IP,也可以不写
port 443                     //服务端端口号,根据需要自行修改,如果是用http代理连接请不要修改
proto tcp                    //通过tcp协议连接
dev tap                       //路由模式windows下必须设为tap
ca ca.crt                     //ca证书存放位置我放在了当前目录下面也可以用(ca "C:\Program Files\OPENVPN\config\ca.crt")
cert server.crt            //服务器证书存放位置,请根据实际情况自行修改
key server.key           //服务器密钥存放位置,请根据实际情况自行修改
dh dh1024.pem       //dh1024.pem存放位置,请根据实际情况自行修改
server 172.16.0.0 255.255.255.0      //虚拟局域网网段设置,请根据需要自行修改,不支持和拔号网卡位于同一网段
ifconfig-pool-persist ipp.txt        //在openvpn重启时,再次连接的客户端将依然被分配和以前一样的IP地址
push "route 0.0.0.0 0.0.0.0"      //表示client通过VPN SERVER上网
push "redirect-gateway def1 bypass-dhcp"    //使客户端所有网络通信通过vpn
push "dhcp-option DNS 208.67.222.222"      //DNS配置,根据实际情况配置
push "dhcp-option DNS 208.67.220.220"      //DNS配置,根据实际情况配置
client-to-client             //使客户端能相互访问
duplicate-cn                //这条常用于测试用途,注释该条可实现限制一个证书在同一时刻只能有一个客户端接入
keepalive 10 120

;cipher BF-CBC        # Blowfish (default)      //选择一种加密算法与客户端保持一致
;cipher AES-128-CBC  # AES
;cipher DES-EDE3-CBC  # Triple-DES


comp-lzo                           //允许数据压缩与客户端保持一致
;max-clients 100              //最大客户端并发连接数量


;user nobody                    //定义运行openvpn的用户用于用户认证可以不采用用户认证
;group nobody


persist-key   //通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tap   //通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup


status openvpn-status.log      //定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
verb 3               //设置日志记录冗长级别
mute 20           //重复日志记录限额

(6)客户端设置:在客户端安装完成之后,需要将 ca.crt client.crt client.key 这三个文件拷贝到C:Program Filesopenvpnconfig目录下,这三个文件由服务端生成,所以,连接谁的服务器,就需要跟谁索取这三个文件。

然后,编辑一个 client.ovpn的配置文件存放到C:Program Filesopenvpnconfig目录下,客户端就可以进行连接了。
客户端文件示例:(client.ovpn)

client             //定义是一个客户端
dev tap          //路由模式windows下必须设为tap,与服务端保持一致
proto tcp       //通过tcp协议连接,与服务端保持一致
remote 192.168.223.1 443     //指定服务端IP地址和端口,可以用多行指定多台服务器,实现负载均衡(从上往下尝试)
;remote-random               //若上面配置了多台服务器,让客户端随机连接
resolv-retry infinite           //解析服务器域名
nobind          //客户端不需要绑定端口


;user nobody      //安全设置。注意:Windows不能设置
;group nobody


persist-key
persist-tun
;http-proxy-retry          //代理连接错误时重试  
;http-proxy [proxy server] [proxy port]     //若客户端通过HTTP Proxy设置,Proxy不能使用UDP为VPN的通讯协议
mute-replay-warnings       //无线网经常会产生很多重复的数据包。将此标志设置为重复的数据包关闭警告。
ca “C:\Program Files\OpenVPN\config\ca.crt”              //证书位置根据实际情况添加
cert “C:\Program Files\OpenVPN\config\client.crt”      //证书位置根据实际情况添加
key “C:\Program Files\OpenVPN\config\client.key”     //证书位置更加实际情况添加
comp-lzo          //使用lzo压缩,与服务端一致
verb 3
;mute 20


上面的配置拔号成功后,VPN SERVER的IP:172.16.0.1,VPN client的IP:172.16.0.2。ping 172.16.0.1  //相互之间应能ping通



三、openvpn客户端通过服务端访问网络
(1)设置VPN SERVER上的”internet连接共享“来实现clinet通过VPN SERVER上网:(需要两块网卡)


(2)单网卡分类如下:

1. 打开 Routing and remote access服务 
2. HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersIPEnableRouter= 1   重启
2 netsh
   routing ip nat
   install
   add interface name="本地连接 2" mode=full //服务器上用于上外网的连接
   add interface name="本地连接 3" mode=private //安?OpenVPN时生成的虚拟连接
   add interface name="内部" mode=private

输入show interface命令后显示:
NAT 内部 配置
---------------------------
模式              : 专用接口


NAT 本地连接 2 配置
---------------------------
模式              : 地址和端口转换


NAT 本地连接 3 配置
---------------------------
模式              : 专用接口


即表示NAT配置成功,重启。

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



WindowsXP Pro下单网卡实现VPN+NAT代理服务器

Step 1
   按Win+R 输入并运行services.msc,在服务里面寻找Routing and Remote Access,右键单击进入属性,将启动类型更改为自动,并点击启动按钮。
Step 2
   打开网上邻居,在左侧网络任务里面点击"查看网络连接",可以看到"传入"字样,这表示Step1操作?功.单击右键打开"传入的连接"的属性,在"常规"标签中虚拟专用网中钩选"允许他人通过internet...",在"用户"标签中允许的连接的用户钩选相应用户,确定退出。至此,VPN配置完毕。
Step 3
   按Win+R 输入并运行netsh,继续输入routing并回车,继续输入ip并回车,继续输入nat并回车,继续输入install并回车。然后输入add interface name="内部" mode=private并回车,输入add interface "本地连接" full并回车。输入show interface并回车,如果出现


NAT 内部 配置
---------------------------
模式              : 专用接口

NAT 本地连接 配置
---------------------------
模式              : 地址和端口转换

即表示NAT配置成功。


windows Vista单网卡VPN server+NAT配置成功

Windows XP和2003都能做NAT,区别在于2003有GUI配置界面,而XP只能通过字符界面来配置,也就是用netsh routing。但是Vista和win7默认在netsh命令控制台中没有routing接口,需从服务版操作系统中复制ipmontr.dll和ippromon.dll这2个文件到system32文件夹中,Vista与windows server 2008 相对应(windows server 2003好像也能用) ,win7与windows server 2008 R2相对应(2008R2没有32位版,可以用GNS3模拟一个路由器然后一个口连本地物理网卡一个口连openv虚拟出来的网卡,然后再模拟的路由器上做NAT和路由配置就可以绕过netsh routing的配置了,实际测试好像经过模拟设备速度变慢了),复制相应的服务器操作系统文件ipmontr.dll和ippromon.dll即可(服务器只有在脚色配置中配置启动了路由和路由远程控制脚色才会有这两个文件)我从2003的安装镜像里面找到两个文件。add helper ippromon.dll 的时候提示错误,先 delete helper ipmontr.dll, delete helper ippromon.dll,然后再add helper就成功了。


加完这两个文件,就能看?netsh里有routing了,然后就能照着XP下面的配置方法来配置了。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

更多建议

这条文档是否有帮助解决问题?

没有帮助 有帮助

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: