拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Linux
  3. 正文

openvpn 服务安装手册-linux centos 7.9(2022.2.24第二次修正-2023.6.5第三次修正)

2020年8月27日 4861点热度 2人点赞 0条评论

目录

  • Centos7搭建OpenVPN
    • 一、服务端配置
      • 1、搭建流程图
      • 2、安装epel扩展包、openvpn 、easy-rsa、iptables-server
      • 3、生成证书及相关文件
        • (1)复制easy-rsa脚本到/etc/openvpn下面,该脚本是用来生成CA证书和各种key文件
        • (2)查看证书版本号进入相关目录{随着后期更新,可能版本会有变化},创建文件并设置变量
        • (3)#变量生效
        • (4)生成CA根证书
        • (5)生成openvpn服务器证书和密钥,第一个参数是证书名称
        • (6)生成Diffie-Hellman算法需要的密钥文件
        • (7)生成tls-auth key,为了防止DDOS和TLS攻击,这个属于可选安全配置
        • (8)openvpn文件整理
        • (9)创建openvpn日志目录
      • 4、配置OpenVPN Server端配置文件
        • (1)创建配置文件
        • (2)写入配置参数
      • 5、配置文件中需要的密码文件
        • (1)配置密码文件
      • (2)授权为可执行
      • 6、配置防火墙及安全服务
        • (1)禁用firewalld,启用iptables
        • (2)关闭selinux
        • (3)启用iptables(用于控制openvpn用户对资源的访问)
        • (4)添加防火墙规则
      • 具体规则:
      • 7、服务器启用IP地址转发
      • 8、启动服务
    • 二、在服务器配置客户端相关信息——方法1:自动脚本
      • 1、客户端下载
      • 2、最简单的方法使用脚本创建
        • (1)脚本1:创建用户,密码,ip地址
        • (2)脚本2:脚本1关联
        • (3)创建模版配置文件
      • 3、运行sh openvpn.sh-配置用户
        • (1)运行sh openvpn.sh
        • (2)创建用户和密码。
        • (3)分配ip地址
      • 4、复制zip文件
      • 5、连接测试
    • 三、在服务器配置客户端相关信息——方法2:手动创建脚本
      • 1、添加客户端用户配置文件(通过sample.ovpn进行更改)
        • (1)创建模版配置文件
      • 2、创建客户端证书
      • 3、创建客户端IP以及密码
        • (1)为用户配置密码和分配IP地址:
      • 4、吊销证书删除用户
      • 5、配置密码验证脚本:
      • 6、密码存放方式
    • 四、配置核心交换机
    • 五、总结:
      • 1、openvpn需要三个重要的文件:
      • 2、openvpn可以实现功能
        • (1)客户端上网走本地网络、通过vpn访问内部服务器
        • (2)客户端上公网或访问内部服务器都通过openvpn转发,但是需要设置几个地方:
      • 3、单密码+证书访问
        • (1)server:
        • (2)client:
      • 4、单密码访问(根据3中配置进行增改):
        • (1)server配置增加:
        • (2) client配置:
      • 5、证书访问
        • (1)server:
        • (2)client:
    • 六、问题排查
      • 1、启动服务报错:
      • 2、更改启动方式正常:
      • 3、最根本原因是selinux没有关闭。
    • 七、阿里云ECS配置如下(从上述配置中做简单修改即可,内部段使用10.9.0.0/24,默认为10.8.0.0/24)
      • 1、配置
      • 2、iptables防火墙配置,用于路由转发和控制
      • 3、客户端配置。

Centos7搭建OpenVPN

如果不想看此方式:可以使用快速搭建方式执行见:(https://www.topunix.com/post-10442.html)

一、服务端配置

1、搭建流程图

2、安装epel扩展包、openvpn 、easy-rsa、iptables-server

yum install epel-* -y
yum -y install openvpn easy-rsa iptables-services

centos7.9会自动安装3.0.8版本的openvpn

3、生成证书及相关文件

利用easy-rsa生成相关证书文件

  • CA根证书
  • openvpn服务器证书
  • Diffie-Hellman算法用到的key

(1)复制easy-rsa脚本到/etc/openvpn下面,该脚本是用来生成CA证书和各种key文件

[root@ ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/

(2)查看证书版本号进入相关目录{随着后期更新,可能版本会有变化},创建文件并设置变量

[root@localhost ~]# yum info easy-rsa

[root@openvpnservice ~]# cd /etc/openvpn/easy-rsa/3.0.8/
[root@openvpnservice 3.0.8]# touch vars
[root@openvpnservice 3.0.8]# vim vars
export KEY_COUNTRY="CN" #(国家名称)
export KEY_PROVINCE="ShangHai" #(省份名称)
export KEY_CITY="ShangHai" #(城市名称)
export KEY_ORG="YCZB" #(组织机构名称)
export KEY_EMAIL="284833194@qq.com" #(邮件地址)

(3)#变量生效

[root@openvpnservice 3.0.8]# source ./vars

(4)生成CA根证书

./easyrsa init-pki         #初始化 pki 相关目录
./easyrsa build-ca nopass  #生成 CA 根证书,命令完成后: 输入 Common Name,名字随便起。
注意:在上述部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个你自己随便设置个独一无二的。
我设置通用名字:openvpn

(5)生成openvpn服务器证书和密钥,第一个参数是证书名称

[root@localhost 3.0.8]#./easyrsa build-server-full server nopass

(6)生成Diffie-Hellman算法需要的密钥文件

[root@localhost 3.0.8]# ./easyrsa gen-dh   #创建Diffie-Hellman,时间比较久一些

(7)生成tls-auth key,为了防止DDOS和TLS攻击,这个属于可选安全配置

[root@localhost 3.0.8]# openvpn --genkey --secret ta.key

(8)openvpn文件整理

[root@localhost 3.0.8]#mkdir /etc/openvpn/server/certs
[root@localhost 3.0.8]#cd /etc/openvpn/server/certs/

# SSL 协商时 Diffie-Hellman 算法需要的 key

[root@localhost certs]#cp /etc/openvpn/easy-rsa/3/pki/dh.pem ./

# CA 根证书

[root@localhost certs]#cp /etc/openvpn/easy-rsa/3/pki/ca.crt ./

# open VPN 服务器证书

[root@localhost certs]#cp /etc/openvpn/easy-rsa/3/pki/issued/server.crt ./server.crt

# open VPN 服务器证书 key

[root@localhost certs]#cp /etc/openvpn/easy-rsa/3/pki/private/server.key ./server.key

# tls-auth key

[root@localhost certs]#cp /etc/openvpn/easy-rsa/3/ta.key ./

(9)创建openvpn日志目录

#创建日志目录

[root@openvpnservice certs]# mkdir -p /var/log/openvpn/

#给予权限

[root@openvpnservice certs]# chown openvpn:openvpn /var/log/openvpn

#创建ccd

mkdir /etc/openvpn/ccd

4、配置OpenVPN Server端配置文件

(1)创建配置文件

原配置文件在 /usr/share/doc/openvpn-/sample/sample-config-files

(2)写入配置参数

[root@openvpnservice openvpn]# vi /etc/openvpn/server.conf

模板(见连接文件)生产系统使用配置文件
port 1194   # 监听的端口号
proto udp   # 服务端用的协议,udp 能快点,所以选择udp,在做端口映射的时候,一定要选择udp模式。
dev tun
ca /etc/openvpn/server/certs/ca.crt            # CA 根证书路径
cert /etc/openvpn/server/certs/server.crt      # open VPN 服务器证书路径
key /etc/openvpn/server/certs/server.key       # open VPN 服务器密钥路径,This file should be kept secret
dh /etc/openvpn/server/certs/dh.pem            # Diffie-Hellman 算法密钥文件路径
tls-auth /etc/openvpn/server/certs/ta.key 0    #  tls-auth key,参数 0 可以省略,如果不省略,那么客户端配置相应的参数该配成 1。如果省略,那么客户端不需要 tls-auth 配置
server 10.8.0.0 255.255.240.0                  # 该网段为 open VPN 虚拟网卡网段,不要和内网网段冲突即可。open VPN 默认为 10.8.0.0/24;当前设置为10.8.0.0/20,则代表可以使用20位掩码的地址。
push "dhcp-option DNS 8.8.8.8"                 # DNS 服务器配置1,可以根据需要指定其他dns
push "dhcp-option DNS 8.8.4.4"                 # DNS 服务器配置2

#push "redirect-gateway def1"
push "route 172.18.1.0 255.255.255.0"          #这里填写需要vpn可以访问的内部网段。
                                               #下面两个配合(第一个访问外网通过本地网卡,第二个访问内部服务器通过vpn放通)
                                               #情况1:
                                                 #第一个(push "redirect-gateway def1")如果注释掉,所有的流量都不主动通过openvpn转发(),
                                                 #客户端可以直接访问直接访问公网(走的还是客户单本地的路由网络),
                                                 #客户端无法直接访问内网资源,需要单独加vpn客户端段到需要访问网段的路由(push "route 172.18.1.0 255.255.255.0")
                                                 #push "redirect-gateway def1"   # 客户端所有流量都通过 open VPN 转发,类似于代理开全局;正常情况下这个语句需要注释掉,不让上网流量通过vpn转发
                                                 #push "route 172.18.1.0 255.255.255.0" #加上此语句,才能让vpn客户端访问172.18.1.0段
                                               #情况2:
                                                  #第一个(push "redirect-gateway def1")如果不进行注释,客户端所有流量都通过open VPN转发,如果要客户端访问公网网络,需要将分配的VPN段,于防火墙上进行配置,使其可以访问公网
                                                  #此处不需要再进行路由的设置

#
compress lzo
duplicate-cn                                  # 允许一个用户多个终端连接,同时IP地址会自动向后划分,比如第一个用户是10.8.0.6,第二个用户就是10.8.0.10;第三个用户就是10.8.0.14;如果注释掉则只能一个用户使用,如果后者登录,则前者会被挤掉
keepalive 10 120
client-config-dir /etc/openvpn/ccd                         # 根据ccd目录下的用户分配的IP进行ip地址分配,如果没有设置此参数,则所有用户的ip地址都从10.8.0.0/20段开始自动分配(无法管控用户的ip地址)
comp-lzo
persist-key
persist-tun


auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env  # use username and password login
username-as-common-name
script-security 3

user openvpn                                  # open VPN 进程启动用户,openvpn 用户在安装完 openvpn 后就自动生成了 group openvpn
#client-cert-not-required                     #不请求客户的CA证书,使用User/Pass验证,如果同时启用证书和密码认证,注释掉该行 

#指定 log 文件位置 
log /var/log/openvpn/server.log  
log-append /var/log/openvpn/server.log 
status /var/log/openvpn/status.log 
verb 3 
explicit-exit-notify 1

5、配置文件中需要的密码文件

(1)配置密码文件

checkpsw.sh

vi /etc/openvpn/checkpsw.sh
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.

PASSFILE="/etc/openvpn/psw-file"
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

(2)授权为可执行

chmod +x /etc/openvpn/checkpsw.sh

6、配置防火墙及安全服务

(1)禁用firewalld,启用iptables

[root@openvpnservice openvpn]# systemctl stop firewalld
[root@openvpnservice openvpn]# systemctl disable firewalld

(2)关闭selinux

[root@openvpnservice openvpn]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@openvpnservice openvpn]# setenforce 0

(3)启用iptables(用于控制openvpn用户对资源的访问)

[root@openvpnservice openvpn]# systemctl start iptables
[root@openvpnservice openvpn]# systemctl enable iptables

[root@openvpnservice openvpn]# iptables -F

(4)添加防火墙规则

[root@openvpnservice openvpn]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o tun0 -j MASQUERADE
[root@openvpnservice openvpn]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  ok  ]
[root@openvpnservice openvpn]# systemctl restart iptables

具体规则:

iptables过滤策略

7、服务器启用IP地址转发

[root@openvpnservice openvpn]# echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
[root@openvpnservice openvpn]# sysctl -p
net.ipv4.ip_forward = 1

8、启动服务

systemctl start openvpn@server  # 启动
systemctl enable openvpn@server  # 开机自启动
systemctl status openvpn@server  # 查看服务状态

服务开启会报错:看/var/log/messages即可。
(1)配置文件中有中文没有被注释完全
(2)缺少13中的密码检查脚本,创建13的脚本,并chmod 777即可。

二、在服务器配置客户端相关信息——方法1:自动脚本

1、客户端下载

win7:https://download.topunix.com/openvpn/openvpn-install-2.4.9-I601-Win7.exe

win10:https://download.topunix.com/openvpn/openvpn-install-2.4.9-I601-Win10%20.exe

2、最简单的方法使用脚本创建

(1)脚本1:创建用户,密码,ip地址

vi /etc/openvpn/openvpn.sh

openvpn.sh脚本

(2)脚本2:脚本1关联

vi /etc/openvpn/client/ovpn_user.sh

ovpn_user.sh脚本

(3)创建模版配置文件

[root@openvpnservice ~]# cd /etc/openvpn/client/

[root@openvpnservice client]# vi sample.ovpn
client
proto udp
dev tun
remote 58.211.*.* 11940
ca ca.crt
cert admin.crt

auth-user-pass #密码验证需要
key admin.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings
#redirect-gateway def1 #户端所有流量都通过 open VPN 转发,配合服务器端,此处生效可以直接访问所有内部服务器,而不需要在server.conf中配置 push route

3、运行sh openvpn.sh-配置用户

(1)运行sh openvpn.sh

(2)创建用户和密码。

(3)分配ip地址

10.9.0.6 10.9.0.5
或
10.9.0.10 10.9.0.9

4、复制zip文件

下载zip文件并解压,复制到客户端:C:\Program Files\OpenVPN\config

5、连接测试

三、在服务器配置客户端相关信息——方法2:手动创建脚本

1、添加客户端用户配置文件(通过sample.ovpn进行更改)

(1)创建模版配置文件

[root@openvpnservice ~]# cd /etc/openvpn/client/

[root@openvpnservice client]# touch sample.ovpn
client
proto udp
dev tun
remote 58.211.*.* 11940
ca ca.crt
cert admin.crt

auth-user-pass #密码验证需要
key admin.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings
#redirect-gateway def1 #户端所有流量都通过 open VPN 转发,配合服务器端,此处生效可以直接访问所有内部服务器,而不需要在server.conf中配置 push route

2、创建客户端证书

ovpn_user.txt

(1)进入/etc/openvpn/easy-rsa/3,运行easyrsa命令,进行用户创建
[root@localhost pki]# cd /etc/openvpn/easy-rsa/3

[root@localhost 3]# ./easyrsa build-client-full LLL nopass

运行上述命令,会创建如下三个文件:

[root@localhost pki]# find /etc/openvpn/easy-rsa/3/pki |grep LLL
/etc/openvpn/easy-rsa/3/pki/private/LLL.key
/etc/openvpn/easy-rsa/3/pki/reqs/LLL.req
/etc/openvpn/easy-rsa/3/pki/issued/LLL.crt

(2)拷贝四个文件进行打包(需要放置客户端)
# 创建文件夹:LLL,整理下生成的文件到新建的 /etc/openvpn/client/keys/LLL中
[root@localhost pki]# mkdir -p /etc/openvpn/client/keys/LLL
#拷贝所有证书文件到LLL中(一共五个文件,后面没建立一个用户,都需要这五个文件,其中ta.key是配合tls-auth使用)
[root@localhost pki]# cp /etc/openvpn/easy-rsa/3/pki/ca.crt /etc/openvpn/client/keys/LLL/ # CA 根证书
[root@localhost pki]# cp /etc/openvpn/easy-rsa/3/pki/issued/LLL.crt /etc/openvpn/client/keys/LLL/ # 客户端证书
[root@localhost pki]# cp /etc/openvpn/easy-rsa/3/pki/private/LLL.key /etc/openvpn/client/keys/LLL/# 客户端证书密钥
[root@localhost pki]# cp /etc/openvpn/client/sample.ovpn /etc/openvpn/client/keys/LLL/LLL.ovpn# 客户端配置文件
此处需要对LLL.ovpn的证书名称进行更改,默认是admin.crt,admin.key改为和客户端名称一致,LLL.crt,LLL.key
[root@localhost LLL]# cp /etc/openvpn/server/certs/ta.key /etc/openvpn/client/keys/LLL/ta.key # auth-tls 文件

3、创建客户端IP以及密码

(1)为用户配置密码和分配IP地址:

[root@localhost ccd]# echo "ifconfig-push 10.8.0.6 10.8.0.5" >>/etc/openvpn/ccd/LLL
[root@localhost ccd]# echo "LLL 123" >> /etc/openvpn/psw-file

导出压缩包解压后放到客户端目录中即可

4、吊销证书删除用户

进入easy-rsa目录中去执行easyrsa删除wangxuejin用户

[root@openvpnservice ~]# cd /etc/openvpn/easy-rsa/3.0.8
[root@openvpnservice 3.0.8]#./easyrsa revoke LLL
[root@openvpnservice 3.0.8]# ./easyrsa gen-crl

5、配置密码验证脚本:

checkpsw.sh

6、密码存放方式

在psw-file里按”用户名[空格或者tab]密码“这种规则方式存放+

#touch /opt/openvpn/logs/psw-file
#chown nobody:nobody /opt/openvpn/psw-file
#cat /opt/openvpn/psw-file
LLL 123
zhangsan 123

四、配置核心交换机

因为openvpn需要虚拟一个IP地址段,所以,需要在核心交换机的静态路由处,添加此段以及允许访问的段

172.18.1.110是openvpn服务器地址。

五、总结:

1、openvpn需要三个重要的文件:

vars、server.conf、client.conf

https://www.topunix.com/post-2999.html

2、openvpn可以实现功能

(1)客户端上网走本地网络、通过vpn访问内部服务器

  a、配置好密码、证书
  b、设置好上述三个文件
  c、设置好核心交换机中的静态路由(针对于虚拟ip的路由转发)

(2)客户端上公网或访问内部服务器都通过openvpn转发,但是需要设置几个地方:

  a、根据(1)中配置好
  b、clinet.conf的redirect-gateway def1和server.conf配置中的和push "redirect-gateway def1"要加上,表示全部走vpn 转发
  c、设置路由,防火墙设置10.8.0.0/24的静态路由

上述设置可以满足(2)的需求

3、单密码+证书访问

(1)server:

port 1194   # 监听的端口号
proto udp   # 服务端用的协议,udp 能快点,所以我选择 udp
dev tun
ca /etc/openvpn/server/certs/ca.crt  #   CA 根证书路径
cert /etc/openvpn/server/certs/server.crt  # open VPN 服务器证书路径
key /etc/openvpn/server/certs/server.key  # open VPN 服务器密钥路径,This file should be kept secret
dh /etc/openvpn/server/certs/dh.pem  # Diffie-Hellman 算法密钥文件路径
tls-auth /etc/openvpn/server/certs/ta.key 0 #  tls-auth key,参数 0 可以省略,如果不省略,那么客户端
# 配置相应的参数该配成 1。如果省略,那么客户端不需要 tls-auth 配置
server 10.8.0.0 255.255.255.0   # 该网段为 open VPN 虚拟网卡网段,不要和内网网段冲突即可。open VPN 默认为 10.8.0.0/24
push "dhcp-option DNS 8.8.8.8"  # DNS 服务器配置,可以根据需要指定其他 ns
push "dhcp-option DNS 8.8.4.4"

#push "redirect-gateway def1"
push "route 172.18.1.0 255.255.255.0"
#下面两个配合(第一个访问外网通过本地网卡,第二个访问内部服务器通过vpn放通)
#情况1:
#第一个(push "redirect-gateway def1")如果注释掉,所有的流量都不主动通过openvpn转发(),
#客户端可以直接访问直接访问公网(走的还是客户单本地的路由网络),
#客户端无法直接访问内网资源,需要单独加vpn客户端段到需要访问网段的路由(push "route 172.18.1.0 255.255.255.0")
#push "redirect-gateway def1"   # 客户端所有流量都通过 open VPN 转发,类似于代理开全局;正常情况下这个语句需要注释掉,不让上网流量通过vpn转发
#push "route 172.18.1.0 255.255.255.0" #加上此语句,才能让vpn客户端访问172.18.1.0段
#情况2:
#第一个(push "redirect-gateway def1")如果不进行注释,客户端所有流量都通过open VPN转发,如果要客户端访问公网网络,需要将分配的VPN段,于防火墙上进行配置,使其可以访问公网
#此处不需要再进行路由的设置

#
compress lzo
duplicate-cn   # 允许一个用户多个终端连接,同时IP地址会自动向后划分,比如第一个用户是10.8.0.6,第二个用户就是10.8.0.10;第三个用户就是10.8.0.14;如果注释掉则只能一个用户使用,如果后者登录,则前者会被挤掉
keepalive 10 120
comp-lzo
persist-key
persist-tun

# use username and password login
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
username-as-common-name
script-security 3
# open VPN 进程启动用户,openvpn 用户在安装完 openvpn 后就自动生成了 group openvpn
user openvpn
#不请求客户的CA证书,使用User/Pass验证,如果同时启用证书和密码认证,注释掉该行
#client-cert-not-required

# 指定 log 文件位置 
log /var/log/openvpn/server.log  
log-append /var/log/openvpn/server.log 
status /var/log/openvpn/status.log 
verb 3 
explicit-exit-notify 1

(2)client:

client
proto udp
dev tun
remote 58.211.*.* 11940
ca ca.crt
cert admin.crt

auth-user-pass #密码验证需要
key admin.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings
#redirect-gateway def1 #户端所有流量都通过 open VPN 转发,配合服务器端,此处生效可以直接访问所有内部服务器,而不需要在server.conf中配置 push route

4、单密码访问(根据3中配置进行增改):

(1)server配置增加:

script-security 3
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env    #指定用户认证脚本
username-as-common-name
verify-client-cert none

(2) client配置:

增加:添加一行auth-user-pass
去掉:注释crt和key路径

5、证书访问

(1)server:

去掉:
#verify-client-cert none #免用证书
# use username and password login
#auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
#username-as-common-name

(2)client:

去掉: auth-user-tls

六、问题排查

1、启动服务报错:

systemctl start openvpn@server

cat /var/log/openvpn/server.log

2、更改启动方式正常:

[root@openvpn ~]#openvpn /etc/openvpn/server.conf &
通过执行exit退出当前界面
[root@openvpn ~]#exit

3、最根本原因是selinux没有关闭。

关闭selinux即可。

七、阿里云ECS配置如下(从上述配置中做简单修改即可,内部段使用10.9.0.0/24,默认为10.8.0.0/24)

安装配置需要按照:一、二、三配置。

1、配置

[root@iZrj96evwj6ne6gjelxe96Z openvpn]# cat /etc/openvpn/server.conf
port 11940
proto udp
dev tun
ca /etc/openvpn/server/certs/ca.crt
cert /etc/openvpn/server/certs/server.crt
key /etc/openvpn/server/certs/server.key
dh /etc/openvpn/server/certs/dh.pem
tls-auth /etc/openvpn/server/certs/ta.key 0
server 10.9.0.0 255.255.240.0
push "dhcp-option DNS 223.5.5.5"
push "dhcp-option DNS 8.8.4.4"
push "dhcp-option DNS 8.8.8.8"
#push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway def1"    #主要用于代理#自动推送客户端上的网关及DHCP,此项开启了流量转发,有这项才能使用服务器代理上网
push "route 172.20.13.0 255.255.255.0" #用于访问内部IP
#compress lzo
#duplicate-cn
keepalive 10 120
client-config-dir ccd
comp-lzo
persist-key
persist-tun

# use username and password login
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
username-as-common-name
script-security 3

user openvpn
#client-cert-not-required

log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
verb 3
explicit-exit-notify 1

2、iptables防火墙配置,用于路由转发和控制

[root@iZrj96evwj6ne6gjelxe96Z openvpn]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Tue Jul 4 16:21:23 2023
*nat
:PREROUTING ACCEPT [8:386]
:INPUT ACCEPT [8:386]
:OUTPUT ACCEPT [10:660]
:POSTROUTING ACCEPT [10:660]
-A POSTROUTING -s 10.9.0.0/20 -o eth0 -j MASQUERADE  ##这里配置为eth0网口,而不要配置tun0,如果只是访问内部,不代理上网。如果要代理上网,需要使用eth0。
COMMIT
# Completed on Tue Jul 4 16:21:23 2023
# Generated by iptables-save v1.4.21 on Tue Jul 4 16:21:23 2023
*filter
:INPUT ACCEPT [39:2535]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [27:7205]
-A INPUT -p tcp -m tcp --dport 11940 -j ACCEPT
-A INPUT -p udp -m udp --dport 11940 -j ACCEPT
COMMIT
# Completed on Tue Jul 4 16:21:23 2023

3、客户端配置。

client
proto udp
dev tun
remote 47.254.124.4 11940
ca ca.crt
cert test.crt

auth-user-pass #密码验证需要
key test.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings
redirect-gateway def1

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年7月5日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号