当前位置:首页 » 《资源分享》 » 正文

【亲测能用!OpenVPN实验教程】Win11主机连CentOS7服务器(用户名密码模式)

1 人参与  2024年09月29日 19:20  分类 : 《资源分享》  评论

点击全文阅读


经过无数个日日夜夜,无数次调试、崩溃、再调试,甚至急得胃病复发。看到成功连接的那一瞬间,竟然无比平静。写这篇文章是希望其他使用OpenVPN的同志能够少走弯路,提供一些我的经验。

需要注明的是:即使你按照我的步骤一模一样的配置,也不一定能成功,因为我们的主机和服务器总会有那么一丢丢不同之处。但是请相信,你一定能成功!慢慢排查和调试,加油!

感谢文章http://t.csdnimg.cn/c23vp和http://t.csdnimg.cn/77kYS的帮助!

一、环境搭建

1.添加epel yum源、下载easyrsa:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install easy-rsa

2.专门为easyrsa设置一个文件夹/opt/easy-rsa/,把所有相关的需要文件放入:

mkdir -p /opt/easy-rsa
cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/
cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars

3.修改vars文件并保存:

vim /opt/easy-rsa/vars

二、服务器端:创建一系列证书

1.初始化

cd /opt/easy-rsa/
./easyrsa init-pki

2.创建CA根证书

./easyrsa build-ca

他会要求你输入CA Key,你自己定义,但一定要记住它!

Commom Name直接回车即可。

3.创建服务器端证书

1)生成。Common Name依旧直接回车。输密码就输CA Key.

./easyrsa gen-req server nopass

2)签名

./easyrsa sign server server

4.创建DF文件

./easyrsa gen-dh

5.创建客户端证书(与3同理)

1.生成

./easyrsa gen-req client nopass

2.签名

 ./easyrsa sign client client

三、服务器端:部署OpenVPN服务

1.安装Openvpn

yum install -y openvpn

可以记一下自己openvpn的版本,不同版本server.conf可使用的配置不太一样,不过这里就先记一下:

2.整理/opt/easy-rsa/中的证书、密钥文件到/etc/openvpn/..../中:

检查一下:/etc/openvpn/中应该有两个文件夹:server和client

先进入/opt/easy-rsa/:

再进pki/:

把以下两个文件复制到/etc/openvpn:

接着进issued文件夹:

把这两个证书分别移到/etc/openvpn/server和client:

回到上一层目录,进入private文件夹:

只移动这两个文件:

好啦,再进入/etc/openvpn/应该是这样的:(ta.key忽略)

3.创建配置文件server.conf

下面是我的服务器配置文件,仅供参考。很有可能与你的情况不符,但是先照我的来,有问题再根据日志报错排查。

前面有分号的就是被注释掉的。

#监听本机端口(一定要看一下服务器开放了哪些端口,并且没有被别的服务如ssh占用的端口)port 1049#指定采用的传输协议,可选tcp或udpproto tcp#指定创建的通信隧道类型,可选tun或tapdev tun#指定CA证书的文件路径ca /etc/openvpn/ca.crt#指定服务器端的证书文件路径cert /etc/openvpn/server/server.crt#指定服务器端的私钥文件路径key /etc/openvpn/server/server.key#指定迪菲赫尔曼参数的文件路径,也就是交换证书dh /etc/openvpn/dh.pem#给客户端分配地址池,注意:不能和VPN服务器内网网段有相同server 10.8.0.0 255.255.255.0#允许客户端访问内网网段,填写自己内网push "redirect-gateway def1 bypass-dhcp"push "dhcp-option DNS 8.8.8.8";push "route 192.168.7.0 255.255.255.0"#服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址"第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP"ifconfig-pool-persist ipp.txt#存活时间,10秒ping一次,120如未收到响应则视为断线keepalive 10 120#最多允许100个客户端连接max-clients 100#日志记录位置status openvpn-status.log#openvpn版本verb 3#允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接client-to-client#openvpn日志记录位置log /var/log/openvpn.log#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keyspersist-key#检测超时后,重新启动VPN,一直保持tun是linkup的.否则网络会先linkdown然后再linkuppersist-tun#开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1;tls-auth /etc/openvpn/ta.key 0 #开启多人同时登录duplicate-cn#允许使用自定义脚本script-security 3#脚本路径auth-user-pass-verify /etc/openvpn/test.sh via-env#用户密码登陆方式验证:加上client-cert-not-required则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录username-as-common-nameauth-nocache#绑定客户端IP;client-config-dir /etc/openvpn/ccd#加密算法cipher AES-256-CBC;data-ciphers AES-256-CBC#MTU设置tun-mtu 1500mssfix 1450

4.创建脚本文件和密码文件

验证用户名密码的脚本文件: 

vim  /etc/openvpn/test.sh

#!/bin/bashPASSFILE="/etc/openvpn/openvpnpass"LOG_FILE="/var/log/openvpn-password.log" TIME_STAMP=`date "+%Y-%m-%d %T"` ############################################################ 打印所有环境变量到日志文件(可选,用于调试)env >> $LOG_FILEecho "Debug: Username is '${username}' and Password is '${password}'" >> $LOG_FILECORRECT_PASSWORD=$(awk -v user="$username" '$1 == user {print $2; exit}' ${PASSFILE})if [ "${CORRECT_PASSWORD}" = "" ]; then  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}  echo "Debug: CORRECT_PASSWORD is empty" >> ${LOG_FILE}  exit 1fiif [ "${password}" = "${CORRECT_PASSWORD}" ]; then  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}  exit 0else  echo "${TIME_STAMP}: Incorrect password for username=\"${username}\"." >> ${LOG_FILE}  exit 1fi

实际存储用户名密码的文件:

vim /etc/openvpn/openvpnpass

user1 123456user2 hello2024

5.修改脚本和密码文件的权限

/etc/openvpn 目录下的所有文件和子目录的所有者设置为 root,组设置为 openvpn

chown root.openvpn /etc/openvpn/* -R

脚本增加执行权限

chmod 755 /etc/openvpn/test.sh

密码文件修改成只能文件创建者读写,用户组只能读

chmod 640 /etc/openvpn/openvpnpass

6.服务器其他设置

1)打开内核转发

[root@localhost  ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1[root@localhost  ~]# sysctl -p

2)防火墙设置,没有命令的下载一下

systemctl start firewalldfirewall-cmd --add-masquerade --permanentfirewall-cmd --add-service=openvpn --permanentfirewall-cmd --add-port=1094/tcp --permanentfirewall-cmd --reload

设置完看一下结果:

firewall-cmd --list-all

检查是否有OpenVPN以及你配置文件中的端口开放

7.启动OpenVPN服务

[root@localhost openvpn]# systemctl start openvpn@server[root@localhost openvpn]# systemctl status openvpn@server

能看到状态是running就对了。

不是的话,再调整你的server.conf、服务器防火墙设置、SELinux宽容模式等。

检查端口监听:

netstat -nlp

四、客户端:连接OpenVPN服务

1.下载OpenVPN GUI软件,不是openvpn connect 啊!

我是Win11 64bit的主机,所以下载这个:

https://swupdate.openvpn.org/community/releases/OpenVPN-2.6.8-I001-amd64.msi

2.将服务器中的:ca.crt  client.crt  client.key

自己想办法弄到Windows主机中来(我用VSCode从服务器下载)

将这三个文件粘贴到C:\Program Files\OpenVPN\config文件夹中。

3.在config文件夹中创建client.ovpn文件(客户端配置文件)

我的该文件内容如下:

clientdev tunproto tcpremote <服务器公网IP> 1049resolv-retry infinitenobindca ca.crtcert client.crtkey client.keypersist-keypersist-tunverb 3cipher AES-256-CBCdata-ciphers AES-256-CBCdisable-dcosetenv opt block-outside-dnsauth-user-passauth-nocacheremote-cert-tls servertun-mtu 1500mssfix 1450

4.开始连接

1)点电脑菜单栏这个向上的箭头,找到客户端的openvpn小图标:一个电脑加一个锁

2.右键点击小图标,左键点击“连接”

注:点击“编辑配置文件”会跳出client.ovpn,可以修改

注:点击“显示日志”可查看日志,用于Debug

3.输入用户名密码

4.如果双方配置没有问题,则会出现“连接成功”的提示

如果你没有成功,很正常,我调了几百次才成。你可以根据日志提示的错误多上网搜一搜,调整你的配置文件以及检查网络设置。

也可以把你的问题留在评论区,我们一起讨论解决。


点击全文阅读


本文链接:http://zhangshiyu.com/post/166391.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1