使用openvpn docker及frp docker工具构建虚拟专业网络(V-P-N)

使用openvpn docker及frp docker工具构建虚拟专业网络(V-P-N)

借助Docker和OpenVPN技术,您可以在短时间内设置并运行VPN服务器,并保证您的服务器安全。

运行环境

Ubuntu 16.04 TLS
Docker version 19.03.8, build afacb8b7f0
OpenVPN Android Client 0.7.43

创建OpenVPN Docker容器

  1. 安装Docker:如果您的系统上没有安装Docker,请先按照适用于您的操作系统的指南安装Docker。在Ubuntu上,可以使用以下命令安装Docker:
sudo apt update
sudo apt install docker.io
  1. 获取OpenVPN Docker镜像:使用以下命令从Docker Hub上获取OpenVPN镜像:
sudo docker pull kylemanna/openvpn
  1. 创建OpenVPN配置目录:创建一个目录用于保存OpenVPN配置文件和证书:
OVPN_DATA="ovpn-data-test"
docker volume create --name $OVPN_DATA


执行上述命令后,会在docker默认数据及配置保存目录/var/lib/docker/volumes下创建openvpn的配置目录ovpn-data-test

  1. 初始化OpenVPN配置:使用以下命令初始化OpenVPN配置和证书。替换YourPublicIP.com为您希望访问OpenVPN服务器的公共IP地址或域名。
sudo docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://YourPublicIP.com

如果你是本地创建VPN server,那么这里YourPublicIP.com 应该填写你本地IP地址。

生成安全证书并运行OpenVPN server

  1. 生成OpenVPN服务器证书:使用以下命令生成OpenVPN服务器的证书和密钥。
sudo docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

输入"yes",然后按Enter键,如下所示,以启动OpenVPN PKI系统。
Initiating the OpenVPN PKI system
输入CA证书密码,或者输入Enter
Setting a new CA certificate password
为CA证书输入一个名称,或者输入Enter
Naming the new CA certificate
输入在第2步设置的CA密码,以检查请求是否匹配签名。
Checking \the request matches the signature
再次输入密码生成ca私钥
Generate a private key by entering the CA passphrase

2.使用以下命令启动OpenVPN服务器:

sudo docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn


--cap-add=NET_ADMIN参数通过修改Docker默认不授予的网络接口来应用额外的Linux能力。

生成OpenVPN client证书

  1. 生成客户端配置文件:使用以下命令生成OpenVPN客户端配置文件。将CLIENTAPP替换为您希望的客户端名称。
sudo docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTAPP nopass

sudo docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTAPP > CLIENTAPP.ovpn

将生成的CLIENTAPP.ovpn客户端证书拷贝到你的Android Client。

现在,您已经成功安装了OpenVPN服务器,并生成了一个客户端配置文件。将CLIENTAPP.ovpn文件发送给您的客户端,并使用OpenVPN客户端连接到您的OpenVPN服务器即可。

成功连接效果图

VPN server内网穿透

如果openvpn server是在局域网内部署,则还需要使用frp工具进行穿透,关于frp内网穿透内容参考如下:

https://blog.csdn.net/u011897062/article/details/131764782

具体到本文中的openvpn frp配置及命令如下:
服务端:frps
frps.init文件不需要修改,需要在启动命令中增加7002端口的映射

客户端: frpc
/opt/frpc.init增加vpn配置

docker运行命令增加1194映射

docker run --restart=always -d   --network host   -v /opt/frpc.ini:/etc/frp/frpc.ini   -p 80:80/tcp  -p 1194:1194/udp  --name frpc   snowdreamtech/frpc

CLIENTAPP.ovpnremote 0.0.0.0 7002 udp 需要修改为remote PublicIP.com 7002 udp

OpenVPN 使用Web UI管理

为了方便OpenVPN server的管理,官方提供了Web UI管理页面

  • 下载openvpn-as docker
    我们仍然使用docker来安装,命令如下:
docker pull linuxserver/openvpn-as

  • 创建docker容器
docker create --name=openvpn-as --restart=always -v /home/docker/openvpn-as/config:/config -e INTERFACE=eth0 -e PGID=1001 -e PUID=1001 -e TZ=Africa/Nairobi --net=host --privileged linuxserver/openvpn-as

Creating a new Docker container (openvpn-as)

  • 启动openvpn-as容器
docker start openvpn-as
  • 登录Web UI
    使用https://YourIP:943/admin登录admin管理页面

注意: 默认账号密码为adminpassword
openvpn web ui
登录 openvpn-as后效果如下:
Accessing the OpenVPN Access Server dashboard

配置DNS以获得更快和更安全的连接

目前,您的OpenVPN Access Server已经正确工作。但为了提高VPN服务器的性能,您需要配置DNS。

要配置DNS,您需要访问OpenVPN服务器的Web界面,并使用Google或您喜欢的DNS地址更新DNS设置。Google提供了最快速的DNS服务器,您将在您的OpenVPN Access Server中使用它们。

  1. 在OpenVPN Access Server仪表板的CONFIGURATION选项卡下,点击左侧面板中的VPN设置。

滚动到DNS设置部分,启用“Have clients use Specific DNS servers”选项,如下所示。
Enabling custom OpenVPN DNS addresses

  1. 接下来,更新主DNS服务器(8.8.8.8)和次DNS服务器(8.8.8.4)为Google DNS地址,然后点击“Save Settings”保存更改。

Setting custom OpenVPN DNS addresses

  1. 保存更改后,点击“Update Running Server”重新启动服务器,以使更改生效。

Updating the server settings

  1. 现在,在您的Linux机器上导航到OpenVPN Access Server(例如https://YourIP:943/admin)。将YourIP替换为您服务器的IP地址。如果配置正确,您将看到如下所示的相同页面。

使用默认凭据(用户名:admin,密码:password)登录。
Logging in to OpenVPN Access Server

  1. 点击任何平台图标下载客户端应用程序,然后点击“Yourself (user-locked profile)”下载客户端.ovpn文件。
    Downloading the .ovpn config file and client app

  2. 最后,启动您下载的OpenVPN客户端,并像在“使用证书保护OpenVPN客户端”教程的最后一步中那样导入.ovpn文件。

Connecting to the OpenVPN server

结论

托管您的VPN服务器绝不应该是一个复杂的任务,更不用说保护服务器连接了。幸运的是,OpenVPN Docker就在眼前,拯救了一切。在本教程中,您已经学会了在Ubuntu上使用Docker安装、设置和配置OpenVPN。您还了解了如何通过OpenVPN CA和客户端证书保护Docker容器中的OpenVPN访问。

除了通过命令行界面访问OpenVPN服务器外,您现在还可以通过OpenVPN Access Server的Web界面进行可视化操作。通过为OpenVPN客户端应用程序生成客户端配置文件,您已经实现了快速部署VPN。

Github

https://github.com/kylemanna/docker-openvpn

参考

(Fundamentals of Running OpenVPN in Docker on Ubuntu) https://adamtheautomator.com/openvpn-in-docker/

(frp+openvpn+docker实现内网穿透)
https://www.jianshu.com/p/8bffa1046008

https://medium.com/@gurayy/set-up-a-vpn-server-with-docker-in-5-minutes-a66184882c45

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zabbix-server监控mysql数据库及httpd服务、监控apache、监控ftp

目录 一、监控mysql数据库及httpd服务 1、为server.Zabbix.com添加服务模板 2、server.zabbix.com服务端 操作 3、编辑chk_mysql.sh脚本 4、server.zabbix.com测试 二、监控apache 1、获取键值 2、服务器操作 3、zabbix监控web端导入监控模板 4、server.zabbix.com添加…

MediaType的常用类型-GPT问答

MediaType的常用类型-GPT问答 MediaType是一个枚举类,包含了常见的媒体类型。下面是一些常用的MediaType类型: APPLICATION_JSON:JSON格式的数据APPLICATION_XML:XML格式的数据APPLICATION_FORM_URLENCODED:表单格式的…

Baichuan-13B 介绍及微调

文章目录 Baichuan-13B介绍Baichuan-13B特点Baichuan-13B效果Baichuan-13B模型参数 推理和部署模型下载模型推理 微调和部署下载仓库配置环境微调数据微调过程 Baichuan-13B介绍 2023年7月11日,百川智能发布Baichuan-13B! github地址:https:…

【启发式算法】灰狼优化算法【附python实现代码】

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至&#…

【产品经理】小型团队通用工作流程SOP方案

:所谓SOP,即标准作业程序,指将某一事件的标准操作步骤和要求以统一的格式描述出来,用于指导和规范日常的工作。实际执行过程中sop核心是符合本企业并可执行,不流于形式。 一、跨部门工作流程 跨部门流程及职能如下图展…

6.3.5 利用Wireshark进行协议分析(五)----捕获并分析ICMP报文

6.3.5 利用Wireshark进行协议分析(五)----捕获并分析ICMP报文 一、捕获ICMP报文 打开Wireshark,选择网络接口并点击开始按钮。分组列表面板不断刷新抓渠道的数据包,为了过滤出我们所要分析的ICMP报文,我们在过滤框中输…

点大商城V2_2.5.0 全开源版 商家自营+多商户入驻 百度+支付宝+QQ+头条+小程序端+unipp开源前端安装测试教程

播播资源安装点大商城V2_2.5.0 全开源版测试后发现后台总体体验下来比较简洁,营销功能还是挺多该有的都有了,相比上一版优化很多细节。首页和会员中心均支持DIY装修,底部菜单也一样,安装测试中目前未发现BUG,小程序整体…

macOS 怎么安装redis数据库

1 访问redis数据库下载网址 http://download.redis.io/releases/ 访问上述的redis下载的网址,确定你想要的版本 然后下载即可 (我选则的是6.2.6) 然后下载 下载后 把这个文件解压,放在自己想要放在的位置 2 打开终端 输入对应的…

1770_VirtualBox下安装Debian

全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 作为我自己的日常使用,Debian基本上没有出现过。最多是让它运行在某个设备上作为一个服务的平台,因为很多东西我懒得去配置。 Debia…

mysql中的Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests

Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests是什么? mysql服务器维护了很多状态变量(status variables),这些变量提供了其相关操作的信息。 我们可以通过SHOW [GLOBAL | SESSION] STATUS 查看这些变量以及变量值。这些变量有很多&…

Linux--获取最近一次的进程退出码:echo $?

举例&#xff1a; #include <stdio.h> int main() { printf("hello world,pid: %d,ppid: %…

面试题:redis是单线程、StringBuffer是线程安全的

1、说明String 和StringBuffer的区别 类底层/ 可变&#xff1f;线程安全Stringfinal char[] 不可变是StringBuffer char[] 可变 是&#xff08;synchronized方法&#xff09;StringBuilder char[] 可变否 (4条消息) Java基础&#xff1a;String、StringBuffer、…

Linux 漏洞扫描

Linux 漏洞扫描程序会仔细检查基于 Linux 的系统&#xff0c;以减轻潜在的风险和漏洞。 什么是 Linux 漏洞扫描程序 Linux 漏洞扫描程序是一种专门的漏洞扫描工具&#xff0c;旨在识别基于 Linux 的系统中的安全漏洞和弱点,它会扫描配置错误、过时的软件版本和已知漏洞。 为…

TypeScript 学习笔记 环境安装-类型注解-语法细节-类-接口-泛型

文章目录 TypeScript 学习笔记概述TypeScript 开发环境搭建 类型注解类型推断 数据类型JS的7个原始类型Array数组object、Object 和 {}可选属性 ? 和 可选链运算符?. function函数TS类型: any类型 | unknow类型TS类型: void类型TS类型&#xff1a;never类型 &#xff08;几乎…

SQL 删除重复的电子邮箱

196 删除重复的电子邮箱 SQL架构 表: Person -------------------- | Column Name | Type | -------------------- | id | int | | email | varchar | -------------------- id是该表的主键列。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。 删除 所有重复的电…

深入学习 Redis - 深挖经典数据类型之 string

目录 前言 一、string 类型 1.1、操作命令 set / get &#xff08;设置 / 获取&#xff09; mset / mget&#xff08;批量 > 设置 / 获取&#xff09; setnx / setex / psetex &#xff08;设置时指定不同方式&#xff09; incr / incrby / decr / decrby/ incrbyfloat…

深度学习——CNN卷积神经网络

基本概念 概述 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 核心思想 CNN 的核心思想是通过利用局部…

线程池学习(五)线程工厂、线程池工厂

Executors 定义的Executor, ExecutorService, ScheduledExecutorService, ThreadFactory和Callable类的工厂和实用程序方法&#xff0c;我们称为线程池工厂。ThreadFactory 为定制化创建新线程的对象,我们称为线程工厂 前面几期的学习中&#xff0c;我已经初步会使用线程池了&…

C++第三讲

思维导图 手动封装一个顺序栈类&#xff08;数据元素为整形&#xff09;&#xff0c;要求私有成员属性&#xff1a;堆区空间的指针&#xff0c;用于存放数据&#xff0c;和一个指向栈顶元素的变量 /* ---------------------------------author&#xff1a;YoungZorncreated on…

【全方位解析】如何写好技术文章

前言 为何而写 技术成长&#xff1a;相对于庞大的计算机领域的知识体系&#xff0c;人的记忆还是太有限了&#xff0c;而且随着年龄的增大&#xff0c;记忆同样也会逐渐衰退&#xff0c;正如俗话所说“好记性不如烂笔头”。并且在分享博客的过程中&#xff0c;我们也可以和大…