CentOS7.4安装OpenVPN

news2024/11/22 15:18:31

系统环境

[root@vpn ~]# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

一. 准备工作

[root@vpn ~]# yum -y install openssl-devel openssl pam pam-devel lzo lzo-devel pkcs11-helper pkcs11-helper-devel

二. 安装OpenVPN服务

1. 下载openvpn源码包

[root@vpn ~]# wget http://oss.aliyuncs.com/aliyunecs/openvpn-2.2.2.tar.gz

2. 使用 rpmbuild 将源码包编译成rpm包来进行安装

[root@vpn ~]# rpmbuild -tb openvpn-2.2.2.tar.gz

如果没有rpmbuild命令:yum install -y rpm-build

执行这条命令以后就会正常开始编译了,编译完成以后会在 /root/rpmbuild/RPMS/x86_64 目录下生成 openvpn-2.2.2-1.x86_64.rpm 安装包。

3. 安装rpm包

[root@vpn ~]# rpm -ivh openvpn-2.2.2-1.x86_64.rpm 

三. 证书生成

1. 初始化PKI

[root@vpn ~]# cd /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0

[root@vpn 2.0]# cp vars vars.bak

[root@vpn 2.0]# vim vars #在最后修改

export KEY_COUNTRY=CN

export KEY_PROVINCE=BJ

export KEY_CITY=BJ

export KEY_ORG="bj-openvpn"

export KEY_EMAIL="xx@gmail.com"

2. 先清除key下的所有key

[root@vpn 2.0]#ln -s openssl-1.0.0.cnf openssl.cnf

[root@vpn 2.0]#source ./vars

[root@vpn 2.0]#./clean-all

3. 生成ca私钥和证书

[root@vpn 2.0]#./build-ca

一直默认回车即可

4. 为 vpn服务器签发证书

[root@vpn 2.0]#./build-key-server server //server为自定义证书名,为了下面配置方便,这里就用server

一直回车,Common Name处填入自定义的证书名字,再回车,最后会有两次交互,输入y

5. 为 vpn客户端签发证书

[root@vpn 2.0]#./build-key client //client自定义证书名

一直回车,Common Name处填入自定义的证书名字,再回车,最后会有两次交互,输入y

6. 创建密钥协商文件 迪菲·赫尔曼密钥

[root@vpn 2.0]#./build-dh //生成dh参数文件 dh1024.pem,高版本是dh2048.pem

四. 配置VPN

1. 先查看上面所生成的秘钥

[root@vpn 2.0]# ll keys/

01.pem  ca.key     server.key       client.key  index.txt.attr      serial

02.pem  server.crt  client.crt  dh1024.pem      index.txt.attr.old  serial.old

ca.crt  server.csr  client.csr  index.txt       index.txt.old

将key拷贝到/etc/openvpn中

[root@vpn 2.0]# cp keys/* /etc/openvpn

2. server.conf  配置

[root@svn 2.0]# cp /usr/share/doc/openvpn-2.2.2/sample-config-files/server.conf /etc/openvpn

[root@svn 2.0]# vim /etc/openvpn/server.conf

local 0.0.0.0      #专有网络填私网ip,经典网络填公网ip

port 9094

proto tcp

dev tun

;username-as-common-name #等会用户密码验证开启

;auth-user-pass-verify /etc/openvpn/check.sh via-env #检查脚本

ca ca.crt

cert server.crt #上面自定义所生成的证书,如果server.conf与证书不在同一目录要注意路径

key server.key

dh dh1024.pem #dh参数文件,注意是dh1024还是dh2048

server 10.8.0.0 255.255.255.0  #给vpn-client分配的子网,防火墙要设置从内网通子网

ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"

push "route 172.18.0.0 255.255.255.0"    #内网网段

push "dhcp-option DNS 119.29.29.29"

push "dhcp-option DNS 114.114.114.114"

client-to-client

keepalive 10 120

comp-lzo     #压缩

user nobody

group nobody

persist-key

persist-tun

status openvpn-status.log

log         openvpn.log

verb 3

3. 路由转发

[root@vpn ~]# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

[root@vpn ~]# sysctl -p

4. 防火墙设置

CentOS7是firewalld,先关闭firewalld再安装iptables

systemctl stop firewalld

systemctl disable firewalld

systemctl status firewalld

安装iptables

yum install iptables-services

service start iptables

设置iptables规则

iptables -A INPUT -p tcp -m tcp --dport 9094 -m comment --comment openvpn -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE    #内网网段

iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -j SNAT --to-source 172.18.xxx.xxx     #内网ip

service iptables save

如果设置iptables规则后没有在/etc/sysconfig/iptables中显示,则直接使用重定向>生成到/etc/sysconfig/iptables配置文件中,再保存。

5. 启动vpn

[root@vpn ~]# systemctl restart openvpn

[root@vpn ~]# /sbin/chkconfig openvpn on

[root@vpn ~]# ps -ef | grep openvpn

[root@vpn ~]# netstat -antp | grep 9094

启动失败则查看日记:tail -f /etc/openvpn/openvpn.log

五. Windows客户端配置

下载地址:

https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.2-I601.exe

将vpn服务器上的ca.crt、client.key、client.crt 、client.csr证书拷贝到windows客户端安装的C:\Program Files\OpenVPN\config目录中,这是默认安装的路径,若自定义则拷贝到对应目录,

再到C:\Program Files\OpenVPN\sample-config目录拷贝client.conf到C:\Program Files\OpenVPN\config目录中,配置如下:

client

dev tun

proto tcp

remote 47.xxx.xxx.xxx 9094 #公网ip

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

ns-cert-type server

comp-lzo

verb 3

配置好之后以管理员方式运行,再点击图标连接,也可直接查看日记

连接成功后会多生成一块虚拟网卡

登陆ip.cn查看连接ip

六. Linux客户端配置

linux端vpn客户端连通后会获取vpn的子网IP,这时就之前的服务器公网IP就不通了,注意使用

先登录到server端给client签发证书,也可以使用之前签发客户端的证书

[root@vpn ~]# cd /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0

[root@vpn 2.0]# ./build-key linux-client //自定义名字

Common Name (eg, your name or your server's hostname) []:linux-client

客户端安装openvpn,跟上面服务端安装一样,这里就不重复了

从服务器端拷贝生产的证书到客户端的/etc/openvpn下,拷贝如下文件

scp  ca.crt linux-client.crt  linux-client.key  root@ip:/etc/openvpn

编辑客户端文件

vim /etc/openvpn/client.conf

client

dev tun

proto udp

remote 47.xxx.xxx.xxx 9094     #VPNserver 地址,公网地址

nobind

user nobody

group nobody

persist-key

persist-tun

ca ca.crt

cert linux-client.crt

key  linux-client.key

;auth-user-pass     #账号密码验证要开启

comp-lzo

verb 3

mute 20

systemctl restart openvpn

或 openvpn --daemon --config /etc/openvpn/client.ovpn --cd /etc/openvpn

测试是否可以ping 通内网的机器 ping xxx.xxx.xxx.xxx

如果是虚拟机内网搭建的vpn可以测试,我这里是ecs搭建的,连接上来后获取了vpn分配的子网ip,立即掉线了,到管理台重启服务器才能继续操作。

阿里云工单给出的解决办法是:

通过控制台登陆客户端,删除两条路由

0.0.0.0 mask 128.0.0.0 下一跳VPN网关

128.0.0.0 mask 128.0.0.0 下一跳VPN网关

七. 实现账号密码验证

服务端server.conf添加如下两行:

username-as-common-name #等会用户密码验证开启

auth-user-pass-verify /etc/openvpn/check.sh via-env #检查脚本

check.sh 脚本主要是用来检测用户密码

[root@svn openvpn]# cat check.sh

#!/bin/sh

###########################################################

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

用户密码文件输入用户为test,密码为test123;用户密码文件格式如下,多个用户依次添加即可

[root@svn openvpn]# cat openvpnfile

test test123

修改server.conf后重启openvpn

systemctl restart openvpn

客户端client.conf文件添加如下一行:

auth-user-pass #账号密码验证要开启

重启openvpn,输入openvpnfile中设置的账号密码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/575556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络 - 第六章】链路层

目录 一、概述 1、数据链路层提供的服务? 二、差错检测 1、奇偶校验 2、循环冗余校验CRC 三、多路访问链路和协议 1、概述 (1)多路访问协议 2、信道划分协议 ① 频分多路复用FDM ② 时分多路复用TDM ③ 波分多路复用WDM ④ 码分…

更好看的国产蓝牙耳机,音质也没问题,哈氪零度青春版体验

夏天躲在空调房里戴着耳机听音乐、玩游戏是很多人的日常,这两年国产耳机做得越来越好了,设计也很有新意,像是我现在用的这款哈氪零度青春版,就采用了一种冰封造型设计,视觉效果很新颖,看起来很有立体感&…

【一个简单的前后端交互页面】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 客户端与服务器之间的通信流程 理解当前案例…

chatgpt赋能python:Python文件拆分技巧详解

Python 文件拆分技巧详解 随着数据量的不断增大,我们经常需要处理非常大的数据文件,这时候就需要用到文件拆分技巧。在Python中,文件拆分可以帮助我们提高数据处理的效率,这是一个非常实用的技巧。在本篇文章中,我们将…

奇巴布Feed流性能优化

01 项目背景 “爱奇艺奇巴布”是爱奇艺为0-8岁孩子和家长定制化设计的寓教于乐平台,为儿童量身打造精致的观看体验,精彩内容解锁寓教于乐新方式。为儿童提供优质动画内容的同时,我们更关注APP用户体验。在产品交互设计上我们立足儿童视角&…

抖音SEO矩阵系统开发分享及搭建流程

目录 产品功能亮点 产品介绍及开发背景 开发要求及实现流程 产品功能亮点 1. 支持多账号多平台一键 授权管理 2.支持矩阵视频批量剪辑,批量发布 3. 多平台关键词布局,提升企业及产品曝光 4. 评论区关键词自动回复,意向线索智能挖掘 5…

RTOS专栏(一) —— rt-thread简单介绍和qemu使用

本期主题: 简单介绍rt-thread介绍qemu和rt-thread怎么配合使用qemu的简单例子 rt-thread & qemu 1.rt-thread介绍2.qemu介绍3.搭建rt-thread和qemu开发环境4.简单例子 1.rt-thread介绍 RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统&#xff0…

《操作系统》期末主观题梳理

操作系统简答题 文章目录 操作系统简答题第一章第二章第三章第四章第五章第六章第七章第八章第九章 第一章 在计算机系统上配置OS(operating system, 操作系统)的目标是什么?作用主要表现在哪几个方面? 在计算机系统上配置OS, 主要目标是实现:方便性、有效性、可…

Error: Flash Download failed - Target DLL has been cancelled

文章目录 背景参考 背景 在使用keilv5进行STM32开发时,配置用JLink进行文件烧录,出现如下错误: 查阅资料,是因为Keil未识别烧录工具,需要进行下面的操作: 1.打开工程配置窗口,点开Debug选项卡…

并查集专题

⭐️前言⭐️ 本篇文章主要介绍与并查集相关的题目。 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码及博主…

阿里「通义千问」内测详细使用体验

名人说:一花独放不是春,百花齐放花满园。——《增广贤文》 作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、简要介绍二、分类问题测试0️⃣自我介绍1️⃣生成内容2️⃣回答问题3️⃣对话协…

springboot+vue大学生租房系统(java项目源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的大学生租房系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌…

太稳了,支付系统就该这么设计

支付中心系统对内为各个业务线提供统一的支付、退款等服务,对外对接三方支付或银行服务实现资金的流转。如下图: 大部分公司基本都是这样的架构,主要有以下几方面的优点: 形成统一支付服务,降低业务线接入成本及重复研…

数据结构-树,森连,二叉树之间的转换

树》二叉树 1.给兄弟加线 2.给出长子外的孩子去线 3.层次调整 (整体向左偏移45) eg: 1.给兄弟加线: 2.给处长紫外的孩子去线 3.层次调整,整体向左偏移45 (由兄弟转化来的孩子都是右节点&#xff0c…

DJ6-5 目录管理

目录 6.5.1 文件控制块和索引结点 1、文件控制块 FCB 2、索引节点 6.5.2 简单文件目录 1、单级目录结构 2、二级目录结构 3、树形目录结构 6.5.3 目录查询技术 1、线性检索法 2、Hash 方法 文件目录:是指由文件说明索引组成的用于文件检索的特殊文件…

chatgpt赋能python:Python文件复制到指定文件夹——实现简单又高效的文件操作

Python 文件复制到指定文件夹——实现简单又高效的文件操作 如今,人们对于数据的需求越来越多,因此在编程过程中,对于文件的操作也变得越来越重要。而Python作为一种高效而简洁的编程语言,其文件操作也是十分出色的。本文将会带领…

C/C++ ---- 内存管理

目录 C/C内存分布 常见区域介绍 经典习题(读代码回答问题) 选择题 填空题 C语言内存管理方式 malloc/free calloc realloc C内存管理方式 new和delete操作内置类型 new和delete操作自定义类型 operator new和operator delete函数 new和dele…

Linux环境变量总结

Linux是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组变量所定义,这组变量被称为环境变量。用户可以对自己的环境变量进行修改以达到对环境的要求。 设置环境变量的方法 对所有用户生效的永久性变量 这类变…

K8s进阶6——pod安全上下文、Linux Capabilities、OPA Gatekeeper、gvisor

文章目录 一、Pod安全上下文1.1 配置参数1.2 案例11.2.1 dockerfile方式1.2.2 pod安全上下文方式 1.3 案例21.4 Linux Capabilities方案案例1案例2 二、pod安全策略2.1 PSP(已废弃)2.1.1 安全策略限制维度 2.2 OPA Gatekeeper方案2.2.1 安装Gatekeeper2.…

百度搜索迎来奇点 大模型掀起代际变革

每一轮技术革命掀起的浪潮,大部多数人还没来得及思考或者布局,已经消失于海浪中。机会是给有准备的人的,要发现新兴技术的亮点,并立足自身去积极拥抱它,最后转化为自身前进的动力,跨越周期,迎来…