Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[Linux虚拟机]OpenVPN安装和基本使用方法,帮你快速理解公司网络

[Linux虚拟机]OpenVPN安装和基本使用方法,帮你快速理解公司网络

作者头像
李鹏华
发布于 2024-05-24 06:31:31
发布于 2024-05-24 06:31:31
1.6K00
代码可运行
举报
文章被收录于专栏:网络信息安全网络信息安全
运行总次数:0
代码可运行
什么是OpenVPN

VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI。 [1]

它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。 [1]

OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现,由于SSL协议在其它的词条中介绍的比较清楚了,这里重点对虚拟网卡及其在OpenVpn的中的工作机理进行介绍: [1]

虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。 [1]

在OpenVpn中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。 [1]

openvpn和pptp的区别

PPTP点对点隧道协议(PPTP)是一种实现虚拟专用网络的方法。 PPTP使用用于封装PPP数据包的TCP及GRE隧道控制通道。 OpenVPNOpenVPN是一免费开源软件,以路由器或桥接配置和远程访问设备方式实现虚拟专用网络(VPN)创建安全的点对点或站对站连接的解决方案。它使用SSL / TLS安全加密,具有穿越网络地址转换(NATs)和防火墙的功能。 在PPTP和OpenVPN二者之间做出选择的一个重要考虑因素,也是我们无法控制的因素,就是有时互联网服务供应商会阻止PPTP连接。次情况下我们无计可施,只能选择使用OpenVPN。 PPTP具有一些独特优势,但此刻用OpenVPN会是不错的选择。 PPTP可以应用到几乎所有的操作系统软件,无需安装任何软件。它也兼容许多移动设备,如iphone,ipad和Windows移动,安装简易。相比之下,OpenVPN的安装比PPTP要复杂一点,但只要按照正确的指示安装则无太大困难。请注意OpenVPN不兼容移动设备。 PPTP加密技术使用密码作为密钥,它的数据流载有可获取的混编密码。如果中间有人拦截到了数据流并且破译了密码(尽管可能但很难),那么他就可以破译你的信息。然而OpenVPN使用非常强大的加密(Blowfish)技术。即使有人拦截你的数据流,他们也无计可施。这使得OpenVPN比PPTP安全得多。 选择如果你希望得到高安全性以及更加关注数据安全传输问题,那么你应该使用OpenVPN。如果您为了简便或者想在移动设备上使用VPN那么PPTP适合你。还有其他协议,例如L2P或IPSec,但他们在用户友好或成本上没有优势。

安装vpn
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update
sudo apt-get install openvpn easy-rsa
安装CA

建立CA目录,OpenVPN是一个TLS/SSLVPN,这意味着它需要使用证书来在客户端和服务器之间加密数据。为了发布可信的证书,我需要建立我们自己的简单CA

复制easy-rsa临时目录到home目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
vim vars

系统默认如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exportKEY_COUNTRY="US"
exportKEY_PROVINCE="CA"
exportKEY_CITY="SanFrancisco"
exportKEY_ORG="Fort-Funston"
exportKEY_EMAIL="me@myhost.mydomain"
exportKEY_OU="MyOrganizationalUnit"

我的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export KEY_COUNTRY="CN"
export KEY_PROVINCE="SX"
export KEY_CITY="TaiYuan"
export KEY_ORG="SYSU"
export KEY_EMAIL="bjernsen@163.com"
export KEY_OU="SDCS"

# X509 Subject Field
export KEY_NAME="server"

source FileName 作用:在当前bash环境下读取并执行FileName中的命令。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~/openvpn-ca
source vars

提示如下则正确 NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys

但是我的报错如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**************************************************************
  No /home/ubuntu/openvpn-ca/openssl.cnf file could be found
  Further invocations will fail
**************************************************************
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/ubuntu/openvpn-ca/keys

输入在opencpn-ca目录下,ls指令我们会看到很多个openssl的conf文件,我们将他们更名为openssl.conf就可以了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp ~/openvpn-ca/openssl-1.0.0.cnf  ~/openvpn-ca/openssl.cnf

然后再输入source vars借口

还是在openvpn-ca目录下 ,构建ca

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./clean-all
./build-ca

一直按回车确认即可

创建服务器证书,密钥和加密文档

接下来,我们将生成服务器证书和密钥对,以及加密过程中使用的一些其他文档。首先生成 OpenVPN 服务器证书和密钥对。我们可以通过输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./build-key-server server

接下来,我们将生成一些其他项目。 我们可以通过键入生成一个强大的 Diffie-Hellman 密钥,以便在密钥交换期间使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./build-dh

之后,我们可以生成 HMAC 签名以增强服务器的 TLS 完整性验证功能,这步完成之后会生成一个ta.key在~/openvpn-ca/keys文件夹下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openvpn --genkey --secret keys/ta.key
生成客户端证书和密钥对

在 openvpn 中,这种配置方法是每一个登陆的 VPN 客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接(如果有两个机器安装相同证书,同时拨服务器,都能拨上,但是只有第一个拨上的才能连通网络)。所以需要建立许多份证书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~/openvpn-casource vars./build-key client1
配置 OpenVPN 服务

开始之前,把我们需要的相关文档复制到/etc/openvpn这个配置目录中去,即把~/openvpn-ca/keys目录下面的 ca.crt,ca.key,server.crt,server.key,HMAC 签名以及 Diffie-Hellman 文档复制到/etc/openvpn 这个目录下面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~/openvpn-ca/keyssudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

然后从 OpenVPN 自带的配置模板中复制配置文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/cd /etc/openvpn/sudo gzip -d server.conf.gz

接下来修改配置文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo vim /etc/openvpn/server.conf

​ 然后找到tls-auth ta.key 0,在下方增加一个 key-direction 参数,设置其参数值为 0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tls-auth ta.key 0key-direction 0

然后找到cipher AES-256-CBC,在下方增加auth SHA256

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user nobodygroup nobody
调整服务的网络配置

允许 IP 转发 首先,我们需要让我们的服务器来转发流量,这是我们需要 VPN 服务器来提供的最基本的功能。我们可以通过修改/etc/sysctl.conf 文档来调整网络设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo vim /etc/sysctl.conf

在这个文档里面,找到net.ipv4.ip_forward,去除这一行之前的”#” 来解注释这个参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
net.ipv4.ip_forward=1

然后保存退出 为了读取 sysctl.conf 文档并且让调整后设置对当前系统的 session 生效,键入如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo sysctl -p

然后保存退出 为了读取 sysctl.conf 文档并且让调整后设置对当前系统的 session 生效,键入如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo sysctl -p
开启 vpn 服务
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo service openvpn start

查看 vpn 状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo service openvpn status
配置防火墙

查看网卡名,默认eth0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ip route | grep default

可以看到终端中输出了一行内容,我们需要的口号应该是紧跟在“开发”后面的字符串

例如,我的输出如下,则我的公共网络接口为 enp2s0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 $ ip route | grep default default via 172.18.159.254 dev enp2s0  proto static  metric 100

知道接口后,我们就可以进行具体的 UFW 规则配置(为 NAT 表设置POSTROUTING 默认规则),从而为来自 VPN 的任何流量设置伪装连接。

以root权限打开/etc/ufw/before.rules文件,在最开头注释后面 添加如下部分,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# NAT table rules*nat:POSTROUTING ACCEPT [0:0]# Allow traffic from OpenVPN client to eth0(changeto the interface you discovered!)-A POSTROUTING -s 10.8.0.0/8 -o eth0 -jMASQUERADE #这里为配置文件设置的虚拟网段COMMIT# END OPENVPN RULES

配置防火墙默认允许转发包,DROP改成ACCEPT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DEFAULT_FORWARD_POLICY="ACCEPT"

调整防火墙本身,以允许流量到OpenVPN,如果更改了配置文件中端口号,这里需要对应

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ufw allow 1193/udpufw allow OpenSSH

重启防火墙,到这里我们的服务器可以正确地处理OpenVPN流量了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ufw disableufw enable
配置客户端

config文件夹中应该有5个东西,ca.crt,client.crt,client1.ket,ta.key以及配置文件cilent.ovpn

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
############################################### Sample client-side OpenVPN 2.0 config file ## for connecting to multi-client server.     ##                                            ## This configuration can be used by multiple ## clients, however each client should have   ## its own cert and key files.                ##                                            ## On Windows, you might want to rename this  ## file so it has a .ovpn extension           ################################################ Specify that we are a client and that we# will be pulling certain config file directives# from the server.client# Use the same setting as you are using on# the server.# On most systems, the VPN will not function# unless you partially or fully disable# the firewall for the TUN/TAP interface.;dev tapdev tun# Windows needs the TAP-Win32 adapter name# from the Network Connections panel# if you have more than one.  On XP SP2,# you may need to disable the firewall# for the TAP adapter.;dev-node MyTap# Are we connecting to a TCP or# UDP server?  Use the same setting as# on the server.;proto tcpproto udp# The hostname/IP and port of the server.# You can have multiple remote entries# to load balance between the servers.remote 81.70.205.40 1194;remote my-server-1 1194;remote my-server-2 1194# Choose a random host from the remote# list for load-balancing.  Otherwise# try hosts in the order specified.;remote-random# Keep trying indefinitely to resolve the# host name of the OpenVPN server.  Very useful# on machines which are not permanently connected# to the internet such as laptops.resolv-retry infinite# Most clients don't need to bind to# a specific local port number.nobind# Downgrade privileges after initialization (non-Windows only)user nobodygroup nobody# Try to preserve some state across restarts.persist-keypersist-tun# If you are connecting through an# HTTP proxy to reach the actual OpenVPN# server, put the proxy server/IP and# port number here.  See the man page# if your proxy server requires# authentication.;http-proxy-retry # retry on connection failures;http-proxy [proxy server] [proxy port #]# Wireless networks often produce a lot# of duplicate packets.  Set this flag# to silence duplicate packet warnings.;mute-replay-warnings# SSL/TLS parms.# See the server config file for more# description.  It's best to use# a separate .crt/.key file pair# for each client.  A single ca# file can be used for all clients.ca ca.crtcert client1.crtkey client1.key# Verify server certificate by checking that the# certicate has the correct key usage set.# This is an important precaution to protect against# a potential attack discussed here:#  http://openvpn.net/howto.html#mitm## To use this feature, you will need to generate# your server certificates with the keyUsage set to#   digitalSignature, keyEncipherment# and the extendedKeyUsage to#   serverAuth# EasyRSA can do this for you.remote-cert-tls server# If a tls-auth key is used on the server# then every client must also have the key.tls-auth ta.key 1key-direction 1# Select a cryptographic cipher.# If the cipher option is used on the server# then you must also specify it here.;cipher xcipher AES-256-CBCauth SHA256# Enable compression on the VPN link.# Don't enable this unless it is also# enabled in the server config file.comp-lzo# Set log file verbosity.verb 3# Silence repeating messages;mute 20

用到的链接:

https://james-yip.github.io/2017/11/23/construct-VPN/

https://www.dazhuanlan.com/wuxinxiangshan/topics/1100854

https://cloud.tencent.com/developer/article/1840491

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CentOS 7 部署 OpenVPN
环境: 外网IP:139.198.15.121 内网IP:10.180.27.8
陳斯托洛夫斯記
2022/10/27
8.1K1
CentOS 7 部署 OpenVPN
企业级openvpn搭建
easy-rsa 下载地址:https://codeload.github.com/OpenVPN/easy-rsa-old/zip/master
章工运维
2023/05/19
5.5K0
ubuntu部署VPN中openvpn(上)
如果在一个非信任网络下比如旅社或者咖啡店的WiFi网络下,想要通过你的智能手机或者笔记本电脑安全地访问互联网,那么VPN可以满足你的要求。VPN(VirtualPrivate Network)允许你私有地(privately)安全地(securely)穿过非信任的网络,就好像为你建立了一条专属网络。你的数据流量到达VPN服务器之后,VPN服务器继续将你的网络流量送达目的地。
陈不成i
2021/06/30
15.6K0
CentOS 搭建 OpenVPN 服务,一次性成功!收藏了
本篇文章包含OpenVPN应用场景,OpenVPN服务端搭建,OpenVPN客户端搭建(windows+linux),OpenVPN密码认证,手把手教大家搭建OpenVPN!
民工哥
2023/08/22
33.1K2
CentOS 搭建 OpenVPN 服务,一次性成功!收藏了
Centos7安装与配置OpenVPN服务器
安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA
用户7639835
2021/09/01
17.9K4
[经验分享] 腾讯云ubuntu搭建openvpn
./build-dh 命令完成后,我们会/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys 得到 ca.crt、ca.key、dh1024.pem 等文件。其中,ca.key 的安全非常重要,OpenVPN 并不需要这个文件,所以可以存放在其他比较安全的地方,否则,OpenVPN 的通信将不再安全。 cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/server.crt /etc/openvpn/ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/server.key /etc/openvpn/ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ca.crt /etc/openvpn/ 生成服务端证书 ./build-key-server server
知识与交流
2023/03/25
12.5K0
[经验分享] 腾讯云ubuntu搭建openvpn
使用Lighthouse搭建OpenVPN轻松访问内网服务
OpenVPN是一种功能强大的开源虚拟私有网络(VPN)解决方案,可以在多种应用场景下使用。以下是几个常见的OpenVPN应用场景:
小宇-xiaoyu
2023/11/28
3.1K0
OpenVPN原理及部署使用
简介 VPN技术通过密钥交换、封装、认证、加密手段在公共网络上建立起私密的隧道,保障传输数据的完整性、私密性和有效性。OpenVPN是近年来新出现的开放源码项目,实现了SSL VPN的一种解决方案。 传统SSL VPN通过端口代理的方法实现,代理服务器根据应用协议的类型(如http,telnet等)做相应的端口代理,客户端与代理服务器之间建立SSL安全连接,客户端与应用服务器之间的所有数据传输通过代理服务器转发。这种实现方式烦琐,应用范围也比较窄:仅适用于用TCP固定端口进行通信的应用系统,且对每个需要
iginkgo18
2020/09/27
48.6K1
OpenVPN原理及部署使用
OpenV**集成LDAP踩坑记
openv** 版本:2.4.9-1.el7 ease-rsa 版本:3.0.7-1.el7 openv**-auth-ldap 版本:2.0.3-17.el7
cuijianzhe
2022/06/14
1.2K1
OpenV**集成LDAP踩坑记
OpenVPN server端配置文件详细说明
本文将介绍如何配置OpenVPN服务器端的配置文件。在Windows系统中,该配置文件一般叫做server.ovpn;在Linux/BSD系统中,该配置文件一般叫做server.conf。虽然配置文件名称不同,但其中的配置内容与配置方法却是相同的。
用户2135432
2023/10/21
11.6K0
基于 WireGuard 和 OpenVPN 的混合云基础架构建设
可以找一台能联网的 centos7 测试一下这个端口,如果没有 nc 工具可以yum install nc安装下。:
米开朗基杨
2021/04/23
8.1K1
基于 WireGuard 和 OpenVPN 的混合云基础架构建设
centos7部署OpenVpn
VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI。
Lucifer三思而后行
2021/08/17
9.6K1
centos7部署OpenVpn
ubuntu部署VPN中openvpn(下)
1.创建客户端目录,存储客户端文件 mkdir -p ~/client-configs/files
陈不成i
2021/06/30
4.6K0
运维实战技能Get---OpenV**搭建.
作为运维人员经常会遇到各种故障,那我们就需要远程解决,为了保障服务器的安全性,此时我们需要连接内网,然后连接到跳板机,openvpn是我们常用解决方案!下面我们介绍一下在云服务器搭建openvpn方法!
用户5766185
2019/07/08
4.7K1
运维实战技能Get---OpenV**搭建.
openvpn安装及证书制作
1) 安装epel 仓库源 wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm rpm -Uvh epel-release-6-8.noarch.rpm
一朵灼灼华
2022/08/05
8.3K0
openvpn安装及证书制作
centos7上搭建openv**centos7 上搭建openv**
基于内外网隔离 网络审计 又因为最近疫情反复,很多小公司没有做好内外网网络隔离,也不能够远程办公。本文基于开源免费的openv**为大家提供一个参考。
怀朔
2022/05/29
9110
VPN技术指南:OpenVPN和IPsec的配置与管理
这里推荐一篇实用的文章:《小型项目架构设计:提升可维护性与扩展性的实用原则》,作者:【不惑】。
Echo_Wish
2024/12/03
4490
VPN技术指南:OpenVPN和IPsec的配置与管理
open魏屁嗯-安装部署
1、场景,由于同事在家需要远程支撑工作,但是公司的服务只对公司的公网宽带开了白名单,所以同志们在家无法访问,需要拨号到公司的公网地址才可以访问。
@凌晨
2023/03/11
1.6K0
open魏屁嗯-安装部署
OpenWRT搭建OpenVPN服务器
By HKL, on Thursday 2019-11-28 23:21, tagged: 🏷️Networking 🏷️Operating
hiplon
2023/10/18
17.2K1
OpenWRT搭建OpenVPN服务器
VPN技术指南:OpenVPN和IPsec的配置与管理
在现代网络安全中,虚拟专用网络(VPN)是保护数据传输安全、实现远程访问的关键技术。OpenVPN和IPsec是两种广泛应用的VPN解决方案,各具优势。本文将详细介绍如何配置和管理OpenVPN和IPsec,并提供相关代码和示例,帮助读者理解和应用这些技术。
Echo_Wish
2024/12/04
8570
相关推荐
CentOS 7 部署 OpenVPN
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验