OpenVPN实现安全的内网互通

打印 上一主题 下一主题

主题 1792|帖子 1792|积分 5376

弁言

什么是OpenVPN


维基百科是这么介绍的:OpenVPN是一个用于创建假造私人网络加密通道的软件包,最早由James Yonan编写。OpenVPN答应创建的VPN使用公开密钥、电子证书、大概用户名/密码来进行身份验证。 它大量使用了OpenSSL加密库中的SSL/TLS协议函数库。
原作者: James Yonan
开发者: OpenVPN 项目 / OpenVPN Inc
当前版本: : 2.6.9 (2024年2月13日;稳固版本);
源代码库: github.com/OpenVPN
类型: VPN
体系平台: Windows XP或以上; OS X 10.8或以上; Android 4.0或以上; iOS 6或以上; Linux; *BSD;
网站: openvpn.net
安装OpenVPN


  • 安装客户端
  • 安装套件
服务端安装OpenVPN、EasyRSA


  • 使用下令安装OpenVPN
    apt-get install openvpn -y
  • 获取EasyRSA
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.7/EasyRSA-3.1.7.tgz
   若无网络,也可以下载之后,再上传到服务器。要是访问github失败,也可以通过百度云下载
  百度云链接:https://pan.baidu.com/s/1T3SoiDwsP6cE9UaRXnSjww
提取码:r141
–来自百度网盘超级会员V6的分享
  若毗连失效,请在批评复兴
  

天生证书

server----


  • 进入EasyRSA-3.1.7,并修改相关参数
  1. [root@aliyun /etc/openvpn]$ cd EasyRSA-3.1.7
  2. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ cp vars.example vars
  3. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ vim vars
  4. ...省略部分内容...
  5. # In how many days should the root CA key expire?
  6. # 设置根证书有效期为100年
  7. set_var EASYRSA_CA_EXPIRE       36500
  8. # In how many days should certificates expire?
  9. # 设置服务端证书有效期为10年
  10. set_var EASYRSA_CERT_EXPIRE     3650
  11. ...省略部分内容...
复制代码



  • 创建新的pki
    1. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$./easyrsa init-pki
    复制代码

  • 天生CA根证书
    1. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa build-ca nopass
    复制代码

    证书文件:/etc/openvpn/EasyRSA-3.1.7/pki/ca.crt
  • 天生server端证书和私钥
    1. # 生成签名请求和私钥
    2. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-req server nopass
    3. # 签发证书
    4. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa sign server server
    复制代码




  • req: /etc/openvpn/EasyRSA-3.1.7/pki/reqs/server.req
  • key: /etc/openvpn/EasyRSA-3.1.7/pki/private/server.key
  • crt: /etc/openvpn/EasyRSA-3.1.7/pki/issued/server.crt
   在OpenVPN环境中的EasyRSA工具集中,./easyrsa gen-req 和 ./easyrsa build-server-full 这两个下令执行的任务差别,它们分别用于差别的证书管理阶段:
  

  • ./easyrsa gen-req [name]:

    • 这个下令是用来天生一个证书署名请求(CSR)和相应的私钥文件。
    • 当你需要为某个实体(如服务器或客户端)创建一个新的证书时,会运行这个下令,并提供一个唯一的名称(例如,vnserver)。
    • 它不会直接天生证书,而是产生一个 CSR 文件,这个文件可以被 CA(证书颁发机构)用来签发证书,同时也会天生与之对应的私钥文件,私钥由请求者生存并保密。

  • ./easyrsa build-server-full [name]:

    • 这个下令则是用于在一个步骤中快速创建一个完备的服务器证书链,包括:

      • 天生服务器私钥
      • 创建 CSR
      • 签发服务器证书(由本地或已配置的CA签订)
      • 可能还包括创建DH参数文件大概天生CA证书及相关的中级证书(取决于EasyRSA版本和配置)

    • 相对于单独的gen-req下令,build-server-full提供了一个更便捷的方式,它一步到位地完成了从天生密钥对到得到署名证书的所有流程,特殊适用于新建OpenVPN服务器场景。

  总结来说,如果你只是想天生一个CSR以便提交给外部CA署名,那么使用gen-req;而如果你想在本地完成整个服务器证书的天生和署名过程,直接使用build-server-full更为方便。在OpenVPN环境中,通常会使用build-server-full来快速创建用于OpenVPN服务的自署名服务器证书。
  

  • 天生Diffie-Hellman算法需要的密钥文件
    1. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-dh
    复制代码



  • dh: /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem

  • 天生用于防DDOS攻击和TLS攻击文件
    1. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ openvpn --genkey tls-auth ta.key
    复制代码

  • 复制证书文件到server目录下
    1. [root@aliyun /etc/openvpn/server]$ cp /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem /etc/openvpn/server/
    2. cp /etc/openvpn/EasyRSA-3.1.7/pki/reqs/server.req /etc/openvpn/server/
    3. cp /etc/openvpn/EasyRSA-3.1.7/pki/private/server.key /etc/openvpn/server/
    4. cp /etc/openvpn/EasyRSA-3.1.7/pki/issued/server.crt /etc/openvpn/server/
    5. cp /etc/openvpn/EasyRSA-3.1.7/pki/ca.crt /etc/openvpn/server/
    6. cp /etc/openvpn/EasyRSA-3.1.7/ta.key /etc/openvpn/server
    复制代码
client


  • 天生客户端证书
           有几个客户端就需要创建几个证书,tom是我客户端的名称
       
    1. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-req tom nopass
    2. [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa sign client tom
    复制代码


  • req: /etc/openvpn/EasyRSA-3.1.7/pki/reqs/tom.req
  • key: /etc/openvpn/EasyRSA-3.1.7/pki/private/tom.key
  • crt: /etc/openvpn/EasyRSA-3.1.7/pki/issued/tom.crt

  • 复制证书到tom目录下
  1. [root@aliyun /etc/openvpn]$ mkdir tom
  2. [root@aliyun /etc/openvpn]$ cp /etc/openvpn/EasyRSA-3.1.7/pki/reqs/tom.req /etc/openvpn/tom
  3. cp /etc/openvpn/EasyRSA-3.1.7/pki/private/tom.key /etc/openvpn/tom
  4. cp /etc/openvpn/EasyRSA-3.1.7/pki/issued/tom.crt /etc/openvpn/tom
  5. cp /etc/openvpn/EasyRSA-3.1.7/pki/ca.crt /etc/openvpn/tom
  6. cp /etc/openvpn/EasyRSA-3.1.7/ta.key /etc/openvpn/tom
复制代码

配置文件


  • 天生OpenVPN服务端配置文件
  1. [root@aliyun /etc/openvpn]$ cat > /etc/openvpn/server/server.conf <<-EOF
  2. #端口号
  3. port 1194
  4. #开启TCP协议,关闭UDP协议
  5. proto tcp
  6. #dev tun创建路由隧道,dev tap将创建一个以太网隧道
  7. dev tun
  8. #修改CA证书、服务端证书和服务端私钥key的文件名
  9. ca ca.crt
  10. cert server.crt
  11. key server.key
  12. #Diifle hellman文件指向。如果在建立证书时使用2048的话就用2048
  13. dh dh.pem
  14. #给接入的Client分配的IP地址段,注意不要和服务内网网段重合
  15. server 10.8.0.0 255.255.255.0
  16. #客户端与客户端之间支持通信
  17. client-to-client
  18. #维持客户端和虚拟IP的联系。在OpenVPN重启时,再次连接的客户端依然被分配和以前一样的IP地址
  19. ifconfig-pool-persist ipp.txt
  20. #以下这句使得客户端能访问服务器后面的子网机器。比如服务器子网为172.29.242.142,则添加如下内容
  21. push "route 172.29.242.0 255.255.255.0"
  22. #分别指定发送间隔和接收间隔。用于设置OpenVPN的心跳包。此参数可保持OpenVPN连接的稳定性
  23. keepalive 10 120
  24. #最多允许200个客户端连接
  25. max-clients 200
  26. #为防止遭到DDoS攻击,生成ta.key文件,并拷贝到服务端和每个客户端
  27. #服务端0,客户端1
  28. tls-auth ta.key 0
  29. #设置重新连接时保留密钥。可避免重新连接时重新生成密钥
  30. persist-key
  31. #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
  32. persist-tun
  33. #指定OpenVPN输出连接状态的文件,可查看OpenVPN的连接状态
  34. status /etc/openvpn/logs/openvpn-status.log
  35. #记录日志,每次重启OpenVPN后追加log信息
  36. log-append /etc/openvpn/logs/openvpn.log
  37. #重复日志记录限额
  38. mute 20
  39. #指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
  40. verb 3
  41. #和keys连接VPN,一定要打开这个选项,否则只允许一 个人连接VPN
  42. duplicate-cn
  43. #支持密码认证-允许使用自定义脚本
  44. script-security 3
  45. #支持密码认证-指定认证脚本
  46. auth-user-pass-verify /etc/openvpn/check.sh via-env
  47. #支持密码认证-用户密码登陆方式验证
  48. username-as-common-name
  49. EOF
复制代码

  • 编写脚本查抄文件和密码文件
  1. # 创建认证文件
  2. [root@aliyun /etc/openvpn]$ cat > /etc/openvpn/check.sh <<-EOF
  3. #!/bin/bash
  4. PASSFILE="/etc/openvpn/user_passwd.txt"   #密码文件 用户名 密码明文
  5. LOG_FILE="/etc/openvpn/logs/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
  22. EOF
  23. # 对check.sh授予执行权限
  24. [root@aliyun /etc/openvpn]$ chmod u+x check.sh
  25. # 创建密码文件
  26. [root@aliyun /etc/openvpn]$ cat > /etc/openvpn/user_passwd.txt <<-EOF
  27. tom 123456
  28. EOF
复制代码

  • 服务端开启ip转发


  • 启动server端
  1. [root@aliyun /etc/openvpn/server]$ openvpn --config server.conf
复制代码
客户端安装OpenVPN


  • 安装OpenVPN
  1. yum install openvpn -y
  2. cd /etc/openvpn
  3. # 将服务端创建的证书文件拉取过来
  4. scp -P 2345 -r root@8.130.96.170:/etc/openvpn/tom ./
复制代码


  • 创建配置文件client.conf
  1. [root@k3s-main openvpn]# cat > /etc/openvpn/tom/client.conf <<-EOF
  2. #指定当前VPN是客户端
  3. client
  4. #使用tun隧道传输协议
  5. dev tun
  6. #使用tcp协议传输数据
  7. proto tcp
  8. #OpenVPN服务器IP地址端口号
  9. remote 8.130.96.170 1194
  10. #指定CA证书的文件路径
  11. ca ca.crt
  12. #指定当前客户端的证书文件路径
  13. cert tom.crt
  14. #指定当前客户端的私钥文件路径
  15. key tom.key
  16. #断线自动重新连接,在网络不稳定的情况下非常有用
  17. resolv-retry infinite
  18. #不绑定本地特定的端口号
  19. nobind
  20. #通过keepalive检测超时后,重新启动PN,不重新读取keys,保留第一次使用的key
  21. persist-key
  22. #检测超时后,重新启动PN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
  23. persist-tun
  24. #生成防御DDos破坏的文件。客户端配置为
  25. tls-auth ta.key 1
  26. #指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
  27. verb 3
  28. #使用用户名密码登录openvpn服务器
  29. auth-user-pass
  30. EOF
复制代码

  • 启动客户端
  1. [root@k3s-main tom]# openvpn --config client.conf
复制代码


  • 客户端ping服务端测试

问题反馈

若对文中有任何的疑问,大概需要资助可以通过以下方式进行反馈


  • 直接进行批评大概单独私聊
  • 发送邮件到:mr_xuansu@163.com
更多内容请关注微信公众号:萱蘇的运维日常

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

曹旭辉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表