基于Centos9部署Open*P*
系统环境操作系统ip地址1ip地址2Centos9192.168.6.10/24NAT网卡自动获取PSIP地址2用作*P*对外地址用于下载镜像包与测试。配置证书 修改主机名为Open*P*[rootlocalhost ~]# hostnamectl hostname open*P*[rootlocalhost ~]# bash[rootopen*P* ~]# *P**对外网卡配置IP地址[rootopen*p* ~]# nmcli connection modify ens160 ipv4.address 192.168.6.10/24 ipv4.method manual ipv4.gateway 192.168.6.1 ipv4.dns 192.168.6.1[rootopen*p* ~]# nmcli con up ens160 NAT网卡自动获取IP地址配置[rootopen*p* ~]# nmcli connection add type ethernet con-name ens224 ifname ens224 autoconnect yes 下载Open*P*相关软件仓库源[rootopen*p* ~]# yum -y install epel-release 下载证书生成工具[rootopen*p* ~]# yum -y install easy-rsa 创建存放证书目录[rootopen*p* ~]# mkdir -p /opt/easy-rsa[rootopen*p* ~]# cp -a /usr/share/easy-rsa/3.2.1/* /opt/easy-rsa/[rootopen*p* ~]# cp -a /usr/share/doc/easy-rsa/vars.example /opt/easy-rsa/varsPS/usr/share/easy-rsa目录通常包含Easy-RSA软件的配置模板、脚本和示例文件。/usr/share/doc/easy-rsa-3.0.8/vars.example是Easy-RSA 3.x 版本中主配置文件vars的示例文件其作用是让你快速创建并自定义自己的vars配置文件从而控制证书生成的各项参数 修改vars配置文件取消下列内容的配置[rootopen*p* ~]# vi /opt/easy-rsa/varsset_var EASYRSA_DNcn_onlyset_var EASYRSA_REQ_COUNTRYCNset_var EASYRSA_REQ_PROVINCEGuangDongset_var EASYRSA_REQ_CITYGuangZhouset_var EASYRSA_REQ_ORGITset_var EASYRSA_REQ_EMAILITqq.comset_var EASYRSA_NS_SUPPORTyes 初始化证书创建pki目录用户存储证书[rootopen*p* ~]# cd /opt/easy-rsa/[rootopen*p* easy-rsa]# ./easyrsa init-pki 创建根证书[rootopen*p* easy-rsa]# ./easyrsa build-ca 创建server端证书和密钥文件[rootopen*p* easy-rsa]# ./easyrsa gen-req server nopassPSnopass表示不加密密钥文件。gen-reqgenerate request的缩写意为生成证书请求。server这为你即将生成的证书请求和密钥文件命名例如生成server.key,server.req。这个名称通常用来标识其用途例如open*P*-server、web-server等。nopass生成无密码保护的私钥。这对于需要自动启动的服务如Open*P*、Nginx至关重要否则每次服务重启都需手动输入私钥密码。生成两个文件①pki/private/server.key②pki/reqs/server.req 对server端的证书进行签名[rootopen*p* easy-rsa]# ./easyrsa sign server serversign用 CA 的私钥对请求文件进行数字签名。第一个server指定要签发的证书类型为server。这会自动为证书附加服务器用途所需的扩展属性如serverAuth。第二个server指定要签发的证书请求文件名称。它对应您之前执行./easyrsa gen-req server nopass时生成的pki/reqs/server.req文件。 创建Diffe-Hellmen文件密钥交换时的Diffe-Hellman算法。[rootopen*p* easy-rsa]# ./easyrsa gen-dhPS需要等几十分钟 创建client端证书和密钥文件[rootopen*p* easy-rsa]# ./easyrsa gen-req client nopassgen-reqgenerate request的缩写意为生成证书请求。 为client端证书签名[rootopen*p* easy-rsa]# ./easyrsa sign client client配置Open*P*服务端 安装Open*P*[rootopen*p* easy-rsa]# yum -y install open*p* 创建TLS认证密钥[rootopen*p* easy-rsa]# open*p* --genkey --secret /etc/open*p*/ta.key–genkey --secret 生成一个密钥并指定它为“静态密钥”即预共享密钥。/etc/openp/ta.key将生成的密钥文件保存到系统的 Open*P* 配置目录下并命名为ta.key。作为 *P* 服务的“第二道门禁”。客户端和服务器都必须持有完全相同的ta.key文件才能建立连接。 配置open*P*文件[rootopen*p* easy-rsa]# cd[rootopen*p* ~]# vi /etc/open*p*/server/server.confEOF#监听本机端口port1194#指定采用的传输协议,可选tcp或udpproto tcp#指定创建的通信隧道类型,可选tun或tapdev tun#指定CA证书的文件路径ca ca.crt#指定服务器端的证书文件路径cert server.crt#指定服务器端的私钥文件路径key server.key#指定DH参数的文件路径,也就是交换证书dh dh.pem#给客户端分配地址池,注意:不能和*P*服务器内网网段有相同server172.16.1.0255.255.255.0#允许客户端访问内网网段pushroute 192.168.6.0 255.255.255.0#服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IPifconfig-pool-persist ipp.txt#存活时间,10秒ping一次,120如未收到响应则视为断线keepalive10120#最多允许100个客户端连接max-clients100#日志记录位置status open*p*-status.log#open*p*版本verb3#允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接client-to-client#open*p*日志记录位置log /var/log/open*p*.log#通过keepalive检测超时后,重新启动*p*,不重新读取keys,保留第一次使用的keyspersist-key#检测超时后,重新启动*p*,一直保持tun是linkup的.否则网络会先linkdown然后再linkuppersist-tun#开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1tls-auth /etc/open*p*/ta.key0#开启多人同时登录duplicate-cn#允许使用自定义脚本script-security3#脚本路径auth-user-pass-verify /etc/open*p*/check.sh via-env#用户密码登陆方式验证:加上client-cert-not-required则代表只使用用户名密码方式验证登录如果不加则代表需要证书和用户名密码双重验证登录username-as-common-name#绑定客户端IPclient-config-dir /etc/open*p*/ccd EOF 拷贝证书到Open*P*主配置目录下[rootopen*p* ~]# cp -a /opt/easy-rsa/pki/ca.crt /etc/open*p*/server/[rootopen*p* ~]# cp -a /opt/easy-rsa/pki/issued/server.crt /etc/open*p*/server/[rootopen*p* ~]# cp -a /opt/easy-rsa/pki/private/server.key /etc/open*p*/server/[rootopen*p* ~]# cp -a /opt/easy-rsa/pki/dh.pem /etc/open*p*/server/ 创建并配置客户端配置目录[rootopen*p* ~]# mkdir /etc/open*p*/ccd[rootopen*p* ~]# vi /etc/open*p*/ccd/clientEOF ifconfig-push172.16.1.10255.255.255.0 EOF 创建认证脚本[rootopen*p* ~]# vi /etc/open*p*/check.shEOF#!/bin/bash# /etc/open*p*/check.sh# 从环境变量获取用户名和密码USERNAME$usernamePASSWORD$password# 检查凭据文件示例使用/etc/open*p*/credentials文件# 文件格式username:password每行一个用户CREDENTIALS_FILE/etc/open*p*/credentials# 验证逻辑if[-f$CREDENTIALS_FILE];thenifgrep-q^$USERNAME:$PASSWORD$$CREDENTIALS_FILE;thenexit0# 认证成功fifiexit1# 认证失败EOF[rootopen*p* ~]# chmod 755 /etc/open*p*/check.sh#设置脚本权限 创建凭据文件[rootopen*p* ~]# vi /etc/open*p*/credentialsEOF user1:password1 user2:password2 EOF启动Openp服务[rootopen*p* ~]# systemctl start open*p*-serverserver.service[rootopen*p* ~]# systemctl enable open*p*-serverserver.service配置Open*P*客户端 客户端操作系统ip地址Windows server 2022192.168.6.100/24 在Windows主机上安装Open*P*客户端安装完毕 拷贝下述文件到客户端上Open*P*安装目录的config目录下/opt/easy-rsa/pki/ca.crt /opt/easy-rsa/pki/issued/client.crt /opt/easy-rsa/pki/private/client.key /etc/open*p*/ta.key 在客户端新建一个client.o*P*文件写入下述配置#指定当前*p*是客户端 client #使用tun隧道传输协议 dev tun #使用udp协议传输数据 proto tcp #open*p*服务器IP地址端口号 remote 192.168.6.10 1194 #断线自动重新连接在网络不稳定的情况下非常有用 resolv-retry infinite #不绑定本地特定的端口号 nobind #指定CA证书的文件路径 ca ca.crt #指定当前客户端的证书文件路径 cert client.crt #指定当前客户端的私钥文件路径 key client.key #指定日志文件的记录详细级别可选0-9等级越高日志内容越详细 verb 3 #通过keepalive检测超时后重新启动*p*不重新读取keys保留第一次使用的keys persist-key #检测超时后重新启动*p*一直保持tun是linkup的。否则网络会先linkdown然后再linkup persist-tun #使用ta.key防御攻击。服务器端的第二个参数值为0客户端的为1 tls-auth ta.key 1 #账号密码认证 auth-user-pass 文件内容如下 右下角点击连接 输入用户名和密码进行连接 弹窗显示连接成功 查看IP地址已经分配了一个新的IP开启内网访问 通过NAT的方式使得内网之间能够进行互访[rootopen*p* ~]# echo net.ipv4.ip_forward 1 /etc/sysctl.conf [rootopen*p* ~]# sysctl -p net.ipv4.ip_forward 1 [rootopen*p* ~]# systemctl start firewalld.service [rootopen*p* ~]# [rootopen*p* ~]# firewall-cmd --permanent --add-masquerade success [rootopen*p* ~]# firewall-cmd --permanent --add-serviceopen*p* success [rootopen*p* ~]# firewall-cmd --permanent --add-port1194/tcp success [rootopen*p* ~]# firewall-cmd --reload success 在客户端上进行访问外网