Docker搭建OpenVN
Docker搭建OpenVPN
准备好一台可被访问的机器,如ip为 172.16.100.241,并安装好Docker,可使用下面的yum源安装命令,并设置阿里云镜像加速
# CentOS yum源 如果使用的是其他系统可以找对应系统的安装命令
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker
systemctl enable docker
echo '{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]}' >> /etc/docker/daemon.json
systemctl restart docker.service
# 拉取openvpn镜像
docker pull kylemanna/openvpn:2.4
1.使用openvpn生成配置文件[1]
mkdir -p /home/openvpn
docker run -v /home/openvpn:/etc/openvpn --rm kylemanna/openvpn:2.4 ovpn_genconfig -u udp://172.16.100.241
执行完命令后可在目录/home/openvpn
中看到相应的配置文件;
2.初始化密钥文件
docker run -v /home/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4 ovpn_initpki
执行过程中需要先设置ca密码(如123456),Common Name可不设置直接按回车继续,接着需要输入ca密码更新密钥库以及生成crl文件;
3.生成客户端证书
docker run -v /home/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4 easyrsa build-client-full openvpn-client nopass
其中openvpn-client
为自定义名称,生成的过程需要输入ca密码;
4.导出客户端的配置文件openvpn-client.ovpn
docker run -v /home/openvpn:/etc/openvpn --rm kylemanna/openvpn:2.4 ovpn_getclient openvpn-client > /home/openvpn/openvpn-client.ovpn
注意openvpn-client
名称需与第三步生成时命名一致,此时生成的配置文件openvpn-client.ovpn
即可用于客户端连接;
5.启动openvpn
docker run -v /home/openvpn:/etc/openvpn -d -p 1194:1194/udp --restart=always --name openvpn --cap-add=NET_ADMIN --sysctl net.ipv6.conf.all.disable_ipv6=0 --sysctl net.ipv6.conf.default.forwarding=1 --sysctl net.ipv6.conf.all.forwarding=1 kylemanna/openvpn:2.4
开放服务器上的UDP 1194端口
6.安装客户端
去官网下载客户端
将第4步获取到的openvpn-client.ovpn
配置文件放入客户端安装目录下的config文件夹内进行连接
7.路由配置[2][3]
目前vpn使用的是全局代理,可以使用路由配置指定特定网段通过vpn进行访问
在生成的openvpn-client.ovpn
配置文件的最后注释转发内容,并添加如下内容
# 该行会将所有路由重定向到vpn 注释掉并写入自己的路由
# redirect-gateway def1
#不添加路由,也就是不会有任何网络请求走OpenVPN
route-nopull
#指定此网段才走VPN代理
route 10.0.8.0 255.255.255.0
8.配置密码登录[4]
进入openvpn挂载的文件目录下,在openvpn.conf
文件内新增下面的内容
### Password config
#客户端不进行证书认证,如果不加将实现证书和用户密码双重认证 建议注释,使用双重认证更安全
client-cert-not-required
#用户和密码验证脚本
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
#使用用户名密码登录认证
username-as-common-name
#脚本安全级别
script-security 3
创建脚本和用户密码文件
# 在挂载目录下创建checkpsw.sh文件
vim /home/openvpn/checkpsw.sh
#!/bin/bash
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.
# 用户与密码配置文件 这里是容器内的地址
PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/var/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
###########################################################
if [ ! -r "${PASSFILE}" ]; then
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
添加执行权限
chmod +x /home/openvpn/checkpsw.sh
添加用户密码文件,格式:一行对应一个用户
vim /home/openvpn/psw-file
test1 123456
test2 123456
修改权限
chmod 777 /home/openvpn/psw-file
重启容器
docker restart openvpn
在客户端配置文件openvpn-client.ovpn
添加内容
# 密码校验
auth-user-pass
这时客户端重新连接会弹出账户密码框,输入配置的用户与密码即可连接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端