openVpn搭建部署
上述博客内容写的比较完善,具备一定参考价值。本博客内容主要参照第一个地址。
如何在OpenVPN中配置255.255.255.252子网
OpenVPN的安装与部署(ldap进行身份认证+记录用户访问日志并发送邮件)
TODO:待参考该博客更新当前博客内容。
基本实现我预期的目标,限制暴露在公网的应用及页面的任意IP来源访问,仅允许通过openvpn访问。
- 建立openvpn-server(Server)端
- 建立openvpn-client(A)端
- 建立openvpn-client(B)端
A端通过访问B端(由openVpn分配ip)地址,实现限定IP来源访问能力。
【false】通过与openvpn-server建立连接,访问Server端内网中所有服务器。这里需要开启IP的转发,及配置防火墙的转发规则等。 我未搞定!
实际应用场景
例:访问B端的Nginx端口服务,需要开启以下配置,允许openvpn网段访问
allow 10.8.0.0/24; # 允许openVpn网段来源Ip访问(前提是B端需要安装openVpn客户端) |
服务端配置
安装配置证书软件
yum -y install easy-rsa |
若
easy-rsa
并未包含在默认的 CentOS/RHEL 软件仓库,以下方式开启:
yum install epel-release -y |
yum install easy-rsa -y |
查询是否安装成功
rpm -ql easy-rsa |
若依然无法安装,可以尝试更新下源 Centos7 更换阿里源
创建证书软件目录
mkdir /opt/easy-rsa |
cd /opt/easy-rsa |
复制配置到文件
cp -a /usr/share/easy-rsa/3.0.8/* . |
cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example ./vars |
清空vars
文件
> vars |
新增vars
文件内容
# 检查 EASYRSA_CALLER 环境变量 |
作用总结(gpt):
自动处理 vars 文件:不再需要手动 source 这个文件,EasyRSA 会自动处理。
配置证书请求的默认值:设置证书请求的默认值,包括国家、省份、城市、组织和电子邮件等信息。
简化证书生成过程:通过预定义这些变量,简化了生成证书请求的过程,避免每次手动输入这些信息。
创建证书
1、初始化,在当前目录创建PKI目录,用于存储整数
./easyrsa init-pki |
2、创建根证书,会提示设置密码,
用于ca对之后生成的server和client证书签名时使用,其他提示内容直接回车即可
./easyrsa build-ca |
Enter New CA Key Passphrase
提示你输入一个新的CA密钥密码短语。这是为了保护你的CA私钥,防止未经授权的访问。
Enter PEM pass phrase
提示你输入一个密码短语,用于加密和保护生成的CA私钥文件(ca.key)。这个密码短语在每次使用CA私钥(例如签发证书)时都需要输入,以确保私钥的安全性。
3、创建server端证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可
./easyrsa gen-req server nopass |
4、给server端证书签名,提示内容需要输入yes和创建ca根证书时候的密码
./easyrsa sign server server |
5、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法
./easyrsa gen-dh |
以下步骤为给client端创建证书
6、创建client端的证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可
./easyrsa gen-req client01 nopass |
7、给client端证书签名,提示内容输入yes和创建ca根证书时候的密码
- 第一个 client 证书类型:客户端证书
- 第二个 client01 客户端证书具体名称
./easyrsa sign client client01 |
8.检查是否有ca根证书、客户端服务端证书、客户端服务端私钥
安装
tree
命令:yum install tree -y
tree |
[root@server_164 easy-rsa]# tree |
安装openvpn服务端并写入配置文件
yum -y install openvpn |
openvpn 安装失败,可执行
yum install epel-release -y
服务端配置文件:
vim /etc/openvpn/server.conf |
完整配置,包含博客下文的
密码登录
、固定IP
(暂已注释)
port 1194 #端口 |
启动并检查端口
启动openvpn
systemctl start openvpn@server |
开机启动openven
systemctl enable openvpn@server |
查看网段
ip a s tun0 |
检查端口
ss -lntup|grep 1194 |
检查pid
ps -ef|grep openvpn |
客户端配置
Window客户端
下载openVpn的客户端
配置本地window环境
将ca根证书
、client.key
、client.crt
放入config
目录下
cp -rf /opt/easy-rsa/pki/ca.crt /tmp/ |
cp -rf /opt/easy-rsa/pki/issued/client.crt /tmp/ |
cp -rf /opt/easy-rsa/pki/private/client.key /tmp/ |
创建 client.ovpn
配置文件
client |
测试连接
连接成功
连接内网其他服务器
【我没验证成功!按需查看】若需要连接内网其他服务器,则开启。
开启 openvpn 服务端开启内核转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf |
sysctl -p |
Linux客户端
安装openvpn
yum -y install openvpn |
安装失败可尝试执行当前命令: yum install epel-release -y
客户端配置文件
vim /etc/openvpn/client.conf |
文件内容
client |
复制证书和密钥文件到openvpn目录下
mv /tmp/ca.crt /etc/openvpn/ |
启动客户端
systemctl start openvpn@client |
开机启动
systemctl enable openvpn@client |
OpenVpn 密码认证
服务端配置
添加配置信息到文件 /etc/openvpn/server.conf
script-security 3 #允许使用自定义脚本 |
编辑脚本文件
/etc/openvpn/check.sh
#!/bin/bash |
授予脚本执行权限
chmod +x /etc/openvpn/check.sh |
创建用户密码,空格为分割符
cat /etc/openvpn/openvpnfile |
重启服务端
systemctl restart openvpn@server |
Windows端配置
修改配置文件,底部添加配置
auth-user-pass |
连接的时候输入账号密码
Linux端配置
同windows端配置一致,配置文件底部添加
auth-user-pass |
重启客户端连接,然后输入账户密码登录
systemctl restart openvpn@client |
固定IP地址
ifconfig-pool-persist /etc/openvpn/ipp.txt
这个配置我没验证成功,使用的当前固定IP地址方式
修改openvpn
文件,添加配置:
client-config-dir /etc/openvpn/ccd |
创建客户端目录
mkdir -p /etc/openvpn/ccd |
配置客户端client1
文件
可用IP计算公式: x.x.0.(4n+1) - x.x.0.(4n+2)
- x.x 代表ip端
- n 代表任意数
echo "ifconfig-push 10.8.0.9 10.8.0.10" > /etc/openvpn/ccd/client1 |
重启openvpn服务端
systemctl restart openvpn@server |
注意:固定IP的文件,需要和配置登录密码的用户一致。
示例:创建的客户端证书文件
client01
,但是我配置的账号密码用户是mumu
,则在固定客户端client01
的IP配置时,需要指定的文件名为mumu
。
问题记录
固定openVpn的ip地址报错
There is a problem in your selection of --ifconfig endpoints [local=10.8.0.3, remote=10.8.0.4]. The local and remote VPN endpoints must exist within the same 255.255.255.252 subnet. This is a limitation of --dev tun when used with the TAP-WIN32 driver. Try 'openvpn --show-valid-subnets' option for more info. |
如何确定可用的IP地址
上述截图所示有效IP地址
ifconfig-push 10.8.0.1 10.8.0.2 |
可用IP地址简单计算方式
n 必须是4的倍数,因为每个子网包含4个ip地址
x.x.0.(4*n+1) - x.x.0.(4*n+2) |
例如:n = 2
x.x.0.9 - x.x.0.10 |