前言
因为总公司跟分公司不在同一个地区,需要构建一个虚拟局域网把两个公司的网络组合一起,达到网络互通的目的。对比一番后,选择选择了免费开源的openvpn的方案。本文介绍如何通过docker-compose 构建openvpn 实现企业异地组网。
特别说明,此方案的服务器必须有公网IP或者域名,如果都没有,可以先查一下内网穿透相关知识。
环境介绍
- 这里是列表文本服务端 CentOS 7.6
- 客户端 Windows 10
openvpn 目录
手动创建如下目录:
image.png
data 用于存放openvpn配置
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
客户端下载及安装,此链接需要翻墙
https://openvpn.net/community-downloads/
本文以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
- 文章链接: https://blog.zhangcun.store/2022/05/31/qi-ye-yi-di-zu-wang-docker-compose-da-jian-openvpn/
- 版权声明: 本网站所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!
你的赏识是我前进的动力
支付宝
微信