# openvpn搭建文档


## 安装相关包文件


### 安装openssl和lzo包,lzo包用于压缩通讯数据加快传输速度

```

yum -y install openssl openssl-devel

yum -y install lzo

```


### 安装openvpn和easy-rsa


```

yum -y install openvpn easy-rsa

```


## 服务器端生成相关文件


### 修改vars文件


```

cd /usr/share/easy-rsa/2.0/

vim vars

export KEY_COUNTRY="CN"

export KEY_PROVINCE="Beijing"

export KEY_CITY="Beijing"

export KEY_ORG="MyOrganization"

export KEY_EMAIL="me@myhost.mydomain"

export KEY_OU="MyOrganizationalUnit"

```


### 初始化环境变量


```

source vars

```


### 清除keys目录下所有与证书相关的文件

### 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里

```

./clean-all

```

### 生成根证书ca.crt和根密钥ca.key(一路按回车即可)

```

./build-ca

```

### 生成根证书ca.crt和根密钥ca.key(一路按回车即可)

```

./build-ca

```


### 每一个登陆的×××客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份

### 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)

```

./build-key client1

./build-key client2

```


### 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)


```

./build-dh

```


### 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)


```

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

```


### 最后生成的文件有


```

[root@moban keys]# ll

总用量 120

-rw-r--r-- 1 root root 5653 2月  25 04:37 01.pem

-rw-r--r-- 1 root root 5532 2月  25 04:38 02.pem

-rw-r--r-- 1 root root 5532 2月  25 04:38 03.pem

-rw-r--r-- 1 root root 1834 2月  25 04:36 ca.crt

-rw------- 1 root root 1704 2月  25 04:36 ca.key

-rw-r--r-- 1 root root 5532 2月  25 04:38 client1.crt

-rw-r--r-- 1 root root 1102 2月  25 04:37 client1.csr

-rw------- 1 root root 1704 2月  25 04:37 client1.key

-rw-r--r-- 1 root root 5532 2月  25 04:38 client2.crt

-rw-r--r-- 1 root root 1102 2月  25 04:38 client2.csr

-rw------- 1 root root 1704 2月  25 04:38 client2.key

-rw-r--r-- 1 root root  424 2月  25 04:40 dh2048.pem

-rw-r--r-- 1 root root  455 2月  25 04:38 index.txt

-rw-r--r-- 1 root root   21 2月  25 04:38 index.txt.attr

-rw-r--r-- 1 root root   21 2月  25 04:38 index.txt.attr.old

-rw-r--r-- 1 root root  303 2月  25 04:38 index.txt.old

-rw-r--r-- 1 root root    3 2月  25 04:38 serial

-rw-r--r-- 1 root root    3 2月  25 04:38 serial.old

-rw-r--r-- 1 root root 5653 2月  25 04:37 server.crt

-rw-r--r-- 1 root root 1102 2月  25 04:37 server.csr

-rw------- 1 root root 1704 2月  25 04:37 server.key

-rw------- 1 root root  636 2月  25 04:44 ta.key

```


### 将生成的keys文件移动至/etc/openvpn目录下

```

mv keys /etc/openvpn/

```


### 复制一份服务器端配置文件模板server.conf到/etc/openvpn/

```

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

[root@moban ~]# cat /etc/openvpn/server.conf

local 192.168.199.10

port 1194

proto tcp

dev tun

ca /etc/openvpn/keys/ca.crt

cert /etc/openvpn/keys/server.crt

key /etc/openvpn/keys/server.key

dh /etc/openvpn/keys/dh2048.pem

server 10.8.0.0 255.255.255.0

push "route 172.16.1.0 255.255.255.0"

ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo

persist-key

persist-tun

status openvpn-status.log

verb 3

client-to-client

duplicate-cn

log /var/log/openvpn.log

```


### 解释:



|参数|含义|

|-------|----------------------------|

|local |vpn-server的外网IP地址

|port  |服务的端口默认1194,可以更改

|proto |数据传输协议tcp/udp 建议用tcp

|dev tun |设置创建 tun 的路由 IP 通道

|ca    |CA证书的路径

|cert|cert证书路径

|key|key文件路径

|dh|dh文件路径

|server| 默认虚拟局域网网段,不要和实际的局域网冲突即可

|push|是我这台×××服务器所在的内网的网段,读者应该根据自身实际情况进行修改

|ifconfig-poll-persist|维持一个客户端和 virtual IP 的对应表,以方便客户端重新连接可以获得同样的 IP

|keepalive|设置超市时间,重试时间

|comp-lzo|lzo压缩

|persist-tun|

|status|服务器端状态日志

|verb|日志级别

|client-to-client|允许客户端之间通信

|duplicate-cn|允许多个客户端使用同一个账号登录,实践中人数不多的情况下建议每人一个账号

|log|日志文件的路径



## 配置内核和防火墙,启动服务



### 开启路由转发功能

```

sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf

sysctl -p

```

### 配置防火墙,别忘记保存

```

iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

service iptables save

``` 

### 启动openvpn并设置为开机启动

```

service openvpn start

chkconfig openvpn on

```


## 客户端window7配置文件


### 将keys中的client1.crt、client1.key、ca.key文件下载到本地


### 下载安装openvpn windows客户端软件openvpn-install-2.3.3-I002-x86_64.exe


将下载到本地的上述文件放在安装客户端路径下的config文件下,并创建client1.ovpn文件,内容如下


```

client

dev tun

proto tcp

remote 192.168.199.10 1194

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

```


有以下几个文件


![123](C:/Users/hunter/Desktop/client.png)


点击如下图标,启动客户端


![运行vpn客户端](C:/Users/hunter/Desktop/运行vpn客户端.png)


右键如下图标,开始连接vpn


![连接客户端](C:/Users/hunter/Desktop/连接客户端.png)



成功连接后图标变绿


本机生成10.8.0.0/24网段的IP


![生成本机IP](C:/Users/hunter/Desktop/生成本机IP.png)


## openvpn基于CA证书验证的简单搭建完毕