企业异地组网:docker-compose 搭建 openvpn

发布于 2020-08-24 16:35:35

前言

因为总公司跟分公司不在同一个地区,需要构建一个虚拟局域网把两个公司的网络组合一起,达到网络互通的目的。对比一番后,选择选择了免费开源的openvpn的方案。本文介绍如何通过docker-compose 构建openvpn 实现企业异地组网。

特别说明,此方案的服务器必须有公网IP或者域名,如果都没有,可以先查一下内网穿透相关知识。

环境介绍

- 这里是列表文本服务端 CentOS 7.6

- 客户端 Windows 10

openvpn 目录

手动创建如下目录:
image.png

  1. data 用于存放openvpn配置
  2. client 存放生成客户端配置文件

docker-compose.yml

version: '2'

services:
   openvpn:
     container_name: openvpn
     image: kylemanna/openvpn
     volumes:
      - "./data:/etc/openvpn"
     ports:
      - '1194:1194/udp'
     cap_add:
      - NET_ADMIN
     restart: always
     privileged: true

配置openvpn

# 请把后面的 udp 改成自己的网址
docker-compose run --rm openvpn ovpn_genconfig -u udp://vpn.nuomiphp.com
# 生成密钥文件,输入密钥和CA名称
docker-compose run --rm openvpn ovpn_initpki
# 启动服务
docker-compose up -d

如果需要更多定制配置:

#生成配置文件
#-d 取消默认配置     -c 打开c2c模式     -u 指定当前IP
#-s 划分服务器子网     -C 指定算法
docker-compose run --rm  openvpn  ovpn_genconfig -d -c -C 'AES-256-CBC' -u udp://vpn.nuomiphp.com -s 192.168.1.0/24

用户操作

添加用户

1.生成证书

#生成一个叫test的用户,输入密钥
docker-compose run --rm  openvpn easyrsa build-client-full test nopass

or 如果生成的用户需要输入密码则把后面的nopass去掉:

docker-compose run --rm  openvpn easyrsa build-client-full test

2.导出test用户证书到client文件夹里
docker-compose run --rm openvpn ovpn_getclient test > ./client/test.ovpn

删除用户

//删除用户证书
docker-compose run --rm  openvpn easyrsa revoke user
//更新证书数据库
docker-compose run --rm  openvpn easyrsa gen-crl update-db
//重启openvpn容器
docker restart  openvpn 

客户端下载及安装,此链接需要翻墙

本文以windows客户端演示

1.启动客户端,选择FILE
image.png

2.把刚才生成的./client/test.ovpn下载到本地,然后导入即可

优化改进

为了减少工作量,方便快速配置,可以使用如下两个增添用户的脚本。
OpenVPN 创建用户脚本:

#!/bin/bash
read -p "please your username: " NAME
OVPN_DATA="openvpn-data"
LOCALIP="IP"
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full $NAME nopass
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient $NAME > /data/openvpn/conf/"$NAME".ovpn
#修改端口(可选)
sed -i "s/$LOCALIP 1194/$LOCALIP 1194/g" /data/openvpn/conf/"$NAME".ovpn
#压缩(可选)
echo "comp-lzo" >> /data/openvpn/conf/"$NAME".ovpn
docker restart openvpn
echo "CA saved to /data/openvpn/conf/$NAME.ovpn"

OpenVPN 删除用户脚本,次基本基于docker,需要自行改造成docker-compose:

#!/bin/bash
read -p "Delete username: " DNAME
OVPN_DATA="openvpn-data"
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa revoke $DNAME
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa gen-crl
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn rm -f /etc/openvpn/pki/reqs/"$DNAME".req
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn rm -f /etc/openvpn/pki/private/"$DNAME".key
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn rm -f /etc/openvpn/pki/issued/"$DNAME".crt
#删除相关用户conf(可选)
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn rm -f /data/openvpn/conf/"$DNAME"
docker restart openvpn
echo "Deleted $DNAME"
0 条评论

发布
问题