在Ubuntu系统手撸一个自动搭建openVPN服务端的SHELL脚本

文化   2024-07-27 20:52   北京  


正文共: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.crtcp /usr/share/easy-rsa/pki/dh.pem /etc/openvpn/server/dh.pemcp /usr/share/easy-rsa/pki/issued/ttserver.crt /etc/openvpn/server/ttserver.crtcp /usr/share/easy-rsa/pki/private/ttserver.key /etc/openvpn/server/ttserver.key

openVPN软件系统已经自带了,无需安装。为了提高可移植性,我们还是执行一下安装openVPN的命令,已经安装的也可以达到升级的效果:

apt install -y openvpn

如果转换成SHELL脚本,则可以是:

# 安装openVPNinstall_openvpn() {  echo "正在安装openVPN..."  apt -y install openvpn  echo "openVPN安装完成。"}

然后,我们的server.conf配置文件就不用调整了,直接写入内容即可。

# 配置/etc/openvpn/server/server.confconfigure_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.serviceconfigure_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

最终脚本

铁军哥
高级网络规划设计师,中国电信高级技术规划工程师,天翼云认证高级解决方案架构师,H3C认证网络工程师。 继续加油,努力传播知识,影响更多人!
 最新文章