通过openVPN,实现安全内网穿透

打印 上一主题 下一主题

主题 866|帖子 866|积分 2598

openVPN 为开源服务,捏造专用通道,是提供给企业之间大概个人与公司之间安全数据传输的隧道,跨平台,支持linux\window\macos\Android和iOS,值得学习使用。
1、安装openVPN
ubuntu环境下
  1. apt install openvpn
复制代码
安装完成后天生了目次

二、安装Easy RSA套件

用于天生openVPN所需的密钥,服务端和客户端所需的证书和密钥
1、下载Easy RSA源码包:

Easy RSA下载官网:https://github.com/OpenVPN/easy-rsa/releases
  1. [root@localhost ~]wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.2/EasyRSA-3.1.2.tgz
复制代码
下载完后解压,在/etc/openvpn目次下创建目次easy-rsa,将刚才解压缩的所有文件复制到这个目次下
  1. [root@localhost ~]#tar -zxvf EasyRSA-3.1.2.tgz
  2. [root@localhost ~]#mkdir /etc/openvpn/easy-rsa
  3. [root@localhost ~]#cp -r EasyRSA-3.1.2/* /etc/openvpn/easy-rsa
复制代码
2、Easy RSA在服务端天生私钥和证书

- 进入Easy RSA的安装目次,并配置参数;
  1. [root@localhost ~]# cd /etc/openvpn/easy-rsa/
  2. [root@localhost easy-rsa]# cp vars.example vars
  3. [root@localhost easy-rsa]# vim vars
复制代码

- 整理原有证书和私钥并初始化;
  1. [root@localhost easy-rsa]# ./easyrsa clean-all
复制代码
 - 天生CA根证书;
  1. [root@localhost easy-rsa]# ./easyrsa build-ca
复制代码
 CA根证书天生位置:/etc/openvpn/easy-rsa/pki/ca.crt
3、 为OpenVPN服务端天生server证书和私钥;
备注:这里使用nopass参数设置不必要密码,那么在启动OpenVPN服务的时间就不提示输入密码
  1. [root@localhost easy-rsa]# ./easyrsa build-server-full server nopass
复制代码
 

服务端证书路径:/etc/openvpn/easy-rsa/pki/issued/server.crt
服务端私钥路径:/etc/openvpn/easy-rsa/pki/private/server.key
- 天生Diffie-Hellman算法必要的密钥文件;
  1. [root@localhost easy-rsa]# ./easyrsa gen-dh
复制代码
等待一段时间即可天生乐成

天生tls-auth Key用于防止DDOS和TLS攻击;
  1. [root@localhost easy-rsa]# openvpn --genkey --secret ta.key
复制代码

ta.key路径:/etc/openvpn/easy-rsa/ta.key
三、OpenVPN服务端配置
创建/修改OpenVPN服务端配置文件 vim /etc/openvpn/server/server.conf
  1. port 1194                               #端口
  2. dev tun                                 #采用路由隧道模式tun
  3. ca ca.crt                               #ca证书文件位置
  4. cert server.crt                         #服务端公钥名称
  5. key server.key                          #服务端私钥名称
  6. dh dh.pem                               #交换证书
  7. auth SHA1
  8. proto tcp
  9. server 10.8.0.0 255.255.255.0           #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
  10. push "route 10.0.8.2 255.255.252.0"   #允许客户端访问内网10.0.8.2网段,我这里填了服务器内网IP和子网掩码
  11. client-to-client
  12. verb 3                                  #openvpn版本
  13. persist-key     #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。
  14. persist-tun     #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
  15. keepalive 10 120                        #存活时间,10秒ping一次,120 如未收到响应则视为断线
  16. max-clients 200                         #最多允许200个客户端连接
  17. ifconfig-pool-persist ipp.txt           #地址池记录文件位置 维持客户端和virtual ip的对应表,以便客户端重连接连接也是相同IP
  18. duplicate-cn    #和keys连接VPN,一定要打开这个选项,否则只允许一 个人连接VPN
  19. script-security 3                                   #支持密码认证-允许使用自定义脚本
  20. auth-user-pass-verify /etc/openvpn/check.sh via-env #支持密码认证-指定认证脚本
  21. username-as-common-name                             #支持密码认证-用户密码登陆方式验证
复制代码
编写用户认证脚本文件
  1. [root@Web01 ~]# vim /etc/openvpn/check.sh
  2. 写入下面内容
  3. #!/bin/bash
  4. PASSFILE="/etc/openvpn/openvpnfile"   #密码文件 用户名 密码明文
  5. LOG_FILE="/var/log/openvpn-password.log"  #用户登录情况的日志
  6. TIME_STAMP=`date "+%Y-%m-%d %T"`
  7. if [ ! -r "${PASSFILE}" ]; then
  8.     echo "${TIME_STAMP}: Could not open password file "${PASSFILE}" for reading." >> ${LOG_FILE}
  9.     exit 1
  10. fi
  11. CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}'    ${PASSFILE}`
  12. if [ "${CORRECT_PASSWORD}" = "" ]; then
  13.     echo "${TIME_STAMP}: User does not exist: username="${username}",password="${password}"." >> ${LOG_FILE}
  14.     exit 1
  15. fi
  16. if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  17.     echo "${TIME_STAMP}: Successful authentication: username="${username}"." >> ${LOG_FILE}
  18.     exit 0
  19. fi
  20. echo "${TIME_STAMP}: Incorrect password: username="${username}", password="${password}"." >> ${LOG_FILE}
  21. exit 1   
复制代码
给脚本实行权限
  1. [root@Web01 ~]# chmod +x /etc/openvpn/check.sh
复制代码
创建用户密码,空格为分割符
[root@Web01 ~]# vim /etc/openvpn/openvpnfile
koten 1


- 拷贝私钥、公钥和证书等文件到server.conf同级目次/etc/openvpn/server/下;
  1. 备注:需要拷贝的文件包括ca.crt、ca.key、server.crt、server.key、dh.pem、ta.key
  2. [root@localhost server]# cp /etc/openvpn/easy-rsa/pki/ca.crt
  3. [root@localhost server]# cp /etc/openvpn/easy-rsa/pki/private/ca.key
  4. [root@localhost server]# cp /etc/openvpn/easy-rsa/pki/issued/server.crt
  5. [root@localhost server]# cp /etc/openvpn/easy-rsa/pki/private/server.key
  6. [root@localhost server]# cp /etc/openvpn/easy-rsa/pki/dh.pem
  7. [root@localhost server]# cp /etc/openvpn/easy-rsa/ta.key
复制代码

修改服务端配置文件为支持密码认证

启动服务端服务

/etc/openvpn/server/目次下实行
  1. [root@uos server]# openvpn --config server.conf
复制代码

四、OpenVPN客户端配置

在服务端天生客户端的证书和私钥,每多一个客户端就要多天生一份,为好区分,定名client_xxx为不一样
/etc/openvpn/easy-rsa/ 目次下执 行
  1. [root@localhost easy-rsa]# ./easyrsa build-client-full client nopass
复制代码

客户端证书路径:/etc/openvpn/easy-rsa/pki/issued/client.crt
客户端私钥路径:/etc/openvpn/easy-rsa/pki/private/client.key
将天生的客户端证书(client.crt)、私钥(client.key),服务端根证书(ca.crt)、ta.key打包下载回来
上传到客户端的 /etc/openvpn/client
前提是客户端必要先安装vpn:apt install openvpn
linux
进入客户端 /etc/openvpn/client
创建OpenVPN客户端配置文件 
  1. vim /etc/openvpn/client/client.conf
复制代码
写入内容 
  1. client
  2. dev tun
  3. proto tcp
  4. remote 41.19.18.17 1194
  5. ca ca.crt               #指定CA证书的文件路径
  6. cert client.crt         #指定当前客户端的证书文件路径
  7. key client.key          #指定当前客户端的私钥文件路径
  8. nobind                  #不绑定本地特定的端口号
  9. auth SHA1
  10. resolv-retry infinite   #断线自动重新连接,在网络不稳定的情况下非常有用
  11. verb 3                  #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
  12. persist-key     #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
  13. persist-tun     #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
  14. auth-user-pass pass.txt  #用户密码验证
复制代码
 /etc/openvpn/client下创建用户密码文件pass.txt
写入用户,换行写密码

目次文件如下

启动客户端服务

/etc/openvpn/client/目次下实行
  1. root@localhost: openvpn --config client.conf
复制代码

乐成!!

五、window下客户端配置
安装好客户端 OpenVPN

进入安装目次C:\Program Files\OpenVPN\config\
建了一个目次 config.4

将上面说到的Easy RSA天生服务器根证ca.crt,和客户端私钥clientpc.key和证书clientpc.crt,和ta.key复制到config.4目次下面

新建pc.ovpn文件,填入内容
  1. client
  2. dev tun
  3. proto tcp
  4. remote 41.19.18.17 1194
  5. ca ca.crt               #指定CA证书的文件路径
  6. cert clientpc.crt         #指定当前客户端的证书文件路径
  7. key clientpc.key          #指定当前客户端的私钥文件路径
  8. nobind                  #不绑定本地特定的端口号
  9. auth SHA1 
  10. resolv-retry infinite   #断线自动重新连接,在网络不稳定的情况下非常有用
  11. verb 3                  #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
  12. persist-key     #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
  13. persist-tun     #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
  14. auth-user-pass pass.txt  #用户密码验证
复制代码
新建pass.txt 文件
填入内容

到这里配置完成
测试连接乐成


检察本机IP

正学的话和上面的linux客户端可以ping通
   六、开始启动设置


服务端开机启动
修改openvpn-server服务文件
  1. vim /usr/lib/systemd/system/openvpn-server@.service
复制代码
修改内容:
ExecStart=/usr/sbin/openvpn --config server.conf
ExecStop=killall openvpn
 
修改ExecStart 和 ExecStop 启动和关闭命令即可,存盘退出后,再实行:
rm -rf /etc/systemd/system/openvpn-server@server.service.d
因为这个地方会 Override 加载一些没有效的内容而导致加载失败,而这些功能(add-bridge等)都不是我们这个极简教程所必要的,因此将之删除,有兴趣的同学可以在备份好源文件的前提下继续深入研究。现在,重新加载OpenVPN服务:
systemctl daemon-reload
systemctl start openvpn-server@server.service
检察状态
systemctl status openvpn-server@server.service
一切无误后,输入:
systemctl enable openvpn-server@server.service
 
客户端服务开机启动

vim /usr/lib/systemd/system/openvpn-client@.service
修改内容:
ExecStart=/usr/sbin/openvpn --config client.conf
ExecStop=killall openvpn

重新加载OpenVPN服务:
systemctl daemon-reload
systemctl start openvpn-client@client.service
一切无误后,输入:
systemctl enable openvpn-client@client.service



为客户端设置静态IP

默认客户端IP,每次重启可能都不类似,为了维护方便,设置静态IP
1.打开server端配置文件 /etc/openvpn/server/server.conf
添加一行
   client-config-dir /etc/openvpn/server/clientip
  2、在/etc/openvpn/server/添加一个文件夹clientip
3、在/etc/openvpn/server/clientip 下添加一个文件,文件名为客户端登录的用户名
如:客户端登录的用户名为  abc/密码为888
那这里添加的文件名就是 abc


4.为用户设置固定IP
在上一步建的文件,中输入内容,并保存
   ifconfig-push 10.8.0.11 255.255.255.252
                            IP               子网掩码
  或
  ifconfig-push 10.8.0.11 10.8.0.1
                         IP               网关
  我试过两种都可以

5.重启server端
6.客户端重连后就可以看到服务端分配的IP就是10.8.0.11了
注意,openvpn默认的子网掩码是255.255.255.252 所以要注意你必要分配的IP的可用性

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表