Server

安装必要的软件包

yum install -y openvpn easy-rsa openssl openssl-devel lzo lzo-devel 

创建工作环境

cp /usr/share/doc/openvpn-2.3.8/sample/sample-config-files/server.conf /etc/openvpn/

修改easy-rsa变量

在生成证书之前,先要对2.0目录中的vars文件进行修改

vars文件存储的是一些用户变量设置信息,每次生成证书都会使用到其中的某些变量。我们着重建议你关注红色矩形框内的变量,并选择性地对其进行修改(可以不修改这些参数,但不要把这些参数留空),其实不改vars这个文件,也不影响VPN的运行

找到”export KEY_SIZE=”这行,根据情况把1024改成2048或者4096
下面是一些用户相关信息配置

export KEY_COUNTRY="CN" 所在国家
export KEY_PROVINCE="BJ" 所在省
export KEY_CITY="Beijing" 所在城市
export KEY_ORG="xxx" 所在组织
export KEY_EMAIL="xxx@xxx.cn" 邮箱地址
export KEY_OU:"xxx" 机构单位或部门名称

生成CA证书

保持当前目录为OpenVPN根目录/easy-rsa/2.0。然后依次执行下列命令:

初始化命令,用于设置后续命令所需的相关变量信息

. ./vars

清除之前创建的所有证书和密钥

./clean-all

生成CA证书和密钥

./build-ca

证书的用户信息可以根据需要自行输入。如果不输入、直接回车,则表示该字段使用"[]"中的默认值(也就是前面vars文件中设置的参数值);如果输入".",则表示该字段留空。在这里需要注意Common Name字段,这相当于证书的"用户名",请确保每个证书的Common Name字段是唯一的。

生成的证书和密码默认均存放在当前目录的子文件夹keys中。

生成服务器端证书

服务端及客户端的证书和密钥都必须由OpenVPN服务器上的easy-rsa生成

./build-key-server server

生成服务器端所需的证书和密钥

先输入证书的相关信息,并在最后输入两次"y"确认生成即可

生成客户端证书

./build-key clientName

clientName为自定义的客户端名称(例如:client1、client2、jim、tom)。
如果需要为多个客户端生成证书,只需要分别执行多次即可。

生成 Diffie Hellman交换密钥

Diffie Hellman交换密钥是一种安全协议,用以对数据进行加密

./build-dh

生成TLS-auth密钥

这一步骤是可选操作。OpenVPN提供了TLS-auth功能,可以用来抵御Dos、UDP端口淹没攻击。出于安全考虑,你可以启用该功能;启用该功能,

执行命令

openvpn --genkey --secret keys/ta.key

来生成TLS-auth所需的密钥文件。

到这里,我们的证书生成就告一段落了。如果你以后想要生成新的客户端或执行其他操作,只需要先执行命令source ./vars,然后执行相应的命令即可,例如./build-key client2。

最后,我们来看看我们一共生成了哪些证书和密钥。

CA证书和密钥
客户端client1的证书和密钥,
Diffie Hellman交换密钥 (如果你的KEY_SIZE=1024,则该文件名称为dh1024.pem)。
服务器端证书和密钥。
启用tls-auth所需的文件。

编写配置文件

众所周知,OpenVPN虽然可以分为客户端和服务器,不过它们的安装程序是完全一样的,只是通过不同的证书和配置文件来进行区分。在这里,我们先在OpenVPN主目录下创建一个config目录,并将其所需的证书和密钥文件拷贝到该目录中。

其中,服务器端需要用到的文件有:

ca.crt
ca.key
dh2048.pem (如果最初的变量KEY_SIZE设为1024,这里就是dh1024.pem)
server.crt
server.key
ta.key (如果不开启tls-auth,则无需该文件)

客户端client1需要用到的文件有:

ca.crt
client1.crt
client1.key (名称client1根据个人设置可能有所不同)
ta.key (如果不开启tls-auth,则无需该文件)

在这里,我们以OpenVPN服务器端为例来演示上述操作流程。

创建config目录

mkdir /usr/local/openvpn-2.3.4/config

复制证书和密钥文件到config目录

cp keys/ca.crt keys/ca.key keys/server.crt keys/server.key keys/dh2048.pem keys/ta.key 
/usr/local/openvpn-2.3.4/config

此外,还需要为服务器和每个客户端的config目录分别编写一个配置文件,服务器端的配置文件为server.conf,客户端的配置文件为client.ovpn

这两个配置文件该如何编写呢?OpenVPN已经在sample/sample-config-files子目录中为我们提供了相关的示例文件server.conf和client.conf,并且配置文件中的每个配置选项均有详细的英文说明(配置文件中"#"或";"开头的均为注释内容)。

现在,我们先将server.conf文件拷贝到config目录中,然后再对其进行修改。

转到simple-config-files目录

cd /usr/local/openvpn-2.3.4/sample/sample-config-files

复制server.conf到config目录中

cp server.conf /usr/local/openvpn-2.3.4/config

服务端配置文件server.conf

local 192.168.1.106     #指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可选的,默认监听所有IP地址。
port 1194             #指定监听的本机端口号
proto udp             #指定采用的传输协议,可以选择tcp或udp
dev tun               #指定创建的通信隧道类型,可选tun或tap
ca ca.crt             #指定CA证书的文件路径
cert server.crt       #指定服务器端的证书文件路径
key server.key    #指定服务器端的私钥文件路径
dh dh2048.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.106 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,等级越高日志内容越详细

启动服务

openvpn server.conf &

Client

RaspberryPi

RaspberryPi
OS: 2015-05-05-raspbian-wheezy

安装OpenVPN

apt-get install openvpn

拷贝OpenVPN的五个文件到/etc/openvpn/

修改.ovpn文件中的cacertkey 三项后对应位置为实际对应的位置

openvpn /etc/openvpn/*.ovpn &

Windows

  1. https://openvpn.net/下载并安装OpenVPN官方客户端

  2. ca.crtca.keyclient.crtclient.ketclient.ovpn五个配置文件拷入C:\Program Files\OpenVPN\config

  3. 使用管理员权限运行OpenVPN