CentOS7搭建OpenVPN
参考文档
https://cloud.tencent.com/developer/article/2315269
https://blog.csdn.net/m0_49027804/article/details/130991215
1、证书
1.1、安装easy-rsa
# 安装easy-rsa yum -y install easy-rsa # 创建并进入证书目录 mkdir /opt/easy-rsa && cd /opt/easy-rsa # 拷贝easy-rsa目录下所有文件 cp -a /usr/share/easy-rsa/3.0.8/* . # 配置文件vars tee ./vars <<-'EOF' if [ -z "$EASYRSA_CALLER" ]; then echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2 echo "This is no longer necessary and is disallowed. See the section called" >&2 echo "'How to use this file' near the top comments for more details." >&2 return 1 fi set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "Shanghai" set_var EASYRSA_REQ_CITY "Shanghai" set_var EASYRSA_REQ_ORG "xumeng03" set_var EASYRSA_REQ_EMAIL "xumeng03@qq.comm" set_var EASYRSA_NS_SUPPORT "yes" EOF
1.2、生成证书
# 初始化,创建PKI目录存储证书 ./easyrsa init-pki # 创建根证书,需设置密码,用于对服务端和客户端证书签名 ./easyrsa build-ca # 生成服务端证书和私钥 ./easyrsa gen-req server nopass # 给服务端端证书签名(需确认并输入根证书密码) ./easyrsa sign server server # 生成客户端证书和私钥 ./easyrsa gen-req client nopass # 给客户端端证书签名(需确认并输入根证书密码) ./easyrsa sign client client # 生成Diffie-Hellman文件,用于安全交换密钥 ./easyrsa gen-dh
2、服务端
2.1、安装openvpn
yum -y install openvpn
2.2、生成TLS认证密钥
openvpn --genkey --secret /etc/openvpn/ta.key
2.3、配置文件
tee /etc/openvpn/server.conf <<-'EOF' # 端口 port 1194 # 协议 proto udp # 采用路由隧道模式 dev tun # ca证书的位置 ca ca.crt # 服务端公钥的位置 cert server.crt # 服务端私钥的位置 key server.key # 证书校验算法 dh dh.pem # 给客户端分配的地址池 server 10.8.0.0 255.255.255.0 # 允许客户端访问的内网网段(我这里服务器内网ip是10.0.16.17) push "route 10.0.0.0 255.255.255.0" # 地址池记录文件位置,让openvpn客户端固定ip地址使用的 ifconfig-pool-persist ipp.txt # 存活时间,10秒ping一次,120秒如果未收到响应则视为断线 keepalive 10 120 # 最多允许10个客户端连接 max-clients 10 # openvpn-status日志位置 status openvpn-status.log # openvpn日志记录位置 log /var/log/openvpn.log # 日志级别 verb 3 # 允许客户端与客户端之间通信 client-to-client # 通过keepalive检测超时后,重新启动VPN,不重新读取 persist-key # 检测超时后,重新启动VPN persist-tun # 开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1 tls-auth ta.key 0 # 客户端密钥(证书和私钥)是否可以重复 duplicate-cn # 允许使用自定义脚本 script-security 3 # 认证脚本路径 auth-user-pass-verify check.sh via-env # 用户密码登陆方式验证 username-as-common-name EOF
2.4、认证脚本
tee /etc/openvpn/check.sh <<-'EOF' #!/bin/bash # 用户列表 PASSFILE="/etc/openvpn/openvpnfile" # 用户登录情况的日志 LOG_FILE="/var/log/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 EOF # 给脚本添加执行权限 chmod +x /etc/openvpn/check.sh
2.5、用户列表
tee /etc/openvpn/openvpnfile <<-'EOF' username password EOF
2.6、拷贝证书
cp /opt/easy-rsa/pki/ca.crt /etc/openvpn cp /opt/easy-rsa/pki/issued/server.crt /etc/openvpn cp /opt/easy-rsa/pki/private/server.key /etc/openvpn cp /opt/easy-rsa/pki/dh.pem /etc/openvpn
2.7、启动
systemctl start openvpn@server systemctl status openvpn@server systemctl enable openvpn@server
3、客户端
3.1、Windows
1、下载安装
https://openvpn.net/community-downloads/
2、证书
需要下载下列证书
/opt/easy-rsa/pki/ca.crt
/opt/easy-rsa/pki/issued/client.crt
/opt/easy-rsa/pki/private/client.key
/etc/openvpn/ta.key
3、配置文件
新建client.ovpn文件放置在C:\user\xumeng03\OpenVPN\config或者C:\Program Files\OpenVPN\config下(注意与证书文件放置在一起,如不放置在一起需自行修改配置文件中的路径)tls-auth如果没有开启就需要注释,否则连不上。
# 指定为客户端 client # 采用路由隧道模式 dev tun # 协议 proto tcp # openvpn服务器IP、端口号 remote srv.it72.com 1194 # 不绑定本地特定的端口号 nobind # 断线自动重新连接 resolv-retry infinite # 指定CA证书的文件路径(需在/opt/easy-rsa处下载) ca ca.crt # 指定当前客户端的证书文件路径(需在/opt/easy-rsa处下载) cert client.crt # 指定当前客户端的私钥文件路径(需在/opt/easy-rsa处下载) key client.key # 日志级别 verb 3 # 通过keepalive检测超时后,重新启动VPN persist-key # 开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1 #tls-auth ta.key 1 # 要和服务端保持一致 cipher AES-256-CBC # 和服务端保持一致 comp-lzo # 账号密码认证 auth-user-pass
4、使用
点击连接后输入/etc/openvpn/openvpnfile中的用户名密码即可
4、配置内网转发
4.1、开启内核转发
# 开启内核转发/IP包转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf # 重载配置/etc/sysctl.conf配置 sysctl -p
4.2、防火墙配置
# 启动防火墙 systemctl start firewalld # 添加masquerade规则到防火墙配置(常用于NAT网络地址转换) firewall-cmd --add-masquerade --permanent # 允许openvpn服务通过防火墙 firewall-cmd --add-service=openvpn --permanent # 允许TCP协议的数据通过1194端口(我这里使用了mysql:3306、kubernetes:6443) firewall-cmd --add-port=1194/tcp --permanent # 重新加载防火墙配置 firewall-cmd --reload
client.ovpn使用例子
client dev tun proto tcp remote www.it72.com 1194 resolv-retry infinite nobind cert client.crt verb 3 persist-key comp-lzo auth-user-pass <ca> -----BEGIN CERTIFICATE----- 填你的证书内容 -----END CERTIFICATE----- </ca> <key> -----BEGIN PRIVATE KEY----- 填你的密钥内容 -----END PRIVATE KEY----- </key>
收藏的用户(0) X
正在加载信息~
推荐阅读
AES Advanced Encryption Standard By JavaScript
最新回复 (0)
站点信息
- 文章2300
- 用户1336
- 访客10731099
每日一句
Love is the bridge between you and everything.
爱是你与一切之间的桥梁。
爱是你与一切之间的桥梁。
wordpress采集器——Wp-AutoPost精简无限制版
linux文件夹打包命令
ndk神奇问题之non-numeric second argument to `wordlist' function: '8.7z'
XEON E5无法使用系统评分解决方法
win10利用winsat disk测试磁盘读写速度
C++ 11新语法获取系统盘符
Android Studio使用Opencv2.4.9进行NDK开发
10年后,Android应用程序仍然比iOS应用程序差
Notepad++如何代码格式化——NppAStyle
iMessage for Android是我们需要的但不是我们想要的
二进制加壳原理与实现
仙剑奇侠传3d回合-PC端辅助
adb logcat 命令行用法
新会员