安装 openvpn 和 easyrsa
可以直接从 yum 安装,也可以通过源码安装。下面以 yum 安装为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 首先安装 epel 源,如果已经安装可以省略 yum install epel-release
# yum 安装,简单粗暴 yum install openvpn easyrsa
# 安装完成后,默认的服务无法正常加载 # 首先将其重命名 mv /usr/lib/systemd/system/openvpn\@.service /usr/lib/systemd/system/openvpn.service # 编辑服务配置文件 vim /usr/lib/systemd/system/openvpn.service # 将 ExecStart 所在行的内容替换为下列内容 # ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/server --config server.conf # 重新加载服务 systemctl daemon-reload # 设置服务为自动启动 systemctl enable openvpn # 启动服务 systemctl start openvpn
|
生成服务器证书
利用 easyrsa 生成服务器端所需证书,具体操作如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| # 切换到 openvpn 目录下 cd /etc/openvpn # 拷贝 easyrsa 相关目录 cp -r /usr/share/easy-rsa/3.0.8/ ./easy-rsa # 进入 easyrsa 目录开始操作 cd easy-rsa # 编辑参数设置文件 vim vars # 输入以下内容 # 国家简称 set_var EASYRSA_REQ_COUNTRY "CN" # 省份名称 set_var EASYRSA_REQ_PROVINCE "ChongQing" # 城市名称 set_var EASYRSA_REQ_CITY "ChongQing" # 所属组织 set_var EASYRSA_REQ_ORG "OpenVPN CA" # 联系邮箱 set_var EASYRSA_REQ_EMAIL "[email protected]" # 所属单位 set_var EASYRSA_REQ_OU "xxx" # 密钥长度 set_var EASYRSA_KEY_SIZE 2048 # 密钥算法 set_var EASYRSA_ALGO rsa # CA证书过期时间,单位:天 set_var EASYRSA_CA_EXPIRE 36500 # 签发证书过期时间,单位:天 set_var EASYRSA_CERT_EXPIRE 36500
# 初始化 pki 目录 ./easyrsa init-pki # 创建 CA 根证书,过程中需要输入密码, # 以后签发证书时会使用该密码, # common name 可以输入一个方便记忆的名称 ./easyrsa build-ca
# 签发服务器证书 ./easyrsa build-server-full server nopass # 创建 Diffie Hellman 参数 ./easyrsa gen-dh # 拷贝服务器端所需要的文件 cp pki/issued/server.crt ../server/ cp pki/private/server.key ../server/ cp ca.crt ../server/ cp dh.pem ../server/
# 生成 ta.key 文件 cd ../server openvpn --genkey --secret ta.key
|
生成客户端证书
下列操作均需要输入 ca 的密码,请根据提示操作:
1 2 3 4 5
| # 生成 cn 为 somebody 的证书,并且不需要密码 ./easyrsa build-client-full somebody nopass
# 生成 cn 为 somebody2 的证书,并且需要输入密码 ./easyrsa build-client-full somebody2
|
创建服务器端配置
1 2
| cd /etc/openvpn/server vim server.conf
|
配置文件可以参考下列内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| server # 监听地址 local 0.0.0.0
# 监听的端口,默认是1194 port 1194
# 使用的协议,可选值为 udp 和 tcp proto tcp
# 隧道模式,可选值为 tun 和 tap,服务器和客户端设置须为一致 dev tun
# 证书路径 ca ca.crt cert server.crt key server.key dh dh.pem # tls 握手阶段使用的证书,其中第二个参数在服务器端值为 0,客户端值为 1 tls-auth ta.key 0
# IP 池配置,服务器将占用第一个 IP(10.8.0.1),需要注意的是,该网段不能和现有网段重复以免造成冲突 server 10.8.0.0 255.255.255.0
# 记录客户端的 IP 地址 ifconfig-pool-persist ipp.txt
# 允许客户端之前互相可以访问 client-to-client
# 允许同一个用户从多个设备同时登录 duplicate-cn
# 心跳检测,每 10 秒检测一次,120 秒连接超时 keepalive 10 120
# 密码格式 cipher AES-256-CBC
# 压缩算法 compress lz4-v2 push "compress lz4-v2"
# 客户端并发连接数 max-clients 100
# 客户端超时重连时使用之前的证书和隧道连接状态 persist-key persist-tun
# 记录连接信息文件 status openvpn-status.log
# 日志记录方式,以下选项二选一,如果都不选,则将日志写入 rsyslog # 以覆盖方式写入指定文件 ;log openvpn.log # 以追加方式写入指定文件 ;log-append openvpn.log
# 日志记录等级,0:静默,只记录严重错误;4:合理的普通信息;5、6:可以用来调试连接上遇到的问题;9:啰嗦模式 verb 3
# 设置最多输出连续 20 条的相同信息 ;mute 20
# 通知客户端服务器端重启完毕以便重连,仅用于 udp 模式下 explicit-exit-notify 1
|
如果需要指定客户端的 IP,还可以增加以下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 创建并进入客户端配置目录 mkdir -p /etc/openvpn/client cd /etc/openvpn/client
# 指定 cn 名为 somebody 的客户端的 IP echo "ifconfig-push 10.8.0.4 255.255.255.0" > somebody # 指定 cn 名为 somebody2 的客户端的 IP echo "ifconfig-push 10.8.0.8 255.255.255.0" > somebody2
# 修改服务器端配置 vim /etc/openvpn/server/server.conf # 注释以下配置 ;ifconfig-pool-persist ipp.txt # 增加以下配置 client-config-dir /etc/openvpn/client topology subnet # 保存并退出
|
以上配置完成后就可以正常启动服务了,常用命令如下:
1 2 3 4 5 6 7 8 9 10 11
| # 查看服务状态 systemctl status openvpn
# 启动服务 systemctl start openvpn
# 停止服务 systemctl stop openvpn
# 重启服务 systemctl restart openvpn
|
配置客户端
下面以 somebody2 为例,演示如何配置客户端。
客户端需要的文件如下:
- /etc/openvpn/easy-rsa/pki/ca.crt
- /etc/openvpn/easy-rsa/pki/issued/somebody2.crt
- /etc/openvpn/easy-rsa/pki/private/somebody2.key
- client.ovpn(手动编辑)
其中 client.ovpn 文件的内容参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| # 说明该配置是客户端 client
# 使用 tun 隧道,必须与服务器端保持一致 dev tun
# 使用协议,必须与服务器端保持一致 proto tcp
# 服务器 IP 地址和端口 remote 124.70.9.171 1194
# 解析服务器地址次数,设置为无限则表示每次连接时均重新解析 resolv-retry infinite
# 不绑定端口 nobind
# 超时重连时使用之前的证书和隧道连接状态 persist-key persist-tun
# 证书所在路径 ca ca.crt cert dev.crt key dev.key tls-auth ta.key 1
# 远端证书通过服务器验证 remote-cert-tls server
# 密码格式,必须与服务器端保持一致 cipher AES-256-CBC
# 压缩算法,必须与服务器端保持一致 compress lz4-v2
# 日志记录等级,0:静默,只记录严重错误;4:合理的普通信息;5、6:可以用来调试连接上遇到的问题;9:啰嗦模式 verb 3
|
编辑保存后即可使用 openvpn 客户端导入连接了。