一、 环境准备
1、Centos系统:CentOS7系统安装
2、openvpn官网:openvpn官网
二、 软件安装
本文采用 yum
方式安装
2.1 安装组件
安装基本组件(加密证书使用)
# yum install openssl-devel openssl easy-rsa
安装OpenVPN
# yum install openvpn
三、 软件配置
3.1 配置并生成rsa密钥
将rsa工具包复制到openvpn安装目录下:
# cp -R /usr/share/easy-rsa/2.0 /etc/openvpn/rsa/
# cd /etc/openvpn/rsa
修改vars,根据实际情况修改一下,创建证书的时候是交互式操作,以免以后经常提示输入这些信息。
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BeiJing"
export KEY_CITY="DongCheng"
export KEY_ORG="vpn"
export KEY_EMAIL="vpn@cafintech.com"
export KEY_OU=vpn
export KEY_NAME=vpn.cafintech.com
export PKCS11_MODULE_PATH=cafintech
export PKCS11_PIN=1234
export KEY_CN=vpn.cafintech.com
//使修改的变量生效,然后生成各类文件。
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh
cd /etc/openvpn/easy-rsa/2.0/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
./build-key client 生成客户端key
生成TLS-auth密钥
openvpn --genkey --secret keys/ta.key
3.2 使用脚本生成各类文件
为方便使用,制作成脚本:
#!/bin/bash #脚本执行路径
# 进入密钥文件夹
cd /etc/openvpn/rsa/keys/
# 复制密钥文件夹下所有文件到备份文件夹,
# 因为下一步操作,会清空文件夹内所有文件,
# 而ca.crt,ta.key等文件,在后续生成用户端文件还有用,
# 第一次不用操作,第二次及以后需要打开注释。
\cp -af * /etc/openvpn/rsa/keysbak/
# 返回密钥生成目录
cd /etc/openvpn/rsa/
# 初始化配置文件,准备生成
. ./vars
# 清空 keys 文件夹下所有文件
./clean-all
# 生成 ca.crt文件,仅第一次使用
./build-ca
# 生成 dh2048.pem 文件,仅第一次使用
./build-dh
# 生成服务器端密钥,仅第一次使用
./build-key-server server
# 生成 tls-auth 密钥,仅第一次使用
openvpn --genkey --secret keys/ta.key
# 进入 keys 密钥目录,仅第一次使用
cd /etc/openvpn/rsa/keys
# 复制dh2048.pem ca.crt server.crt server.key ta.key
# 文件到openvpn安装根目录下 /etc/openvpn,仅第一次使用
\cp -af dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn/
# 返回密钥生成目录,仅第一次使用。
cd /etc/openvpn/rsa/
# 进入密钥备份目录,第一次不使用
cd /etc/openvpn/rsa/keysbak/
# 复制所有文件到密钥目录,主要是ca.crt文件,第一次不使用
\cp -af * /etc/openvpn/rsa/keys/
# 返回密码生成目录
cd /etc/openvpn/rsa/
#使用for 命令,循环读取users文件中的用户,然后生成用户端文件
#users 文件中,每行一个用户即可
for line in $(cat users)
do
# 生成用户密码
./build-key "${line}"
# 复制配置文件模板文件到密钥文件夹
cp /etc/openvpn/rsa/template.ovpn /etc/openvpn/rsa/keys/"${line}".ovpn
# 在配置文件中写入换行
\echo -e "\n" >> /etc/openvpn/rsa/keys/"${line}".ovpn
# 在配置文件中写入说明及换行,下同
\echo -e "#CA证书\n<ca>\n" >> /etc/openvpn/rsa/keys/"${line}".ovpn
# 将ca.crt 文件内容写入到配置文件,下同。
cat /etc/openvpn/rsa/keys/ca.crt >> /etc/openvpn/rsa/keys/"${line}".ovpn
# 写入换行,说明结尾新说明文件,下同。
\echo -e "</ca>\n\n#用户端证书\n<cert>\n" >> /etc/openvpn/rsa/keys/"${line}".ovpn
# 用户证书
cat /etc/openvpn/rsa/keys/"${line}".crt >> /etc/openvpn/rsa/keys/"${line}".ovpn
# 用户密钥
\echo -e "\n</cert>\n\n#用户密钥\n<key>\n" >> /etc/openvpn/rsa/keys/${line}.ovpn
cat /etc/openvpn/rsa/keys/"${line}".key >> /etc/openvpn/rsa/keys/"${line}".ovpn
\echo -e "\n</key>\n\n#Tls-auth\n<tls-auth>\n" >> /etc/openvpn/rsa/keys/"${line}".ovpn
# tls-auth 文件
cat /etc/openvpn/rsa/keys/ta.key >> /etc/openvpn/rsa/keys/"${line}".ovpn
\echo -e "\n</tls-auth>" >> /etc/openvpn/rsa/keys/"${line}".ovpn
# 进入密钥文件夹
cd /etc/openvpn/rsa/keys
# 将生成的配置文件打包压缩。
zip "${line}".zip "${line}".ovpn
# 删除刚刚生成的配置文件
rm -f ${line}.ovpn "${line}".crt "${line}".key "${line}".csr
# 返回密钥生成目录,继续生成下一个用户的文件
cd /etc/openvpn/rsa/
#结束循环读取
done
# 将本次生成的用户备份到备份文件中
cat users >> users-bak
# 进入密钥文件夹
\cd /etc/openvpn/rsa/keys
# 下载所有打包文件到本地备用。
sz *.zip
#如果需要注销证书,则执行以下命令
#\cp -af /etc/openvpn/rsa/keys/crl.pem /etc/openvpn/
cd /etc/openvpn/rsa/
3.3 服务器配置
启动防火墙
systemctl status firewalld.service #查看状态
service firewalld start #stop 停止 restart 重启
firewall-cmd --list-services #查看允许通过列表
firewall-cmd --permanent --add-service=openvpn #添加允许openvpn通过。
最后添加masquerade,开户防火墙IP伪装,和NAT转换性质差不多:
firewall-cmd --permanent --add-masquerade
firewall-cmd --query-masquerade 查看是否成功。
在sysctl中开启IP转发
vi /etc/sysctl.conf 打开并添加以下语句,开户IP转发,保存
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
#查看IP转发是否生效
sysctl -p
启动openvpn,并开户自启动
systemctl start openvpn@server
systemctl enable openvpn@server
3.4 服务器端配置
服务器端配置(server.conf):
;local a.b.c.d #监听IP
Port 1194 # 监听端口
Proto udp #使用协议
Dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret #各类证书
dh dh2048.pem
server 172.17.10.0 255.255.255.0 #给远程客户端分配的网段
ifconfig-pool-persist ipp.txt
push "route 172.17.1.0 255.255.255.0"
push "route 172.17.2.0 255.255.255.0"
push "route 172.17.3.0 255.255.255.0"
push "route 172.17.5.0 255.255.255.0"
push "route 172.17.6.0 255.255.255.0"
push "route 172.17.7.0 255.255.255.0"
push "route 172.17.10.0 255.255.255.0" #可访问的内网网段
push "redirect-gateway def1 bypass-dhcp" #默认网关,DHCP
push "dhcp-option DNS 172.17.2.11"
push "dhcp-option DNS 219.141.140.10"
push "dhcp-option DNS 8.8.8.8" #远端客户机 DNS
keepalive 10 120 #检测连接状态
tls-auth ta.key 0 # This file is secret 加密文件,服务器端为0 客户端为1 (本次一直不通,就出错在此处)
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
log-append openvpn.log #监听日志及日志文件
verb 3
3.5 客户端配置
客户端配置(脚本生成时,已经配置完毕,这里做一下说明):
client # 客户端
dev tun # 使用tun方式
proto udp # 使用udp协议
remote *.*.*.* 1194 # 远程服务器的IP及端口
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt # ca证书文件
cert client.crt # 客户端证书文件
key client.key #客户端密钥
tls-auth ta.key 1 #tls-auth文件,服务器端为0,客户端为1
comp-lzo
verb 3
四、 文章引用
后续:使用证书密钥+用户名密码登录。
待续。。。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin