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

43d33d0d49660f5cc494eeeddfb6b252.gif

正文共:1666 字 4 图,预估阅读时间:2 分钟

关于在Ubuntu系统如何创建一份可以自动配置Easy-RSA证书的脚本,我们之前已经做了详细介绍在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本。其实,证书创建完成之后,openVPN的配置就完成了一大半了。

d9f95cd15fff76feddbb9c128923c31e.png

而且,我们前面也介绍了在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

最终脚本

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
搭建OpenVPN服务器需要进行以下步骤: 1. 安装OpenVPN软件:在终端中运行以下命令进行安装 ``` sudo apt-get update sudo apt-get install openvpn ``` 2. 创建证书和密钥文件:在终端中运行以下命令进行创建 ``` cd /usr/share/doc/openvpn/examples/easy-rsa/3.0.10/ sudo ./easyrsa init-pki sudo ./easyrsa build-ca sudo ./easyrsa gen-req server nopass sudo ./easyrsa sign-req server server sudo ./easyrsa gen-dh sudo openvpn --genkey --secret /etc/openvpn/ta.key ``` 3. 创建配置文件:在终端中运行以下命令进行创建 ``` sudo nano /etc/openvpn/server.conf ``` 在文件中添加以下内容: ``` port 1194 proto udp dev tun ca /usr/share/easy-rsa/3/pki/ca.crt cert /usr/share/easy-rsa/3/pki/issued/server.crt key /usr/share/easy-rsa/3/pki/private/server.key dh /usr/share/easy-rsa/3/pki/dh.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 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 tls-auth /etc/openvpn/ta.key 0 cipher AES-256-CBC auth SHA256 user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 ``` 4. 启动OpenVPN服务:在终端中运行以下命令进行启动 ``` sudo systemctl start openvpn@server ``` 5. 配置防火墙:在终端中运行以下命令进行配置 ``` sudo ufw allow OpenSSH sudo ufw allow 1194/udp sudo ufw enable ``` 这样就完成了OpenVPN服务器的搭建。接下来你可以在客户端上安装OpenVPN客户端,将证书和密钥文件传输到客户端,并且连接到服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Danileaf_Guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值