@gzm1997
2017-11-22T10:48:01.000000Z
字数 3722
阅读 1003
web作业
郭柱明 15331094
openvpn客户端服务器结构:
openvpn的虚拟网卡结构:
openvpn就是在客户端和服务端都安装一个虚拟网卡,并且获得一个虚拟的ip地址,这些虚拟的ip地址可以相互访问,其中openvpn服务器起到路由和控制的作用(相当于一个虚拟路由器)
当然,这个虚拟网卡毕竟是虚拟的,我们发送给虚拟网卡的数据在经过封装之后还是需要通过物理网卡才能发送出去。因此,OpenVPN还要做的另外一件事就是,采用数据加密、身份验证等各种手段确保数据安全无误地到达目的地。
在openvpn中,最常用的加密手段是ssl协议。使用ssl协议就需要相应的证书的密钥,因此需要在服务端生成相应的证书和密钥。
ssl/tls握手过程:
1.安装openvpn,安装在F:\openvpn\setup下
2.修改F:\openvpn\setup\easy-rsa\vars.bat.sample文件,设置初始用户变量,修改如下:
set HOME=F:\openvpn\setup\easy-rsa
set KEY_CONFIG=F:\openvpn\setup\easy-rsa\openssl-1.0.0.cnf
整个vars.bat.sample文件:
@echo off
rem Edit this variable to point to
rem the openssl.cnf file included
rem with easy-rsa.
rem Automatically set PATH to openssl.exe
FOR /F "tokens=2*" %%a IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN"') DO set "PATH=%PATH%;%%b\bin"
rem Alternatively define the PATH to openssl.exe manually
rem set "PATH=%PATH%;C:\Program Files\OpenVPN\bin"
set HOME=F:\openvpn\setup\easy-rsa
set KEY_CONFIG=F:\openvpn\setup\easy-rsa\openssl-1.0.0.cnf
rem Edit this variable to point to
rem your soon-to-be-created key
rem directory.
rem
rem WARNING: clean-all will do
rem a rm -rf on this directory
rem so make sure you define
rem it correctly!
set KEY_DIR=keys
rem Increase this if you
rem are paranoid. This will slow
rem down TLS negotiation performance
rem as well as the one-time DH parms
rem generation process.
set DH_KEY_SIZE=2048
rem Private key size
set KEY_SIZE=1024
rem These are the default values for fields
rem which will be placed in the certificate.
rem Change these to reflect your site.
rem Don't leave any of these parms blank.
set KEY_COUNTRY=US
set KEY_PROVINCE=CA
set KEY_CITY=SanFrancisco
set KEY_ORG=OpenVPN
set KEY_EMAIL=mail@host.domain
set KEY_CN=changeme
set KEY_NAME=changeme
set KEY_OU=changeme
set PKCS11_MODULE_PATH=changeme
set PKCS11_PIN=1234
3.转到easy-rsa目录下,输入如下命令进行初始化工作:
init-config.bat
vars.bat
clean-all.bat
结果:
4.创建CA证书
在easy-rsa目录下输入build-ca.bat命令,vpn_ca设置为vpn_ca外,其他CA变量的值随意。
build-ca.bat
此时可以在keys目录下看到CA的证书和私钥
打开ca证书ca.crt,如下:
5.创建服务端证书
build-key-server.bat server
流程跟上面创建CA证书流程相似,uyye'sh也是要设置common name为server,并设置密码
结果:
6.同理创建客户端证书
7.创建迪菲·赫尔曼密钥
build-dh.bat
结果:
8.tls-auth防御DoS、UDP淹没等恶意攻击
openvpn --genkey --secret keys/ta.key
此时keys文件夹中含有:
9.openvpn配置
从keys文件夹中分别复制如下文件到客户端和服务端的 安装路径/config目录中
服务端:
客户端client1:
除此之外,需要在各自的config目录下存放一个.ovpn配置文件,服务端是server.ovpn,客户端是client.ovpn,配置文件样例存放在sample-config文件夹下
server.ovpn如下:
local 138.68.9.2 #指定监听的本机IP
port 1194 #指定监听的本机端口号
proto udp #指定采用的传输协议,可以选择tcp或udp
dev tun #指定创建的通信隧道类型,可选tun或tap
ca ca.crt #指定CA证书的文件路径
cert server.crt #指定服务器端的证书文件路径
key server.key #指定服务器端的私钥文件路径
dh dh1024.pem #指定迪菲赫尔曼参数的文件路径
server 10.0.0.0 255.255.255.0 #指定虚拟局域网占用的IP地址段和子网掩码,此处配置的服务器自身占用10.0.0.1。
ifconfig-pool-persist ipp.txt #服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
tls-auth ta.key 0 #开启TLS-auth,使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1。
keepalive 10 120 #每10秒ping一次,连接超时时间设为120秒。
comp-lzo #开启VPN连接压缩,如果服务器端开启,客户端也必须开启
client-to-client #允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接
persist-key
persist-tun #持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。
status openvpn-status.log #指定记录OpenVPN状态的日志文件路径
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
client.ovpn:
client #指定当前VPN是客户端
dev tun #必须与服务器端的保持一致
proto udp #必须与服务器端的保持一致
remote 192.168.1.101 1194 #指定连接的远程服务器的实际IP地址和端口号
resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。
nobind #不绑定特定的本地端口号
persist-key
persist-tun
ca ca.crt #指定CA证书的文件路径
cert client1.crt #指定当前客户端的证书文件路径
key client1.key #指定当前客户端的私钥文件路径
ns-cert-type server #指定采用服务器校验方式
tls-auth ta.key 1 #如果服务器设置了防御DoS等攻击的ta.key,则必须每个客户端开启;如果未设置,则注释掉这一行;
comp-lzo #与服务器保持一致
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
10.开启服务端和客户端连接
服务端:
开始->运行->services.msc,启动openVPN服务
客户端:
双击桌面的OpenVPN GUI图标运行客户端,连接服务器
连接成功:
连接成功后,桌面右下角的openvpn logo显示为绿色。