1. Openvpn 概述

(1)openvpn 介绍

官网:https://openvpn.net/

主要有以下三种 OpenVPN 软件包:

  • OpenVPN 的开源社区版本
  • OpenVPN Access Server,OpenVPN Inc. 的闭源商业产品。
  • OpenVPN Connect:适用于 Android 和 iOS 的 OpenVPN 移动平台版本(部分代码是闭源的,根据 Apple 的要求)

OpenVPN Connect 下载:https://openvpn.net/client/

(2)Openvpn 常见使用场景

// 有公网IP

// 无公网IP

2. 实际演示

根据 无公网IP 的方式演示

(1)腾讯云创建云服务器

记录下公网IP,用户名和密码

(2)云服务器安装 Openvpn 服务端

// 安装所需软件

$ sudo su - root
$ apt-get update
$ apt-get install openvpn easy-rsa -y
  • openvpn:Openvpn 程序
  • easy-rsa:生成证书的工具

// 生成证书

$ dpkg -L easy-rsa
$ cp -r /usr/share/easy-rsa /etc/openvpn/
$ cd /etc/openvpn/easy-rsa
$ cp vars.example vars
$ cat >> vars <<EOF
set_var EASYRSA "/etc/openvpn/easy-rsa"
set_var EASYRSA_REQ_COUNTRY     "CHINA"
set_var EASYRSA_REQ_PROVINCE    "HeNan"
set_var EASYRSA_REQ_CITY        "ZhuMaDian"
set_var EASYRSA_REQ_ORG         "ShangWei"
set_var EASYRSA_REQ_EMAIL       "ca@aishangwei.net"
set_var EASYRSA_REQ_OU          "IT-Support"
EOF

$ ./easyrsa init-pki   // 初始化 pki相关目录
$ ./easyrsa build-ca nopass    //不需要密码,生成 CA 根证书
$ ./easyrsa build-server-full server nopass  // server 为证书名称,可随意写

//生成 Diffie-Hellman 算法需要的密钥文件

$ ./easyrsa gen-dh          //耐心等待一会

//生成 tls-auth Key,主要用来防止 Dos 和 TLS 攻击(可选)

$ cd /etc/openvpn/server
$ openvpn --genkey secret ta.key

// 整理文件(为了维护方便)

$ cp /etc/openvpn/easy-rsa/pki/{dh.pem,ca.crt} .
$ cp /etc/openvpn/easy-rsa/pki/issued/server.crt .
$ cp /etc/openvpn/easy-rsa/pki/private/server.key .
$ ls
ca.crt  dh.pem  server.crt  server.key  ta.key

// 创建 openvpn 服务端配置文件

$ cat > /etc/openvpn/server.conf <<EOF
port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
tls-auth /etc/openvpn/server/ta.key 0
server 10.8.0.0 255.255.255.0
push "route 172.18.0.0 255.255.255.0"
keepalive 10 120
persist-key
persist-tun
user  nobody
group nogroup
log-append /var/log/openvpn.log
verb 3
daemon
EOF

// 启动服务

$ openvpn --config /etc/openvpn/server.conf

// 开启路由转发

$ cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
EOF

$ sysctl -p

(3)客户端配置

$ cat > /etc/openvpn/client/agent_template.ovpn <<EOF
client
proto udp
dev tun
remote <公网IP> 1194
ca ca.crt
cert user.crt
key user.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
verb 3
EOF
$ vim /etc/openvpn/client/create_user.sh
#!/usr/bin/env bash

# 如果脚本执行报错,则停止
set -e

# 配置目录
USER_KEYS_DIR=/etc/openvpn/client/keys
#EASY_RSA_VER=3
EASY_RSA_DIR=/etc/openvpn/easy-rsa
PKI_DIR=${EASY_RSA_DIR}/pki

# 安装 zip
dpkg --get-selections |grep "^zip" || apt-get install zip -y

# 循环创建多个用户
for user in "$@"
do
  # 如果用户已存在,跳出本次循环
  if -d ${USER_KEYS_DIR}/${user} ; then
    echo "[Warning] $user already exists!"
    break
  fi
  # 创建用户
  cd ${EASY_RSA_DIR}
  ./easyrsa build-client-full ${user} nopass
  mkdir -p ${USER_KEYS_DIR}/${user}
  cp ${PKI_DIR}/ca.crt ${USER_KEYS_DIR}/${user}
  cp ${PKI_DIR}/issued/${user}.crt ${USER_KEYS_DIR}/${user}
  cp ${PKI_DIR}/private/${user}.key ${USER_KEYS_DIR}/${user}
  cp /etc/openvpn/client/agent_template.ovpn ${USER_KEYS_DIR}/${user}/${user}.ovpn
  sed -i "s/user/${user}/g" ${USER_KEYS_DIR}/${user}/${user}.ovpn
  cp /etc/openvpn/server/ta.key ${USER_KEYS_DIR}/${user}/ta.key
  # 打包用户文件
  cd ${USER_KEYS_DIR}
  zip -r ${user}.zip ${user}
done
exit 0

// 执行脚本创建用户

$ chmod +x /etc/openvpn/client/create_user.sh
$ /etc/openvpn/client/create_user.sh testuser
$ ls /etc/openvpn/client/keys/testuser
ca.crt  ta.key  testuser.crt  testuser.key  testuser.ovpn

(3)测试

把 /etc/openvpn/client/keys/testuser.zip 拷贝到 windows 主机的一个目录,然后进行导入配置

  • ping 测试
  • 使用 windows 远程桌面或 vnc 连接
作者:jackzang  创建时间:2024-05-28 14:07
最后编辑:jackzang  更新时间:2024-05-31 11:14