Linux CentOS 7 OpenVPN Server 安装配置

OpenVPN是一个开源应用程序,可以通过公共Internet创建一个专用网络。在我们开始之前,我们首先需要安装Enterprise Linux(EPEL)存储库的额外包。下面就是关于如何在CentOS 7上设置Client和OpenVPN服务器的教程。

1.安装EPEL套件库,顺道更新
yum -y install epel-release && yum -y update
2.安装 OpenVPN

首先我们需要安装OpenVPN。我们还将安装Easy RSA来生成我们的SSL密钥对,这将保护我们的VPN连接。

yum install -y openvpn easy-rsa
3.生成密钥及证书的前置条件
3.1.创建密钥与证书储存目录,并且准备好要产生密钥与证书的相关文件:
mkdir -p /etc/openvpn/easy-rsa/keys
cp -rf /usr/share/easy-rsa/3.0.3/* /etc/openvpn/easy-rsa
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
3.2.修改凭证的默认资料,之后产生凭证时就会自动填写,不必再手动输入。
vim /etc/openvpn/easy-rsa/vars

可以在https://github.com/OpenVPN/easy-rsa 上面找到模板vars

    wget -c https://github.com/OpenVPN/easy-rsa/archive/master.zip

这里提供一个模板

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Jiangsu"
set_var EASYRSA_REQ_CITY        "Nanjing"
set_var EASYRSA_REQ_ORG         "XIAOCAICAI"
set_var EASYRSA_REQ_EMAIL       "admin@xiaocaicai.com.com"
set_var EASYRSA_REQ_OU          "XIAOCAICAI EASY CA"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       7500
set_var EASYRSA_CERT_EXPIRE     3650
set_var EASYRSA_NS_SUPPORT      "no"
set_var EASYRSA_NS_COMMENT      "XIAOCAICAI CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST          "sha256"
3.3.初始化PKI

首先需要把pki的目录创建好,以前的版本是会要求执行一个clean-all脚本。

$ ./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /Users/sskaje/Work/CA/Easy/pki
3.4.创建CA

由于设置了 EASYRSA_DN 为 cn_only,所以创建CA时比较简单。
如果设置成 org 则会要求输入很多项目,或者从 vars 文件里加载。

$ ./easyrsa build-ca

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
...................................................................................................................................+++
........+++
writing new private key to '/Users/sskaje/Work/CA/Easy/pki/private/ca.key.NoYqS71N95'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:SSKAJE CERTIFICATE AUTHORITY 

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
3.5.创建DH参数

Diffie hellman参数使用的是 openssl dhparam 创建的,openvpn文档里提到的size只有1024和2048,所以vars文件里的 EASYRSA_KEY_SIZE 我没设成4096。
easyrsa 3 的命令是
$ ./easyrsa gen-dh

Note: using Easy-RSA configuration from: ./vars
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...
DH parameters of size 2048 created at /Users/sskaje/Work/CA/Easy/pki/dh.pem
3.6.生成证书

生成证书的操作步骤就两步,生成请求文件,根据请求文件签发证书。
easy-rsa 3.0签发证书时要求制定type,可选的值参考x509-types目录下的文件名,包括

server:TLS服务端,适用于https服务端和vpn服务端
client:TLS客户端,适用于web浏览器和vpn客户端
ca:签发子CA证书
gen-req, build-client-full, build-server-full 可以使用 nopass 参数生成不加密的私钥。
可以使用 build-client-full 和 build-server-full 直接完成 gen-req 和 sign-req 的过程。

$ ./easyrsa build-server-full xiaocaicai-server nopass
$ ./easyrsa build-client-full xiaocaicai-client nopass
3.7.撤销证书

使用 revoke 撤销证书,命令格式如下:
./easyrsa revoke NAME

3.8.生成CRL文件

CRL是证书撤销列表,有些软件会需要,包括OpenVPN。

$ ./easyrsa gen-crl
3.9.查看证书/查看请求文件

使用 show-cert 和 show-req 查看请求文件,参数是请求时的名字。

3.10.更新数据库
$ ./easyrsa update-db
3.11.将Server的密钥及凭证放到主目录里:
cp ./pki/dh.pem ./pki/ca.crt ./pki/issued/xiaocaicai-server.crt ./pki/private/xiaocaicai-server.key /etc/openvpn
4.配置 OpenVPN server.conf

OpenVPN安装目录默认存在 server.conf 配置文件,我们拷贝一份并修改使用:
# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn

我们进入 /etc/openvpn/ 目录编辑 server.conf 文件。

配置完成后的内容如下:

# egrep -v "^$|^#|^;" server.conf

local 10.10.204.62
port 1194
proto udp
dev tun
ca ca.crt
cert renwoleserver.crt
key renwoleserver.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 223.5.5.5"
client-to-client
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
explicit-exit-notify 1
5.启动IP转发功能
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# sysctl -p
6.配置firewall转发规则

确保服务器可以转发数据包到服务器内外网,开启必要的通讯服务,并启用IP伪装(Masquerade)功能。

# firewall-cmd --permanent --add-service openvpn
# firewall-cmd --permanent --add-masquerade
# DEV=$(ip route get 223.5.5.5 | awk 'NR==1 {print $(NF-2)}' )
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEV -j MASQUERADE
# firewall-cmd --reload
# firewall-cmd --list-all
7.启动 OpenVPN

重启网络与OpenVPN服务,并且让OpenVPN开机后自动启动:

# systemctl restart network
# systemctl restart openvpn@server
# systemctl enable openvpn@server

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.