docker-compose安装部署openvpn,实现内网通信

编程侠 2022-07-19 17:52:30

OpenVPN是我们常用的开源商业软件,它实施虚拟专用网(VPN)技术,以在路由或桥接配置以及远程访问设施中创建安全的点对点或站点对站点连接。 它使用定制安全协议,该协议利用SSL / TLS进行密钥交换。 它能够遍历网络地址转换器(NAT)和防火墙。

OpenVPN允许对等方使用预共享的密钥,证书或用户名/密码来相互认证。 在多客户端服务器配置中使用时,它允许服务器使用签名和证书颁发机构为每个客户端发布身份验证证书。 它广泛使用OpenSSL加密库以及TLS协议,并且包含许多安全性和控制功能。

通俗的说就是服务端配置openvpn服务,并且创建客户端需要的文件,客户端再导入文件输入密码进行连接,连接成功就可以使用内网直接访问。大概形式是两种:

第一种:客户端与服务端之间互相可以访问,如下图所示,要打通路由

第二种:相对来说比较简单,只在服务侧部署openvpn服务,生成配置,在客户端本地进行连接(这种是单向的,只是客户端访问服务端,服务端不需要访问客户端)。

今天小编先介绍第二种,并且使用docker-compose进行部署

一、编写docker-compose.yml文件

version: '2'

services:

openvpn:

image: kylemanna/openvpn

container_name: openvpn

ports:

- "1194:1194/udp"

restart: always

volumes:

- ./openvpn-data/conf:/etc/openvpn

cap_add:

- NET_ADMIN

这里面UDP监听的端口1194,需开放外网访问权限,客户端通过这个端口来连接服务端的openvpn。

二、在启动容器前,初始化配置文件和证书

(1)配置openvpn容器:

docker-compose run --rm openvpn ovpn_genconfig -u udp://SERVER_DOMAIN_NAME

注:SERVER_DOMAIN_NAME需要替换成实际的域名或者IP,此IP或域名需外网能够访问

(2)初始化(固定命令格式):

docker-compose run --rm openvpn ovpn_initpki

按照提示输入密码、确认密码等

(可选步骤) 如果有需要的话,修改配置目录的权限:

chmod -R 777 ./openvpn-data/conf

三、启动容器

进入到docker-compose.yml目录,执行以下命令:

docker-compose up -d

四、创建用户客户端文件

设置环境变量(使用 export 可以使该变量成为环境变量,使变量在子进程下也可以执行),其中引号内的your_client_name替换成自己需要创建的文件名称,后续直接引用该名称。

export CLIENTNAME="your_client_name"

创建用户客户端文件(格式固定,CLIENTNAME为上面设置的环境变量名,也可以使用名称,则不需要使用前面的$符号)

docker-compose run --rm openvpn easyrsa build-client-full $CLIENTNAME

docker-compose run --rm openvpn ovpn_getclient $CLIENTNAME > $CLIENTNAME.ovpn

说明:easyrsa是为了做PKI使用的。openvpn使用easy_rsa生成的CA证书,公钥和私钥来实现SSLVPN。

执行完会在docker-compose.yml同级目录下生成后缀为ovpn的文件,用于客户端进行连接

五、删除用户(可选,需要时再使用)

docker-compose run --rm openvpn easyrsa revoke $CLIENTNAME

docker-compose run --rm openvpn easyrsa gen-crl update-db

docker-compose restart

六、下载openvpn客户端OpenVPN GUI,直接导入.ovpn文件即可使用。

导致之后进行连接,若提示success相关信息,则表示连接成功,此时,可以使用服务端的内网ip来访问服务端上的服务或者程序。

0 阅读:52

编程侠

简介:一个爱好厨艺的程序员