用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道

文章目录 「隐藏」
  1. 1 、在公有云搭建 openvpn 的服务端
  2.  
  3. 2 、安装 Easy RSA 套件
    1. 1 、用于生成 openVPN 所需的密钥,服务端和客户端所需的证书和密钥
    2. 2 、修改配置文件
    3. 3 、使用 Easy RSA 在服务端生成私钥和证书
    4. 4 、为 OpenVPN 服务端生成 server 证书和私钥
  4.  
  5. 3 、 OpenVPN 服务端配置
    1. 1 、创建修改服务端配置文件
    2. 2 、编写用户认证脚本文件
    3. 3 、创建用户密码
    4. 4 、移动相关密钥文件启动服务
  6. 到这里我们的服务端就搭建好了,使用 ifconfig 可以看到我们的服务端已经给自己分配了一个 10.8.0.1 的虚拟 IP
  7.  
  8. 4 、客户端配置
    1. 1 、安装 openVPn
    2. 2 、在服务端生成客户端的证书和私钥,每个客户端都要有自己的私钥
    3. 3 、创建/修改 OpenVPN 客户端配置文件
    4. 4 、创建账号密码文件
    5. 5 、启动客户端
  9.  
  10. 5 、在我们自己的电脑直接使用 VPN 访问内网

链接:https://www.cnblogs.com/KingArmy/p/18344320

用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第1张图片

1 、在公有云搭建 openvpn 的服务端

# 安装 openvpn
yum install openvpn

 

2 、安装 Easy RSA 套件

1 、用于生成 openVPN 所需的密钥,服务端和客户端所需的证书和密钥

# 下载 Easy RSA 源码包
1 、下载地址:
	https://github.com/OpenVPN/easy-rsa/releases
2 、下载源码包
	wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.2/EasyRSA-3.1.2.tgz
3 、移动到固定位置
	mv EasyRSA-3.1.2 /etc/openvpn/easy-rsa

2 、修改配置文件

1 、把 vars.example 样例文件重命名为 vars,然后编辑
2 、搜索 set_var EASYRSA_CA_EXPIRE 设置证书有效期一年
3 、搜索 set_var EASYRSA_CERT_EXPIRE 设置服务有效期

3 、使用 Easy RSA 在服务端生成私钥和证书

用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第2张图片

1 、使用 easyrsa 清理原有证书和私钥:
		./easyrsa clean-all
2 、生成 CA 根证书:
		./easyrsa build-ca
		这里输入两个根密码,第三次回车即可
3 、证书生成位置
		/etc/openvpn/easy-rsa/pki/ca.crt

4 、为 OpenVPN 服务端生成 server 证书和私钥

1 、使用 nopass 参数设置不需要密码,那么在启动 OpenVPN 服务的时候就不提示输入密码
		./easyrsa build-server-full server nopass
2 、证书和密钥的位置
		服务端证书路径:/etc/openvpn/easy-rsa/pki/issued/server.crt
		服务端私钥路径:/etc/openvpn/easy-rsa/pki/private/server.key
3 、生成 Diffie-Hellman 算法需要的密钥文件:
		./easyrsa gen-dh
4 、生成 tls-auth Key 用于防止 DDOS 和 TLS 攻击:
		openvpn --genkey --secret ta.key
5 、 ta.key 路径
		/etc/openvpn/easy-rsa/ta.key

 

3 、 OpenVPN 服务端配置

1 、创建修改服务端配置文件

1 、配置文件位置:/etc/openvpn/server/server.conf
		vim /etc/openvpn/server/server.conf
======================================    BEGIN   ===========================================
port 1194                               #端口
dev tun                                 #采用路由隧道模式 tun
ca ca.crt                               #ca 证书文件位置
cert server.crt                         #服务端公钥名称
key server.key                          #服务端私钥名称
dh dh.pem                               #交换证书
auth SHA1
proto tcp
server 10.8.0.0 255.255.255.0           #给客户端分配地址池,注意:不能和 VPN 服务器内网网段有相同
push "route 10.0.8.2 255.255.252.0"   #允许客户端访问内网 10.0.8.2 网段,我这里填了服务器内网 IP 和子网掩码
client-to-client
verb 3                                  #openvpn 版本
persist-key     #通过 keepalive 检测超时后,重新启动 VPN,不重新读取 keys,保留第一次使用的 keys 。
persist-tun     #检测超时后,重新启动 VPN,一直保持 tun 是 linkup 的。否则网络会先 linkdown 然后再 linkup
keepalive 10 120                        #存活时间,10 秒 ping 一次,120 如未收到响应则视为断线
max-clients 200                         #最多允许 200 个客户端连接
ifconfig-pool-persist ipp.txt           #地址池记录文件位置 维持客户端和 virtual ip 的对应表,以便客户端重连接连接也是相同 IP
duplicate-cn    #和 keys 连接 VPN,一定要打开这个选项,否则只允许一 个人连接 VPN
script-security 3                                   #支持密码认证-允许使用自定义脚本
auth-user-pass-verify /etc/openvpn/check.sh via-env #支持密码认证-指定认证脚本
username-as-common-name                             #支持密码认证-用户密码登陆方式验证
======================================     END    ===========================================

2 、编写用户认证脚本文件

1 、脚本文件位置:/etc/openvpn/check.sh
		vim /etc/openvpn/check.sh
======================================    BEGIN 写入下面内容  ===========================================
#!/bin/bash
PASSFILE="/etc/openvpn/openvpnfile"   #密码文件 用户名 密码明文
LOG_FILE="/var/log/openvpn-password.log"  #用户登录情况的日志
TIME_STAMP=`date "+%Y-%m-%d %T"`
if [ ! -r "${PASSFILE}" ]; then
    echo "${TIME_STAMP}: Could not open password file "${PASSFILE}" for reading." >> ${LOG_FILE}
    exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}'    ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
    echo "${TIME_STAMP}: User does not exist: username="${username}",password="${password}"." >> ${LOG_FILE}
    exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
    echo "${TIME_STAMP}: Successful authentication: username="${username}"." >> ${LOG_FILE}
    exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username="${username}", password="${password}"." >> ${LOG_FILE}
exit 1
======================================     END    ===========================================

2 、给脚本可执行权限
	chmod +x /etc/openvpn/check.sh

3 、创建用户密码

1 、文件密码存储文件位置:/etc/openvpn/openvpnfile
2 、内容格式: 每行对应一个账号密码
		koten 1

4 、移动相关密钥文件启动服务

1 、拷贝私钥、公钥和证书等文件到 server.conf 同级目录/etc/openvpn/server/下
	注:需要拷贝的文件包括 ca.crt 、 ca.key 、 server.crt 、 server.key 、 dh.pem 、 ta.key
	cp /etc/openvpn/easy-rsa/pki/ca.crt
	cp /etc/openvpn/easy-rsa/pki/private/ca.key
	cp /etc/openvpn/easy-rsa/pki/issued/server.crt
	cp /etc/openvpn/easy-rsa/pki/private/server.key
	cp /etc/openvpn/easy-rsa/pki/dh.pem
	cp /etc/openvpn/easy-rsa/ta.key

2 、启动服务:使用--config path 指定配置文件
	openvpn --config server.conf

到这里我们的服务端就搭建好了,使用 ifconfig 可以看到我们的服务端已经给自己分配了一个 10.8.0.1 的虚拟 IP

用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第3张图片

 

4 、客户端配置

1 、安装 openVPn

# 安装 openvpn
yum install openvpn

2 、在服务端生成客户端的证书和私钥,每个客户端都要有自己的私钥

1 、在/etc/openvpn/easy-rsa/ 目录下执行
	./easyrsa build-client-full client nopass
	注⚠️:生成的时候需要输入 CA 根证书的密码
2 、生成的证书位置
	客户端证书路径:/etc/openvpn/easy-rsa/pki/issued/client.crt
	客户端私钥路径:/etc/openvpn/easy-rsa/pki/private/client.key
3 、将生成的客户端证书(client.crt) 、私钥 (client.key),服务端根证书 (ca.crt) 、 ta.key 打包放到客户端的 /etc/openvpn/client 位置

3 、创建/修改 OpenVPN 客户端配置文件

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

4 、创建账号密码文件

1 、/etc/openvpn/client 下创建用户密码文件 pass.txt:格式第一行账号,第二行密码,如:
	张三
	123456

5 、启动客户端

# 启动客户端
1 、 openvpn --config client.conf
观察下图:已经为我们分配的对应的虚拟 IP,通过这个 IP 在这个网段内的机器都可以互通了

用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第4张图片

 

5 、在我们自己的电脑直接使用 VPN 访问内网

分别配置在 Windows 和 Mac 上使用下载地址:https://openvpn.net/client/

1 、 Windows 客户端下载:

https://swupdate.openvpn.org/community/releases/OpenVPN-2.6.12-I001-arm64.msi

2 、 Mac 客户端下载

https://swupdate.openvpn.net/downloads/connect/openvpn-connect-3.4.9.4830_signed.dmg

3 、以 Mac 为例

把上面说到的 Easy RSA 生成的服务器根证书 ca.crt 、客户端私钥 clientpc.key 、证书 client.crt,和 ta.key 复制到一个目录下面

然后新建一个 client.ovpn 文件

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

新建 pass.txt 文件, 与客户端的账号密码规则一样,第一行为账户,第二行密码 用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第5张图片

点击导入配置文件

用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第6张图片 用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第7张图片

用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第8张图片

这样就连上了,观察本地 IP,发现为我们也分配了一个虚拟 IP

用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道 - 第9张图片

在我们本地就可以随意访问内网网络了

END

《用 OpenVPN 轻松实现内网穿透,打造专属安全远程访问通道》留言数:0

发表留言