1. Openvpn 概述
(1)openvpn 介绍
主要有以下三种 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
最后编辑:jackzang 更新时间:2024-05-31 11:14