centos7部署openVPN

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: centos7部署openVPN

一、部署环境及软件版本

三台服务使用vmware虚拟机模拟,网络使用全部使用桥接,window客户端可以不用虚拟机(我的电脑有问题所以使用虚拟机),以上IP根据实际情况修改

二、配置证书

1.安装证书安装包及依赖

yum -y install easy-rsa
mkdir /opt/easy-rsa
cd /opt/easy-rsa
rpm -ql easy-rsa    #查看已安装的RPM包中名为 easy-rsa 的文件列表
cp -a /usr/share/easy-rsa/3.0.8/* .  #官方建议整个easy-rsa目录复制到另一个位置,而不是在原目录下进行操作,以便将来的升级不会消除已做的更改
cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example ./vars
> vars 
cat vars
if [ -z "$EASYRSA_CALLER" ]; then
        echo "You appear to be sourcing an Easy-RSA 
'vars' file." >&2
        echo "This is no longer necessary and is 
disallowed. See the section called" >&2
        echo "'How to use this file' near the top 
comments for more details." >&2
       return 1
fi
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Beijing"
set_var EASYRSA_REQ_CITY "Shanghai"
set_var EASYRSA_REQ_ORG "koten"
set_var EASYRSA_REQ_EMAIL "888888@qq.comm"
set_var EASYRSA_NS_SUPPORT "yes"
set_var EASYRSA_CERT_EXPIRE=36500
set_var EASYRSA_CA_EXPIRE 36500

2.创建证书

./easyrsa init-pki    #1、初始化,在当前目录创建PKI目录,用于存储整数
./easyrsa build-ca    #2、创建根证书,会提示设置密码,用于ca对之后生成的server和client证书签名时使用,其他提示内容直接回车即可
    Enter New CA Key Passphrase:         #注意密码不能太短,我这边设置的是123456
    Re-Enter New CA Key Passphrase: 
 openssl x509 -text -in pki/ca.crt -noout #查看证书详情 过期时间
./easyrsa gen-req server nopass    #3、创建server端证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可
./easyrsa sign server server    #4、给server端证书签名,提示内容需要输入yes和创建ca根证书时候的密码
./easyrsa gen-dh    #5、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法
./easyrsa gen-req client1 nopass    #6、创建client端的证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可
./easyrsa sign client client1    #7、给client端证书前面,提示内容输入yes和创建ca根证书时候的密码
tree    #检查是否有ca根证书、客户端服务端证书、客户端服务端私钥
.
├── easyrsa                    #管理命令
├── openssl-easyrsa.cnf
├── pki
│   ├── ca.crt                #ca根证书,服务端与客户端都需要用
│   ├── certs_by_serial
│   │   ├── 633C217979C7B5F1D0A9ECA971006F96.pem
│   │   └── 857F9B2E3F6C3D35934672212343B42D.pem
│   ├── dh.pem                #认证算法 服务端
│   ├── index.txt
│   ├── index.txt.attr
│   ├── index.txt.attr.old
│   ├── index.txt.old
│   ├── issued
│   │   ├── client.crt        #客户端证书
│   │   └── server.crt        #服务端证书
│   ├── openssl-easyrsa.cnf
│   ├── private
│   │   ├── ca.key
│   │   ├── client.key        #客户端私钥
│   │   └── server.key        #服务端私钥
......

三、安装及配置openVPN

yum -y install openvpn
/etc/openvpn/server.conf  #/usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf 模板配置文件
port 1194                                    #端口,生产建议修改
proto udp                                    #协议
dev tun                                      #采用路由隧道模式
ca /opt/easy-rsa/pki/ca.crt                  #ca证书的位置
cert /opt/easy-rsa/pki/issued/server.crt     #服务端公钥的位置
key /opt/easy-rsa/pki/private/server.key     #服务端私钥的位置
dh /opt/easy-rsa/pki/dh.pem                  #证书校验算法  
server 10.8.0.0 255.255.255.0                #给客户端分配的地址池
push "route 172.16.1.0 255.255.255.0"        #允许客户端访问的内网网段,注意这里要和实际环境符合
ifconfig-pool-persist ipp.txt                #地址池记录文件位置,未来让openvpn客户端固定ip地址使用的
keepalive 10 120                             #存活时间,10秒ping一次,120秒如果未收到响应则视为短线
max-clients 100                              #最多允许100个客户端连接
status openvpn-status.log                    #日志位置,记录openvpn状态
log /var/log/openvpn.log                     #openvpn日志记录位置
verb 3                                       #openvpn版本
client-to-client                             #允许客户端与客户端之间通信
persist-key                                  #通过keepalive检测超时后,重新启动VPN,不重新读取
persist-tun                                  #检测超时后,重新启动VPN,一直保持tun是linkup的,否则网络会先linkdown然后再linkup
duplicate-cn                                 #客户端密钥(证书和私钥)是否可以重复,即允许多个客户端使用同一账号登录(默认否)
comp-lzo                                     #启动lzo数据压缩格式

四、启动openVPN

systemctl start openvpn@server
systemctl enable openvpn@server
Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@server.service to /usr/lib/systemd/system/openvpn@.service.
ip a s tun0    #查看网段
4: 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::b1:7ea6:1178:8a1a/64 scope link flags 800 
       valid_lft forever preferred_lft forever
       
ss -lntup|grep 1194    #检查端口
udp    UNCONN     0      0         *:1194                  *:*                   users:(("openvpn",pid=47104,fd=6))
ps -ef|grep openvpn    #检查pid
root      47104      1  0 10:59 ?        00:00:00 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf
root      47202  40565  0 11:01 pts/0    00:00:00 grep --color=auto openvpn
vim /etc/systemd/system/openvpn.service #openvpn@server.service名称有点不太符合常规可以选择新建一个名为openvpn的服务
[Unit]
Description=OpenVPN Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server.conf

四、openVPN客户端配置(window)

1.下载openVPN

访问:https://openvpn.net/community-downloads/,选中对应的版本下载(可能需要FQ)

2.安装及配置客户端

1)安装,安装一路点击下一步即可,略

2)下载客户端证书

将ca根证书、client.key、client.crt放入config目录

sz pki/ca.crt

sz pki/private/client.key

sz pki/issued/client.crt

3)创建客户端配置文件

client                      #模式,客户端
dev tun                     
proto udp
remote 192.168.101.67 1194  #注意此处的IP和端口
resolv-retry infinite
nobind                      #不绑定本地特定端口
ca ca.crt
cert client.crt
key client.key
verb 3
persist-key
comp-lzo

五、连接测试

1.双击左桌面openVPN快捷键,在右下角出现图标后右键点击连接

如果配置没问题则正常连接,如果无法连接查看连接输出日志

查看网络适配器信息,可以看到新安装的TAP网卡连接成功,并且获得了一个OpenVPN服务器分配的IP地址10.8.0.6

查看系统路由表

2.访问openVPN内网服务器和测试内网服务器

服务端

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf    #确保openvpn开启了ip转发

sysctl -p

net.ipv4.ip_forward = 1

客户端测试

测试内网服务添加路由

route add -net 10.8.0.0 netmask 255.255.255.0 gw 172.16.1.101  #根据实际网段和IP地址配置

客户端测试,可以看到回包了

访问内网服务也正常

除了在客户端添加路由外也可以通过服务端做NAT映射解决网络通信,这样就不需要在客户端添加路由了

#iptables -t nat -A POSTROUTING  -s 10.8.0.0/24 -d 172.16.1.0/24 -j SNAT --to-source 172.16.1.101 对指定的网段进行NAT映射
iptables -t nat -A POSTROUTING  -s 10.8.0.0/24  -j SNAT --to-source 172.16.1.101 
iptables -L -t nat  
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         
SNAT       all  --  10.8.0.0/24          anywhere             to:172.16.1.101

六、openvpn添加密码认证

1.修改服务端配置支持密码认证

cat /etc/openvpn/server.conf        #添加配置文件

......

script-security 3                                   #允许使用自定义脚本

auth-user-pass-verify /etc/openvpn/check.sh via-env #指定认证脚本

username-as-common-name                             #用户密码登陆方式验证

2.编写校验脚本

cat /etc/openvpn/check.sh         
#!/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
chmod +x /etc/openvpn/check.sh

3.创建用户和密码

cat /etc/openvpn/openvpnfile

test test123         #以空格分隔

4.重启服务

systemctl restart openvpn@server

5.客户端配置文件中添加配置最下面加上auth-user-pass

6.客户端端口重新连接

重新分配了地址

测试连接

抄自于:

 https://blog.csdn.net/qq_37510195/article/details/130777785

 https://zhuanlan.zhihu.com/p/554690377?utm_id=0

相关文章
|
12天前
|
Oracle Java 关系型数据库
CentOS 7.6操作系统部署JDK实战案例
这篇文章介绍了在CentOS 7.6操作系统上通过多种方式部署JDK的详细步骤,包括使用yum安装openjdk、基于rpm包和二进制包安装Oracle JDK,并提供了配置环境变量的方法。
169 80
|
2月前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
|
11天前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
89 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
12天前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
50 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
30天前
|
机器学习/深度学习 文字识别 Linux
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS 7)
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS 7)
25 1
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS 7)
|
11天前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
45 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
16天前
|
Linux 数据安全/隐私保护 网络虚拟化
centos7部署Pritunl
centos7部署Pritunl
|
20天前
|
存储 安全 Ubuntu
部署在CentOS上,有什么优缺点
【8月更文挑战第25天】部署在CentOS上,有什么优缺点
34 1
|
16天前
|
SQL 分布式计算 Hadoop
centos7通过CDH部署Hadoop
centos7通过CDH部署Hadoop
|
17天前
|
分布式计算 Java Linux
centos7通过Ambari2.74部署Hadoop
centos7通过Ambari2.74部署Hadoop