正文共:1666 字 4 图,预估阅读时间:2 分钟
关于在Ubuntu系统如何创建一份可以自动配置Easy-RSA证书的脚本,我们之前已经做了详细介绍(在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本)。其实,证书创建完成之后,openVPN的配置就完成了一大半了。
而且,我们前面也介绍了在Ubuntu系统如何手工创建openVPN服务端并发起客户端连接(Ubuntu配置openVPN服务端和客户端)。今天,我们就把手工创建openVPN服务端的过程变成自动化脚本。
和CentOS系统一样(手撸一个自动搭建openVPN服务器的SHELL脚本),证书创建完成之后,服务端剩下的配置就是创建一个server.conf配置文件,并且把默认的openvpn.service服务文件替换掉,而openvpn.service中需要引用server.conf,那我们就先生成server.conf配置文件。
而server.conf中则需要引用之前生成的ca.crt、ttserver.crt、ttserver.key和dh.pem这4个文件,所以我们需要对证书的存放路径做一下微调,添加以下4条命令。
cp /usr/share/easy-rsa/pki/ca.crt /etc/openvpn/server/ca.crt
cp /usr/share/easy-rsa/pki/dh.pem /etc/openvpn/server/dh.pem
cp /usr/share/easy-rsa/pki/issued/ttserver.crt /etc/openvpn/server/ttserver.crt
cp /usr/share/easy-rsa/pki/private/ttserver.key /etc/openvpn/server/ttserver.key
openVPN软件系统已经自带了,无需安装。为了提高可移植性,我们还是执行一下安装openVPN的命令,已经安装的也可以达到升级的效果:
apt install -y openvpn
如果转换成SHELL脚本,则可以是:
# 安装openVPN
install_openvpn() {
echo "正在安装openVPN..."
apt -y install openvpn
echo "openVPN安装完成。"
}
然后,我们的server.conf配置文件就不用调整了,直接写入内容即可。
# 配置/etc/openvpn/server/server.conf
configure_server_conf() {
cat << EOF > /etc/openvpn/server/server.conf
local 0.0.0.0
proto tcp
port 44331
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/ttserver.crt
key /etc/openvpn/server/ttserver.key
dh /etc/openvpn/server/dh.pem
topology subnet
server 10.153.117.0 255.255.255.0
push "dhcp-option DNS 8.8.8.8"
push "redirect-gateway def1 bypass-dhcp"
duplicate-cn
keepalive 20 120
persist-key
persist-tun
EOF
# 检查配置文件是否写入成功
echo "server.conf配置如下:"
cat /etc/openvpn/server/server.conf
}
接下来,就是openVPN的服务配置文件openvpn.service,和server.conf一样,直接写入内容即可。
# 配置/usr/lib/systemd/system/openvpn.service
configure_openvpn_service() {
rm -f /usr/lib/systemd/system/openvpn.service
cat << EOF > /usr/lib/systemd/system/openvpn.service
[Unit]
Description=OpenVPN Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server/server.conf
EOF
# 检查配置文件是否写入成功
echo "openvpn.service配置如下:"
cat /usr/lib/systemd/system/openvpn.service
}
然后,我们重新加载openVPN服务。
# 启动openVPN服务
start_openvpn() {
systemctl daemon-reload
systemctl start openvpn
systemctl enable openvpn
systemctl restart openvpn
echo "openVPN服务状态如下:"
systemctl status openvpn
ss -atnp |grep 44331
ss -atnp |grep openvpn
echo "使能本地转发功能!"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
}
到这里,服务端就配置好了,我们希望继续生成一份客户端的配置文件。参考之前的文章(配置优化:将openVPN的配置文件合4为1),我们需要ca.crt、ttclient.crt和ttclient.key这几个文件的内容,还需要服务器的IP地址信息。
先创建tietou.ovpn配置文件,并导入固定部分内容。
# 创建tietou.ovpn配置文件
create_ovpn() {
cat << EOF > /etc/openvpn/client/tietou.ovpn
client
dev tun
proto tcp
nobind
resolv-retry infinite
persist-key
persist-tun
EOF
}
# 获取IP地址
get_ip() {
IP=$(curl -s cip.cc | awk '/IP/{print $3}')
echo "公网IP地址为:$IP"
# 写入到配置文件中
echo "remote $IP 44331" >> /etc/openvpn/client/tietou.ovpn
}
# 提取ca.crt的证书内容
get_cacrt() {
CACRT=$(awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/' /usr/share/easy-rsa/pki/ca.crt)
# 将证书内容写入到配置文件中
echo "<ca>" >> /etc/openvpn/client/tietou.ovpn
echo "$CACRT" >> /etc/openvpn/client/tietou.ovpn
echo "</ca>" >> /etc/openvpn/client/tietou.ovpn
}
# 提取ttclient.crt的证书内容
get_clientcrt() {
CLIENTCRT=$(awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/' /usr/share/easy-rsa/pki/issued/ttclient.crt)
# 将证书内容写入到配置文件中
echo "<cert>" >> /etc/openvpn/client/tietou.ovpn
echo "$CLIENTCRT" >> /etc/openvpn/client/tietou.ovpn
echo "</cert>" >> /etc/openvpn/client/tietou.ovpn
}
# 提取ttclient.key的证书内容
get_clientkey() {
CLIENTKEY=$(awk '/-----BEGIN PRIVATE KEY-----/,/-----END PRIVATE KEY-----/' /usr/share/easy-rsa/pki/private/ttclient.key)
# 将证书内容写入到配置文件中
echo "<key>" >> /etc/openvpn/client/tietou.ovpn
echo "$CLIENTKEY" >> /etc/openvpn/client/tietou.ovpn
echo "</key>" >> /etc/openvpn/client/tietou.ovpn
}
# 展示tietou.ovpn配置内容
echo "tietou.ovpn配置内容如下:"
cat /etc/openvpn/client/tietou.ovpn