本次主要是为了使部分客户端以连接VPN的方式,改变访问Web Server的IP地址,设置Web对其的重定向,访问指定的页面;
环境:
使用的软件为 openvpn;
服务端为 CentOS7 腾讯云服务器;
客户端中,Windows端为win10系统主机,Android端为一加5手机,iOS端使用 iPad。
(win10就不说了,win7也没问题,Android是我个人手机,版本是通用的,一些版本可能会造成闪退或不能安装(我的手机比较旧,都3年了,新手机可能就没有此问题了),iOS为公司提供的测试用平板,手机端操作相同)
内容索引:---> 1、云服务器安装部署openvpn服务端;
云服务器安装部署openvpn服务端
**由于openvpn自己的官方页面正常情况下根本访问不了,需要出去才能访问,所以服务端下载,我们直接使用 yum 的方式进行安装即可;
**客户端方面就不太容易了,可能需要自己探索了,但是我也提供了一个正常可行的方法;
GitHub - OpenVPN/openvpn: OpenVPN is an open source VPN daemon(有服务端,没找到客户端)
http://openvpn.net/(这是官网,一般情况下白扯)
https://www.techspot.com/downloads/5182-openvpn.html(这个网络较好的情况是可以正常访问的,若你的网络运营商不行,那就是不行了,电脑可以尝试用手机4G网络热点,我的就是这样,条件有限了,哈哈)
安装软件及依赖
##使用yum来安装服务端以及各种需要的依赖软件包
[root@localhost ~]# yum install -y epel-release
[root@localhost ~]# yum install -y openvpn easy-rsa lz4-devel lzo-devel pam-devel openssl-devel systemd-devel sqlite-devel
设置网络转发
[root@localhost ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf [root@localhost ~]# sysctl -p
配置路由转发
##使用iptables设置路由转发,设置全部转发 ##查看记得 -t 选项,若不加只能看到防火墙的规则,我们可以看到最后一条是我们设置的路由转发 [root@localhost ~]# iptables -t nat -A POSTROUTING -j MASQUERADE [root@localhost ~]# iptables -t nat -nL Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0 ##保存iptables的设置,否则在服务器重启后没有转发规则,VPN设置会出现问题 [root@localhost ~]# service iptables save The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl. ##注意,这里若是也出现同样的报错,那证明你还没有安装iptables的服务,不能保存设置,我们要向下执行一些命令,若直接“OK”完成了就不需要执行了 ##报错执行 ##安装iptables服务并保存设置 [root@localhost ~]# yum install iptables-services -y [root@localhost ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] ##若设置错误,删除方法是执行下面的命令,这里我们安装就别执行啦 [root@localhost ~]# iptables -t nat -D POSTROUTING 1
复制创建初始配置文件
##安装完毕后默认是没有配置文件的,需要我们复制模板文件到指定的配置目录下,注意安装的版本号可能不一样,根据实际情况 tab 键补全路径
[root@localhost ~]# cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/server.conf
配置初始化信息
[root@localhost 3.0.8]# cd /usr/share/easy-rsa/3.0.8 [root@localhost 3.0.8]# cp /usr/share/doc/easy-rsa-3.0.8/vars.example vars [root@localhost 3.0.8]# vim vars ##国家 95 set_var EASYRSA_REQ_COUNTRY "CN"
##省份 96 set_var EASYRSA_REQ_PROVINCE "liaoning"
##城市 97 set_var EASYRSA_REQ_CITY "shenyang"
##组织 98 set_var EASYRSA_REQ_ORG "masses"
##邮箱 99 set_var EASYRSA_REQ_EMAIL "123456@qq.com"
##拥有者 100 set_var EASYRSA_REQ_OU "My openVPN"
##长度,无需更改 108 set_var EASYRSA_KEY_SIZE 2048
##算法,无需更改 117 set_var EASYRSA_ALGO rsa
初始化配置文件目录
[root@localhost 3.0.8]# ./easyrsa init-pki Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /usr/share/easy-rsa/3.0.8/pki
创建ca认证文件
##密码两次,自定(我们实验就设置123456吧),再一项是文件名称,回车默认即可 [root@localhost 3.0.8]# ./easyrsa build-ca Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Enter New CA Key Passphrase: ##输入密码123456 Re-Enter New CA Key Passphrase: ##输入密码123456 Generating RSA private key, 2048 bit long modulus .........................+++ ...........................+++ e is 65537 (0x10001) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: ##默认,回车即可 CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /usr/share/easy-rsa/3.0.8/pki/ca.crt
创建server端的认证文件
##密码同上输入;
##这里提醒一下,若使用有密码认证的证书方式,在后面 systemctl 启动服务时会需要输入我们使用的证书文件的密码;
##后面启动服务的内容中有讲解; [root@localhost 3.0.8]# ./easyrsa build-server-full server Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 2048 bit RSA private key ...........................................+++ ........................................+++ writing new private key to '/usr/share/easy-rsa/3.0.8/pki/easy-rsa-1790.Iw09WJ/tmp.tqGRVz' Enter PEM pass phrase: ##输入密码123456 Verifying - Enter PEM pass phrase: ##输入密码123456 ----- Using configuration from /usr/share/easy-rsa/3.0.8/pki/easy-rsa-1790.Iw09WJ/tmp.OvINKF Enter pass phrase for /usr/share/easy-rsa/3.0.8/pki/private/ca.key: ##输入密码123456 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Aug 8 12:48:20 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated ##该步骤还有另外一个方法,结尾添加 nopass 参数是生成一个无密码证书,不带此参数需要自己再设定输入密码,这一块和上面选择一个就好;
##重复建立server的认证密钥文件,会提示已经存在,若是要跟换的话,可以根据提示删除3个文件,然后重建即可; [root@localhost 3.0.8]# ./easyrsa build-server-full server nopass Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 2048 bit RSA private key ....................................................................................................+++ ........................+++ writing new private key to '/usr/share/easy-rsa/3.0.8/pki/easy-rsa-1993.Ja69Dt/tmp.1GB3zh' ----- Using configuration from /usr/share/easy-rsa/3.0.8/pki/easy-rsa-1993.Ja69Dt/tmp.02BLR0 Enter pass phrase for /usr/share/easy-rsa/3.0.8/pki/private/ca.key: ##这里输入一次之前ca证书的密码即可,密码它还是123456 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Aug 8 12:51:30 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated
执行加密
##需要一些等待时间,不要中断 [root@localhost 3.0.8]# ./easyrsa gen-dh Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ... ... ... ... ... ...+* DH parameters of size 2048 created at /usr/share/easy-rsa/3.0.8/pki/dh.pem
创建client端认证文件
##客户端认证用户名是自己定的,是区别不同用户使用的,密码可以相同,我们还使用之前使用的密码,或者直接回车,实际情况要避免密码混乱,自己都记不清就不好了 ##这里我们假设为用户 老四(laosi)创建一套证书 [root@localhost 3.0.8]# ./easyrsa build-client-full laosi Note: using Easy-RSA configuration from: /usr/share/easy-rsa/3.0.8/vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 2048 bit RSA private key ................................................+++ .......................................................................................................................+++ writing new private key to '/usr/share/easy-rsa/3.0.8/pki/easy-rsa-2082.DHvWGP/tmp.9EsvSt' Enter PEM pass phrase: ##输入密码123456 Verifying - Enter PEM pass phrase: ##输入密码123456 ----- Using configuration from /usr/share/easy-rsa/3.0.8/pki/easy-rsa-2082.DHvWGP/tmp.nzO0oV Enter pass phrase for /usr/share/easy-rsa/3.0.8/pki/private/ca.key: 输入密码123456 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'laosi' Certificate is to be certified until Aug 8 12:57:25 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated
客户端文件提醒:所有平台的客户端配置文件是一样的,一份配置文件多平台通用;
客户端需要的文件均为下列:
ca.crt、ta.key、客户端认证用户名.key、客户端认证用户名.crt、客户端认证用户名.ovpn
用我们目前实验的例子,就需要:
ca.crt、ta.key、laosi.key、laosi.crt、laosi.ovpn
其中 .ovpn是配置文件,是需要自己创建的;其他文件是命令生成,目录与server端在一起,下面查看文件中有;
.ovpn配置文件
##我们在根目录下编辑一个 .ovpn 配置文件,之后要将他同证书及密钥文件一同传到客户端设备中 [root@localhost ~]# cd [root@localhost ~]# vim laosi.ovpn ##证明是客户端 client ##下面两项要同服务端配置文件的相同,不同不能连接 dev tun proto tcp ##我们是云服务器来进行部署,这个IP地址,要是你云服务器的公网IP地址,端口就是服务端配置的,记得开安全组 remote 服务器公网IP地址 端口号 resolv-retry infinite nobind ;user nobody ;group nobody persist-key persist-tun ##这里我们使用相对路径 ca ca.crt cert 客户端认证用户名.crt key 客户端认证用户名.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC compress lz4-v2 verb 3 ;mute 20
创建ta.key文件
##此文件是提高安全性的,设置后服务端与客户端均需要此文件才能进行认证,服务端参数为0,客户端参数为1 ##执行后没有提示,生成的文件会出现在执行命令时的当前目录下,ls 即可查看到 [root@localhost 3.0.8]# openvpn --genkey --secret ta.key
查看生成的文件
[root@localhost 3.0.8]# ll total 100 -rwxr-xr-x 1 root root 76946 Sep 10 2020 easyrsa -rw-r--r-- 1 root root 4616 Sep 10 2020 openssl-easyrsa.cnf drwx------ 8 root root 300 May 5 20:57 pki -rw------- 1 root root 636 May 5 20:59 ta.key -rw-r--r-- 1 root root 8917 May 5 20:35 vars drwxr-xr-x 2 root root 122 May 5 20:21 x509-types [root@localhost 3.0.8]# cd pki/ [root@localhost pki]# ls -l ca.crt -rw------- 1 root root 1172 May 5 20:37 ca.crt [root@localhost pki]# cd private/ [root@localhost private]# ll total 12 -rw------- 1 root root 1766 May 5 20:37 ca.key -rw------- 1 root root 1834 May 5 20:57 laosi.key -rw------- 1 root root 1704 May 5 20:51 server.key [root@localhost private]# cd ../issued/ [root@localhost issued]# ll total 16 -rw------- 1 root root 4431 May 5 20:57 laosi.crt -rw------- 1 root root 4547 May 5 20:51 server.crt
认证文件移动到需要的目录
##我们一共需要5个文件,ca.crt、server.key、server.crt、dh.pem、ta.key,统一放到 /etc/openvpn/server/ 目录下 [root@localhost issued]# cd /usr/share/easy-rsa/3.0.8/pki [root@localhost pki]# cp -a {ca.crt,private/server.key,issued/server.crt,dh.pem,../ta.key} /etc/openvpn/server/ [root@localhost pki]# cd /etc/openvpn/server [root@localhost server]# ll total 24 -rw------- 1 root root 1172 May 5 20:37 ca.crt -rw------- 1 root root 424 May 5 20:41 dh.pem -rw------- 1 root root 4547 May 5 20:51 server.crt -rw------- 1 root root 1704 May 5 20:51 server.key -rw------- 1 root root 636 May 5 20:59 ta.key
配置主配置文件
[root@localhost server]# cd /etc/openvpn/ ##配置文件可以在原文中修改,也可以全部删除只写入生效项,其他没有写入的,会被执行默认设置,行的开头 ; 是来注释,该行配置不生效 [root@localhost openvpn]# vim /etc/openvpn/server.conf ##若是在云服务器上,这个地址要改为服务器所在内网的地址,不要写公网地址 ##如果你的服务器只有一个网卡,那么这一项也可以不添加,删除或 ; 注释掉 local 192.168.1.100 ##端口,正常情况下都是需要更换的,云服务器记得为端口开安全组设置,这个端口号是和客户端文件配置的端口一样的 port 端口号 ##这里我选择的是tcp,也可以选择udp,根据需要选择,而且要注意云服务器的安全组设置开的是tcp还是udp proto tcp ;proto udp ##使用隧道,tun是三层路由IP隧道,我们选择这个;tap是二层以太网隧道 ;dev tap dev tun ##设置我们创建的各个认证文件 ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem ##启动openvpn后会生成一个虚拟网卡,并形成一个地址池,来为接入的客户端分配虚拟IP地址,服务端默认是网段第一个可用IP地址 server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt ##设置路由转发的网段,我们是需要让外网接入的客户端可以访问我们的内网,或其他网段,均在这里设置,多个网段设置多条 push 即可 push "route 192.168.1.0 255.255.255.0" ##网关设置,不要多写,这个设置可以保证你的客户端既可以连接VPN访问内网,还可以继续访问外网,其他设置可能会造成只能访问内网,而外网不能访问 push "redirect-gateway" ##这个是内网的DNS,查看服务器的 /etc/resolv.conf 进行填写 push "dhcp-option DNS xxx.xxx.xxx.xxx" ##允许客户端互相可见 client-to-client ##简介检测,10秒ping一次,120秒没有收到信息则中断 keepalive 10 120 ##设置认证,这里设置是我们创建的ta.key文件,参数服务端为0 tls-auth /etc/openvpn/server/ta.key 0 ##加密模式 cipher AES-256-CBC ##服务端启用lz4压缩功能 compress lz4-v2 push "compress lz4-v2" ##客户端最大连接数 max-clients 100
##服务进程使用的用户及组,若不取消注释则会使用root用户运行,Linux建议去掉注释打开 user nobody group nobody
##重连或重启vpn后,使用之前的密钥文件并保持tun连接状态
persist-key
persist-tun
##连接信息记录文件
status openvpn-status.log
##日志文件,其中log是参数,表示每次覆盖之前的日志内容,可以替换为 log-append,表示每次日志是追加形式记录
log openvpn.log
##日志级别
verb 3
启动服务
##若在 systemctl 启动服务时出现如下提示,是需要你输入你的CA证书的密码才能进行启动;
##这是由于前面我们创建server端证书文件时是使用密码的,这里我们启动服务,也是需要密码; ##若要重启可能需要你先 stop 停止,然后再 start 启动,不能直接 restart 重启; Broadcast message from root@localhost (Tue 2021-06-08 13:13:29 CST): Password entry required for 'Enter Private Key Password:' (PID 16932). Please enter password with the systemd-tty-ask-password-agent tool! [root@localhost openvpn]# systemd-tty-ask-password-agent ##之后输入你创建CA证书时的密码,示例是123456 ##启动服务 [root@localhost openvpn]# systemctl start openvpn@server.service [root@localhost openvpn]# systemctl status openvpn@server.service ● openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On ser Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; disabled; vendor preset: disa Active: active (running) since Wed 2021-05-05 21:22:47 CST; 5s ago Main PID: 2210 (openvpn) Status: "Initialization Sequence Completed" CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─2210 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf May 05 21:22:47 localhost.localdomain systemd[1]: Starting OpenVPN Robust And Highly Flexi May 05 21:22:47 localhost.localdomain systemd[1]: Started OpenVPN Robust And Highly Flexib ##设置开机启动 [root@localhost openvpn]# systemctl enable openvpn@server.service Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@server.service to /usr/lib/systemd/system/openvpn@.service. ##查看网卡,会出现一个tun0的网卡,是我们服务的虚拟网卡 [root@localhost ~]# ip a ... ... ... ... 3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::dfb8:349f:73ed:e75c/64 scope link flags 800 valid_lft forever preferred_lft forever
Windows客户端安装并连接到服务端
http://openvpn.net/(这是官网,科技)或
https://www.techspot.com/downloads/5182-openvpn.html
直接下载安装程序即可,双击安装,一路“下一步”
安装完成我们需要配置客户端所需的文件,将生成的客户端文件都放到windows端主机中,选择 FILE -->BROWSE 然后选择 .ovpn 的配置文件;
提醒一下,我的配置文件写的均是相对路径,winodws端的即是所有文件放在同一个目录下,这样 .ovpn 配置文件就可以找到其他所需的文件了;
当配置文件正确导入之后会出现一个连接项目(十分尴尬,windows端的截图删错了,不过还好,与Android端的相似,是这么个意思吧,哈哈)
输入连接的名称,然后下面两项可以都勾选上,Save Private Key Password 是保存密码,Connect after import 是保存后直接进行连接;
之后点击右上角的 ADD,这样就开始连接了
Android客户端安装并连接到服务端
http://openvpn.net/(这是官网,科技)或
https://www.techspot.com/downloads/5182-openvpn.html
这里说一下,Android端可以是到谷歌商店去下载,直接下载需要连接设备,个人不会整,我自己是用网页地址提取下载的APK安装包;
我这里也使用了这个地址下载:OpenVPN 2.5.2 Download | TechSpot ;点击相应的系统版本之后进入下一个网页就不要再点了(全是广告),会自己触发下载,看网络状态,会延迟些许才开始下载
下载的APK传到手机里,配置文件及证书也一起传过来,使用Windows的文件即可,无需修改,软件安装即可;
这里要注意以下,我在安装的时候最开始的版本闪退,是由于其安装版本不同,比如需要选择 x86_64;
打开APP,会看到FILE,在其中添加我们的客户端配置文件;
添加成功后就和windows端的一样,进行连接的一些设置,输入密码, ADD添加就可以连接了;
iOS客户端安装并连接到服务端
由于本人没有设备,公司设备设置好之后就没拿过,没有图,但是整体步骤和操作方式是一样的,这里简单说一下;
我之前水果的设备是一点没用过,完全不懂,需要电脑下一个软件进行连接然后把文件放到设备中(我是没找到 iOS 平板的文件移动功能..);
这里描述一下客户端的安装:
水果自己的商店还是有 openvpn connect 这个软件的,你搜索的时候下拉框直接就有提示,但是,没什么卵用,我们这边是不能安装使用的,是遵守了相关的法律法规的,
那我们并不是出于不正经的目的,而是正经的办公使用怎么办,没办法,你也不能让人家单独给你开权限了。目前我找到的唯一办法就是注册一个新的ID,然后转到美国,登录
商店,你就可以下载安装了(不像Android一样,下一个apk传到手机里就直接安装了,水果不能..),之后就可以去导入证书及密钥了,不过还是不同于其他平台设备可以直接
导入的情况,看下面吧;
这里描述一下客户端文件的导入过程及问题:
客户端配置文件和证书同样可以使用之前Windows和Android用过的即可,均不需要修改,唯一的问题是,配置文件中证书及密钥文件都是相对路径,是相对于配置文件的;
在Windows与Android中使用配置文件后直接可以识别同路径下的证书及密钥文件,而iOS会提示你找不到文件;解决方法即是使用工具,将证书及密钥放入openvpn的安装目录
下,然后长按你的客户端配置文件,共享给openvpn这个软件APP,即可完成客户端配置导入,之后输入你的密码(我们实验是123456),就可以进行连接了;