系统 CentOS7.6
1. 依赖软件包安装
yum install -y openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig makecache autoconf libtool
2. 初始化准备
mkdir -p /usr/local/openvpn/etc/pki
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
3. vpn软件下载
cd /tmp/
wget https://github.com/OpenVPN/openvpn/archive/v2.4.6.tar.gz
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
或者
https://wenyu-software.oss-cn-hangzhou.aliyuncs.com/vpn.tar.gz
4. 编译安装openVPN
cd /tmp/ && tar xf v2.4.6.tar.gz && cd openvpn-2.4.6
autoreconf -i -v -f
./configure --prefix=/usr/local/openvpn/
make
make install
5. 安装EasyRSA
cd /tmp/ && tar xf EasyRSA-3.0.4.tgz -C /usr/local/openvpn/
6. 创建vars变量文件
cd /usr/local/openvpn/EasyRSA-3.0.4
cat vars
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "ZheJiang"
set_var EASYRSA_REQ_CITY "HangZhou"
set_var EASYRSA_REQ_ORG "OpenVPN CA"
set_var EASYRSA_REQ_EMAIL "admin@zhaowenyu.com"
set_var EASYRSA_REQ_OU "My Test VPN"
7. 初始化证书目录
./easyrsa init-pki
8. 创建ca证书
在创建CA证书,为防止私钥丢失后非法获取私钥内容,pass phrase
需要输入2次私钥加密的密码。在使用CA签发证书时,需要使用ca证书加密密码。
Common Name
是证书的根域名,不过一般不会使用到,可以填写任意字符串内容
./easyrsa build-ca
9. 创建服务的证书
服务端证书是指运行在openVPN 服务的机器上需要的证书。同理还会有客户端证书,他是客户端例如Windows使用的。openVPN使用的双向证书认证。
Common Name
是证书认证的域名或者IP地址或者主机名,可以使用回车即可
./easyrsa gen-req wenyu-server nopass
10. 签发服务端证书
签发证书时需要输入确认信息“yes” 同时签发会使用到CA证书,因此要输出创建CA时的密码
[root@lt-vpc-vpn EasyRSA-3.0.4]# ./easyrsa sign server wenyu-server
11. 创建Diffie-Hellman
确保key穿越不安全网络的命令:
[root@lt-vpc-vpn EasyRSA-3.0.4]# ./easyrsa gen-dh
12. 创建客户端证书
创建客户端证书时需要输入密码,这个密码是后面客户端连接服务页面上调填写的 Common Name是后面登录时需要输入的用户名????
[root@lt-vpc-vpn EasyRSA-3.0.4]# ./easyrsa gen-req wenyu-client
13. CA签发证书
[root@lt-vpc-vpn EasyRSA-3.0.4]# ./easyrsa sign client wenyu-client
14. ta.key 放置Dos攻击
如果服务器设置了防御DoS等攻击的ta.key,则必须每个客户端开启;如果未设置,则注释掉这一行;
/usr/local/openvpn/sbin/openvpn --genkey --secret pki/ta.key
15. 准备文件
服务端文件
cp pki/ca.crt /usr/local/openvpn/etc/pki/
cp pki/private/wenyu-server.key /usr/local/openvpn/etc/pki/
cp pki/issued/wenyu-server.crt /usr/local/openvpn/etc/pki/
cp pki/dh.pem /usr/local/openvpn/etc/pki/
cp pki/ta.key /usr/local/openvpn/etc/pki/
客户端文件
mkdir /root/client
cp pki/ca.crt /root/client/
cp pki/issued/wenyu-client.crt /root/client/
cp pki/private/wenyu-client.key /root/client/
cp pki/ta.key /root/client/
cd /root/
tar czvf client.tar.gz client
16. 编辑服务端配置文件
cat /usr/local/openvpn/etc/server.conf
#指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可选的,默认监听所有IP地址。
#local 192.168.1.123
port 1194
#指定采用的传输协议,可以选择tcp或udp
proto udp
#指定创建的通信隧道类型,可选tun或tap,前者工作在三层(TCP/IP),后者工作2层(链路层)
dev tun
ca /usr/local/openvpn/etc/pki/ca.crt
cert /usr/local/openvpn/etc/pki/wenyu-server.crt
key /usr/local/openvpn/etc/pki/wenyu-server.key
dh /usr/local/openvpn/etc/pki/dh.pem
#指定虚拟局域网占用的IP地址段和子网掩码,此处配置的服务器自身占用10.0.0.1。
server 10.8.0.0 255.255.255.0
#服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
ifconfig-pool-persist ipp.txt
#如果启用,该命令将配置所有客户端通过×××重定向其默认网络网关,导致所有IP流量(如Web浏览和#和DNS查找)通过×××
#push "redirect-gateway def1 bypass-dhcp"
#push "dhcp-option DNS 223.4.4.4"
#push "dhcp-option DNS 223.5.5.5"
#每10秒ping一次,连接超时时间设为120秒。
keepalive 10 120
#开启TLS-auth,使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1。
tls-auth /usr/local/openvpn/etc/pki/ta.key 0 # 服务端为0,客户端为1
cipher AES-256-CBC
#开启×××连接压缩,如果服务器端开启,客户端也必须开启
comp-lzo
max-clients 100
persist-key
#持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。
persist-tun
status openvpn-status.log
#指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
verb 3
#服务端重启,客户端自动重连
explicit-exit-notify 2
#允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接
#client-to-client
17. 启动服务
/usr/local/openvpn/sbin/openvpn /usr/local/openvpn/etc/server.conf &
18. 客户端配置
将/root/client.tar.gz 复制到客户端电脑上,并下载openVPN软件
client
#必须与服务器端的保持一致
dev tun
#proto 协议类型必须与服务器端的保持一致
proto udp
#指定连接的远程服务器的实际IP地址和端口号
remote 192.168.255.12 1194
#断线自动重新连接,在网络不稳定的情况下(例如:笔记本电>脑无线网络)非常有用。
resolv-retry infinite
#不绑定特定的本地端口号
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
#如果服务器设置了防御DoS等攻击的ta.key,则必须每个客户端开
启;如果未设置,则注释掉这一行,同服务端一致。
tls-auth ta.key 1
cipher AES-256-CBC
#指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
verb 3
#启用压缩,与服务器保持一致
comp-lzo
#auth-user-pass
#auth-retry interact
#reneg-sec 0
*****FAQ******
1、Authenticate/Decrypt packet error: cipher final failed
编辑server.conf 配置文件
注释:cipher AES-256-CBC
2、
Authenticate/Decrypt packet error: packet HMAC authentication failed
TLS Error: incoming packet authentication failed
TLS Error: cannot locate HMAC in incoming packet from [AF_INET]192.168.1.123:1194
注:这三个错误都源于这个tls-auth 认证问题,只需要服务端和客户端关闭此功能即可解决:在此行加上; 分号。如果需要开启可以关闭后再尝试开启