脚本下载
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
运行安装脚本,根据情况填写
./openvpn-install.sh
这里就完成了,将xxx.ovpn下载到本地,让后导入即可
其他:如需使用账号登陆继续下面操作
创建脚本:vim /etc/openvpn/checkpsw.sh
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.
PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/etc/openvpn/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
###########################################################
if [ ! -r "${PASSFILE}" ]; then
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
添加权限
chmod 755 /etc/openvpn/checkpsw.sh
添加账号密码
echo 'username1 password1' >> /etc/openvpn/psw-file
修改 server.conf
# 追加以下内容
script-security 3
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
username-as-common-name
verify-client-cert none
重启服务
systemctl restart openvpn-server@server
修改客户端文件 xxx.ovpn
# 追加以下内容,<cert>和<key>部分可以删掉
auth-user-pass
附录
server.conf
- `port 11194`:OpenVPN 监听的端口号为 11194。
- `proto udp`:使用 UDP 协议。
- `dev tun`:使用 tun 模式创建一个路由/点对点的网络接口。
- `user nobody`和`group nogroup`:指定OpenVPN进程以nobody用户和nogroup组运行,提高安全性。
- `persist-key`和`persist-tun`:重启过程中保持密钥和隧道数据不变。
- `keepalive 10 120`:每10秒ping一次,如果120秒内无响应则重启。
- `topology subnet`:客户端网络拓扑使用子网方式。
- `server 10.8.0.0 255.255.255.0`:为连接的客户端分配的IP地址网段。
- `ifconfig-pool-persist ipp.txt`:分配给客户端的IP地址持久化存储在 ipp.txt 文件中。
- `push "dhcp-option DNS 1.1.1.1"`和`push "dhcp-option DNS 114.114.114.114"`:向客户端推送DNS服务器地址。
- `push "redirect-gateway def1 bypass-dhcp"`:重定向客户端的所有流量通过VPN。
- `dh none`:不使用Diffie-Hellman密钥交换。
- `ecdh-curve prime256v1`:指定ECDH的曲线。
- `tls-crypt tls-crypt.key`:对控制通道的TLS密钥交换进行加密。
- `crl-verify crl.pem`:使用crl.pem文件来验证客户端证书撤销列表。
- `ca ca.crt`:指定CA的证书文件。
- `cert server_aE5fY2wY6uNDFRmr.crt`和`key server_aE5fY2wY6uNDFRmr.key`:服务器证书和密钥文件。
- `script-security 3`:允许脚本和插件更高的安全性水平。
- `auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env`:通过指定脚本验证用户的用户名和密码。
- `username-as-common-name`:将用户名用作客户端的常用名。
- `verify-client-cert none`:客户端证书验证模式。
- `auth SHA256`:使用SHA256算法进行HMAC认证。
- `cipher AES-128-GCM`:使用AES-128-GCM算法加密数据通道。
- `ncp-ciphers AES-128-GCM`:禁止客户端协商除了 AES-128-GCM 之外的任何加密算法。
- `tls-server`:配置为TLS服务器模式。
- `tls-version-min 1.2`:指定最少的TLS版本。
- `tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256`:使用此TLS密码进行通信。
- `client-config-dir /etc/openvpn/ccd`:指定客户端配置文件的目录。
- `status /var/log/openvpn/status.log`:OpenVPN状态日志记录路径。
- `verb 3`:日志的详细程度。
客户端.ovpn
- `client`:声明这是一个OpenVPN客户端配置。
- `proto udp`:客户端将通过 UDP 协议通信。
- `explicit-exit-notify`:在断开连接时向服务器发送退出通知。
- `remote 38.6.175.123 11194`:指定VPN服务器的地址和端口。
- `dev tun`:使用 tun 设备,创建一个点对点的虚拟网络接口。
- `resolv-retry infinite`:如果无法解析服务器的主机名,则无限制重试。
- `nobind`:不绑定到本地特定端口。
- `persist-key`和`persist-tun`:在重新连接时不需要重新读取密钥和重新配置tun/tap设备。
- `remote-cert-tls server`:要求对端必须提供有效的TLS服务器证书。
- `verify-x509-name server_aE5fY2wY6uNDFRmr name`:校验与X.509证书相关的名称。
- `auth SHA256`:使用SHA256算法进行身份验证。
- `auth-user-pass`:需要认证时提示用户输入用户名和密码。
- `auth-nocache`:不在内存中缓存用户名和密码。
- `cipher AES-128-GCM`:指定使用AES-128-GCM加密算法。
- `tls-client`:配置客户端使用TLS。
- `tls-version-min 1.2`:使用的最低TLS版本为1.2。
- `tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256`:特定的TLS密码套件。
- `ignore-unknown-option block-outside-dns`:忽略未知的配置选项`block-outside-dns`。
- `setenv opt block-outside-dns`:在Windows 10中设置环境变量以防DNS泄漏。
- `verb 3`:设置日志文件的详细程度。