现在的位置: 首页 > 综合 > 正文

openVPN Windows下安装使用简明说明

2013年12月05日 ⁄ 综合 ⁄ 共 4234字 ⁄ 字号 评论关闭

----------服务端(单网卡,非网关服务器,局域网内任一台机):windows  客户端:windows-------------------
0、实现:家里的电脑可访问公司里的任一台机,公司里的任一台机可以访问我家里的电脑

一、环境说明:
1、服务端和客户端安装同个软件,windows版:OpenVPN 2.1.1

2、安装时选全部安装,目录可改可不改,最好改成C:\openvpn,安装好后会多出一块虚拟网卡

二、安装及生成证书过程:
3、打开C:\OpenVPN\easy-rsa目录下的vars.bat.sample,修改里面的变量,其实不改也没关系

4、cmd--cd进入openvpn\easy-rsa目录,运行init-config

5、dos中运行vars

6、dos中运行clean-all

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

8、生成根证书:运行build-ca开始证书的制作,每次运行build-ca生成的证书的Common Name不能相同

9、build-dh

10、生成服务端密钥:build-key-server server01,Common Name要输入与上面的参数一样,即server01

11、生成客户端密钥:build-key client01,Common Name要输入与上面的参数一样,即client01

12、生成ta.key:C:\OpenVPN\easy-rsa>openvpn --genkey --secret keys/ta.key
注:生成ta.key的目的是为防止恶意攻击(如DOS、UDP port flooding),我们生成一个“HMAC firewall”,这个在下面的配置文件中好像没有用到,一般此步跳过

三、服务端配置:
13、将生成的keys文件夹内的ca.crt,dh1024.pem,server01.crt,server01.key,ta.key 复制到 OpenVPN\config目录下

14、OpenVPN\config目录下创建server.ovpn(名字可以任意),内容及说明如下(注:不能用全角引号,引号和最后的字符不要有空格,可以有中文注释,但不能太长,太长会报错):
#local 10.0.30.234 #建立VPN的IP
port 1194 #端口号,根据需要,自行修改,如果是用http代理连接,请不要修改,默认是1194
proto tcp-server #通过TCP协议连接
dev tap #申明使用的设备,可选tap和tun,tap是二层设备,支持链路层协议;Tun是三层的点对点协议,限制稍微多一些。win下必须设为tap
server 192.168.11.0 255.255.255.0  #虚拟局域网网段设置,请根据需要自行修改,不能和拔号网卡位于同一网段
push "route 10.0.30.0 255.255.255.0"
push "route 10.0.60.0 255.255.255.0" #表示client通过VPN SERVER上网,通过VPN Server向Client push路由,client通过pull指令获得Server push的所有选项并应用
keepalive 20 180 
ca "C:\\OpenVPN\\config\\ca.crt" #CA证书存放位置,这几个路径可用相对路径,如ca ca.crt
cert "C:\\OpenVPN\\config\\server.crt" #服务器证书存放位置
key "C:\\OpenVPN\\config\\server.key" #服务器密钥存放位置
dh "C:\\OpenVPN\\config\\dh1024.pem"  #dh1024.pem存放位置
#push "redirect-gateway def1" #使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
push "dhcp-option DNS 8.8.8.8" #DNS,请根据实际情况自行修改
mode server
tls-server
status "C:\\OpenVPN\\config\\openvpn-status.log" #LOG记录文件存放位置
comp-lzo #对数据进行压缩,注意Server和Client应该一致
verb 4 #log 文件的冗余水平
#script-security 3 system   --加入脚本处理,如用密码验证
#auth-user-pass-verify author.cmd via-env  --加入脚本处理,如用密码验证

四、客户端配置:
15、ca.crt ,client01.crt, client01.key ,ta.key传到客户端的OpenVPN\config目录下

16、在客户端的OpenVPN\config目录下创建client.ovpn(名字可以任意),内容及说明如下:
client
dev tap #windows下面用tap,LINUX下用tun
proto tcp-client
remote 183.62.152.141 11194 #VPN服务器的域名或IP 端口
resolv-retry infinite
nobind
#http-proxy 192.168.0.13 80  #这里填入你的代理服务器地址和端口
mute-replay-warnings
ca ca.crt
cert client01.crt
key client01.key
status openvpn-status.log
comp-lzo
verb 4
#auth-user-pass   --打开密码验证功能,即会弹出窗口输入帐号、密码
#auth-nocache  --帐号、密码是否保存cache,一般要用密码验证的话,把这个注释去掉

五、开启nat服务
17、进行连接就可以相互ping通了,但客户端还不能通过服务器代理访问外网。为了达到这个目的现需要在服务器端开启NAT服务
--打开 Routing and remote access服务
--注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter = 1
--cmd,依次输入netsh
    routing ip nat
    install
    add interface name="本地连接" mode=full //服务器上用于上外网的连接,名称要对应
    add interface name="本地连接 1" mode=private //安装OpenVPN时生成的虚拟连接,名称要对应
    add interface name="内部" mode=private //名称不用变
    show interface命令后显示:
NAT 内部 配置
---------------------------
模式              : 专用接口

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

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

即表示NAT配置成功
--重启生效

六、特殊说明
18、多个客户端使用相同证书同时登陆:注释掉duplicate-cn

19、开机自动连:把服务打开成自动就行,服务端和客户端都可以这样

20、客户端输入帐号密码验证:
--服务端加入:
#用于用户名和密码验证,使得可以在变量中取到密码.
script-security 3 system
#开启用户密码验证脚本,(脚本文件名author.cmd),使用环境变量的方式验证.
auth-user-pass-verify author.cmd via-env

--配置文件夹下生成一个author.cmd文件,内容如下:
rem @echo off
::初使化
set chk_pass=0
set chk_user=0
set chk_active=0
for /f "skip=2 usebackq tokens=1,2,3 delims=," %%i in (`find /i "%username%," users`) do (
        if "%%i"=="%username%" (
                set chk_user=1
                ::再进一步验证用户名和证书用户名,注释掉以下语句就可以了.
                ::if /i not "%username%"=="%common_name%" set chk_user=0
                if /i "%%k"=="1" set chk_active=1
                if /i "%%j"=="%password%" set chk_pass=1
        )
)
::验证通过,直接返回一个值,0代表验证通过。
if "%chk_user%%chk_pass%%chk_active%"=="1 1 1 " exit /b 0
::可选验证操作记录,如果不记录,直接删除或注释掉该代码就可以了
echo.%time%        用户名:%username%        证书用户名:%common_name%验证失败!::::错误代码:%chk_user%,%chk_pass%,%chk_active% >>用户登录.log
::验证失败,让程序返回一个失败值1.
exit /b 1

--配置文件夹下生成一个USERS文件,内容如下:
用户,密码,1启用0禁用
user1,111,1
user2,111,0

--客户端配置文件加上:
auth-user-pass
auth-nocache  #可选的语句,一般建议加上,用途,加上以后就不会在内存中保存用户密码.

21、服务端内网别的机子要访问客户端:用端口映射跳转方式解决

22、客户端要访问服务端别的网段的服务器:用端口映射跳转方式解决

23、在双网卡的windows下,不用开启nat服务,但要在网卡中勾选“internet连接共享”

24、多个非同一物理环境的网段组成一个VPN:见赶星的播布客视频第4集

25、其他相关资源下载:http://download.csdn.net/detail/wang7dao/4387412

【上篇】
【下篇】

抱歉!评论已关闭.