33

OpenVPN使用教程

 2 years ago
source link: https://maxqiu.com/article/detail/113
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
OpenVPN使用教程

2021/08/08  Windows  Linux  VPN

  1. 有一台或多台云服务器,且均在同一局域网内
  2. 服务器内有多个服务需要访问,例如:
    1. MySQLRedis等服务,这些服务可以设置密码,然后开放端口
    2. NacosElasticsearchzipkin等服务,这些服务无法设置密码、或者不方便设置密码,但是又想正常访问

此时可以搭建VPN通道,使本地机器和云服务器组成局域网,云服务器的控制面板上只需要开放一个VPN的端口即可。

服务端(CentOS7环境):

  1. yum install -y gcc-c++ openssl openssl-devel net-tools lzo lzo-devel pam pam-devel

安装OpenVPN

  1. 打开OpenVPN官网下载地址:https://openvpn.net/community-downloads/
  2. 下载openvpn-2.5.3.tar.gz
  3. 下载完成上传到服务器
  1. # 直接执行脚本下载到服务器
  2. wget https://swupdate.openvpn.org/community/releases/openvpn-2.5.3.tar.gz

解压、编译、安装

  1. # 解压
  2. tar -zxf openvpn-2.5.3.tar.gz
  3. # 进入该目录
  4. cd openvpn-2.5.3/
  5. # 配置
  6. ./configure --prefix=/usr/local/openvpn/
  7. # 编译
  8. make
  9. # 安装
  10. make install

添加环境变量

编辑环境变量文件

  1. vim /etc/profile

PATH添加:/usr/local/openvpn/sbin,例如:

  1. export PATH=$PATH:/usr/local/openvpn/sbin
  1. source /etc/profile

查看是否成功

  1. openvpn --version

退出当前目录

  1. cd ..

下载easy-rsa工具

  1. 打开GitHub地址https://github.com/OpenVPN/easy-rsa/releases
  2. 下载最新版easy-rsa的tgz包
  3. 下载完成上传到服务器
  1. # 直接执行脚本下载到服务器
  2. wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
  1. # 解压
  2. tar -zxf EasyRSA-3.0.8.tgz
  3. # 进入该目录
  4. cd EasyRSA-3.0.8/

生成服务端与客户端证书

  1. 初始化
    ./easyrsa init-pki
  2. 生成根证书
    ./easyrsa build-ca nopass
    • nopass表示不加密
    • 提示输入通用名,可以输入服务器IP或者域名或者不输入,然后直接回车
    • 此时看到提示ca文件在/root/EasyRSA-3.0.8/pki/ca.crt
  3. 服务端:
    1. 创建服务端证书
      ./easyrsa gen-req server nopass
      • server即创建后的证书文件名,可自定义
      • nopass表示不加密
      • 提示输入通用名,直接回车
    2. 给服务端证书做签名
      ./easyrsa sign server server
      • 第一个server代表签为服务端
      • 第二个server服务端证书文件名
      • 提示一些确认信息,输入yes并回车
  4. 客户端:(如果需要多个客户端,每个客户端都需要一个唯一的证书。重复以下两步:client端文件名不相同即可,例如:client1 client2)
    1. 创建客户端证书
      ./easyrsa gen-req client nopass
      • nopass表示不加密
      • client即创建后的文件名,可自定义
      • 提示输入通用名,直接回车
    2. 给客户端证书做签名
      ./easyrsa sign client client
      • 第一个client代表签为客户端
      • 第二个client客户端证书文件名
      • 提示一些确认信息,输入yes并回车

配置服务端

复制服务端秘钥至安装目录

  1. # PS:当前命令还在上文的 /root/EasyRSA-3.0.8 目录下
  2. cp -p pki/ca.crt pki/private/server.key pki/issued/server.crt /usr/local/openvpn/

复制服务端配置文件至安装目录

  1. # 退出当前文件夹并进入openvpn源码文件夹
  2. cd ../openvpn-2.5.3/
  3. # 复制配置文件示例
  4. cp ./sample/sample-config-files/server.conf /usr/local/openvpn/

生成其他文件

进入到安装目录

  1. cd /usr/local/openvpn/

生成pem文件

  1. openssl dhparam -out dh2048.pem 2048

生成key文件

  1. openvpn --genkey tls-auth ta.key

修改配置文件

编辑配置文件

  1. vim server.conf

修改如下配置

  1. # 监听端口:默认1194,可自定义修改
  2. port 1194
  3. # 使用TCP协议
  4. proto tcp
  5. ;proto udp
  6. # 使用tap模式
  7. dev tap
  8. ;dev tun
  9. # 证书文件
  10. ca /usr/local/openvpn/ca.crt
  11. cert /usr/local/openvpn/server.crt
  12. key /usr/local/openvpn/server.key
  13. # pem文件
  14. dh /usr/local/openvpn/dh2048.pem
  15. # 给客服端分配的IP网段,根据自己喜好修改,不能和服务器内网IP一个网段
  16. server 10.8.0.0 255.255.255.0
  17. # IP记录文件
  18. ifconfig-pool-persist /usr/local/openvpn/ipp.txt
  19. # 允许客户端访问服务器上的其他网络,10.0.4.0是服务器的内网IP网段,根据实际情况修改
  20. push "route 10.0.4.0 255.255.255.0"
  21. # 允许客户端之间互相访问,例如公司电脑和家里电脑想互相访问,则需要开启
  22. client-to-client
  23. # key文件
  24. tls-auth /usr/local/openvpn/ta.key 0 # This file is secret
  25. # 加密方式
  26. cipher AES-256-GCM
  27. # 状态文件
  28. status /usr/local/openvpn/openvpn-status.log
  29. # 日志文件
  30. log /usr/local/openvpn/openvpn.log
  31. # 明确的退出通知,TCP模式需要设置为0
  32. explicit-exit-notify 0

修改完成后保存退出

修改firewalld

必须启用firewalld,否则无法完成网络转发(当然,如果你会iptables就当我没说)

启用firewalld并设置开机自启

PS:如果服务器没有启用过firewalldssh端口不是默认的22,那么请使用云厂商的VNC网页模式登录服务器并开启防火墙,然后再添加自定义的ssh端口放行。XShell等远程连接会在打开firewalld之后被动断开,需要开放端口之后再重新连接

  1. systemctl start firewalld.service
  2. systemctl enable firewalld.service

开放openvpn的端口以及打开masquerade

  1. firewall-cmd --zone=public --permanent --add-port=1194/tcp
  2. firewall-cmd --zone=public --permanent --add-masquerade
  3. firewall-cmd --complete-reload

启动与开机自启

新建服务文件

  1. vim /etc/systemd/system/openvpn.service

添加如下内容

  1. [Unit]
  2. Description=OpenVPN Server
  3. After=network.target
  4. After=syslog.target
  5. [Install]
  6. WantedBy=multi-user.target
  7. [Service]
  8. ExecStart=/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/server.conf

刷新系统服务、设置开机自启、启动服务、查看服务状态

  1. systemctl daemon-reload
  2. systemctl enable openvpn.service
  3. systemctl start openvpn.service
  4. systemctl status openvpn.service

修改云服务器控制面板的防火墙

根据上文配置文件中的端口和协议,在云服务器的控制面板中打开对应的端口和协议即可

客户端(Windows)

  1. 打开官网https://openvpn.net/community-downloads/
  2. 点击Windows 64-bit MSI installer后面的OpenVPN-2.5.3-I601-amd64.msi进行下载
  1. # 浏览器打开如下地址
  2. https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.3-I601-amd64.msi
  1. 双击开始安装
  2. 选择Customize自定义安装
    1. Launch on User Logon:图形化界面的开机自启。根据自己需求进行选择
    2. OpenVPN Servcie:后台服务模式(如果要开机自动连接VPN,则启用)
    3. Wintuntun模式虚拟网卡。根据上文配置,关闭
  3. 自定义选项完成后,点击Install Now
  4. 安装完成后,选择Close完成安装

在服务器上导出客户端证书文件和ta.key文件,列表如下:

  • /root/EasyRSA-3.0.8/pki/ca.crt
  • /root/EasyRSA-3.0.8/pki/private/client.key
  • /root/EasyRSA-3.0.8/pki/issued/client.crt
  • /usr/local/openvpn/ta.key

导出后放在C:\Program Files\OpenVPN\config目录下

客户端配置文件

复制一份C:\Program Files\OpenVPN\sample-config\client.ovpnC:\Program Files\OpenVPN\config路径下,使用记事本等文本编辑工具编辑client.ovpn文件。修改的内容如下

  1. # 使用tap模式
  2. dev tap
  3. ;dev tun
  4. # 使用TCP
  5. proto tcp
  6. ;proto udp
  7. # 服务端地址与端口
  8. remote x.x.x.x 1194
  9. # 秘钥文件(默认即可)
  10. ca ca.crt
  11. cert client.crt
  12. key client.key
  13. # ta.key文件(默认即可)
  14. tls-auth ta.key 1
  15. # 加密方式
  16. cipher AES-256-GCM
  17. # 不缓存认证(添加在文件结尾)
  18. auth-nocache

客户端配置

右击任务栏带锁的小电脑图标,选择选项菜单

  1. 常规:
    1. 启动:此处也可以设置图形界面是否开机自启
    2. 静默连接:连接时不弹出窗口
    3. 显示通知:根据需求选择
  2. 高级:
    1. 配置文件:C:\Program Files\OpenVPN\config
    2. 日志文件:C:\Program Files\OpenVPN\log

图形界面连接

  1. 双击桌面OpenVPN GUI图标启动图形界面(已启动则忽略)
  2. 双击任务栏带锁的小电脑图标
  3. 看到图标变绿色代表连接成功
  4. (可选)打开cmd,测试ping 10.8.0.1

PS:GUI打开自动连接:快捷方式 → 右击 → 属性 → 目标后面添加--connect client.ovpn(注意--前面有个空格) → 确定

开机自启服务连接

安装时如果启用了OpenVPN Servcie,则安装目录下有一个config-auto文件夹

  1. 使用突袭界面连接保证连接正常可用
  2. config目录下的配置文件都复制到config-auto目录下
  3. 重启电脑,然后打开cmd,测试ping 10.8.0.1

PS:
可能会出现开机之后ping不通的情况,等2分钟后又可以连上去。
从日志分享,第一次连接的时候连不上,2分钟之后会重试,重试的时候就连上去了
目前还不知道为啥第一次连不上去

当服务端和客户端均正常启动后,就可以通过服务器的内网IP访问到上面的服务


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK