文章介绍:使用Docker和Docker-Compose一键部署OpenVPN,与传统相比多了Web管理平台,利于管理员编辑server配置文件,创建用户,查看用户在线状态,高级用法ccd指定用户下发指定路由等。
一、项目来源
二、部署前准备
sudo apt update
sudo apt install ntpdate
sudo timedatectl set-timezone Asia/Shanghai
sudo timedatectl set-ntp true
sudo systemctl stop systemd-timesyncd.service
sudo ntpdate ntp1.aliyun.com
sudo systemctl start systemd-timesyncd.service
sudo systemctl enable systemd-timesyncd.service
timedatectl status
date
三、部署OpenVPN
3.1、安装git
sudo apt install -y git
3.2、拉取项目
git clone https://gitee.com/yuanshukeji/openvpn
3.3、进入目录
cd openvpn
3.4、拉取容器
docker-compose pull
3.5、运行容器
docker-compose up -d
3.6、查看容器运行状态
docker-compose ps
docker ps
3.7、打开Web
3.8、自定义前端一
3.8.1、修改图片:①
3.8.1.1、修改原图名称
cd /root/openvpn/vpnui/dist/assets #进入上图中①图的文件路径
mv logo-e1197e99.webp logo-e1197e99.webp.backup #修改原图后缀为.backup
3.8.1.2、上传图片
3.8.1.3、赋予权限
chmod +x logo-e1197e99.webp
3.8.1.4、刷新页面
3.8.2、修改文字:②③
3.8.2.1、文字替换
find /root/openvpn/ -type f -exec sed -i 's/元枢科技/杨杨得亿/g' {} +
3.8.2.2、刷新页面
3.9、登录系统
admin
Xxxxx.ai@123
3.10、自定义前端二
3.10.1、修改原图
cd /root/openvpn/vpnui/dist/assets #进入admin的logo文件路径
mv logo-c1f5a41d.jpg logo-c1f5a41d.jpg.backup #修改原图后缀为.backup
3.10.2、上传图片
3.10.3、赋予权限
chmod +x logo-c1f5a41d.jpg
3.10.4、刷新页面
四、配置OpenVPN
4.1、修改地址和端口
4.2、服务端参数说明
login_url http://vpnapi:29091/vpnlogin
: 这个配置指定了用于用户登录的 URL。当用户尝试连接 VPN 时,可能需要提供用户名和密码进行认证,这个 URL 就是用于处理用户登录的页面或服务。log_url http://vpnapi:29091/vpnlog
: 这个配置项指定了用于查看日志的 URL。管理员可以通过访问此 URL 来查看 OpenVPN 服务器的日志信息,从而监控连接活动、故障排除等。ws_url ws://vpnapi:29091/vpnws
: 这个配置项指定了 WebSocket 的 URL,用于支持通过 WebSocket 连接的 VPN 客户端。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,通过此 URL,客户端可以建立到服务器的 WebSocket 连接。management 127.0.0.1 1112
: 这个配置项指定了 OpenVPN 服务器的管理接口的地址和端口。通过管理接口,管理员可以远程控制和监视 OpenVPN 服务器的运行状态,包括连接管理、配置更改、查看状态信息等。在此处配置的地址和端口是用于本地管理,因此只能从本地访问。port 20005
: 指定 OpenVPN 服务器监听的端口号。proto tcp
: 指定 OpenVPN 服务器使用的协议是 TCP。dev tun
: 指定设备类型为 tun,这是 OpenVPN 默认的虚拟隧道设备类型。max-clients 60000
: 设置允许连接到服务器的最大客户端数量。client-config-dir /etc/openvpn/ccd
: 指定一个目录,用于存放客户端特定的配置文件。ca /etc/openvpn/easy-rsa/pki/ca.crt
: 指定证书授权机构 (CA) 的证书文件路径。cert /etc/openvpn/easy-rsa/pki/issued/server.crt
: 指定服务器的证书文件路径。key /etc/openvpn/easy-rsa/pki/private/server.key
: 指定服务器的私钥文件路径。dh /etc/openvpn/easy-rsa/pki/dh.pem
: 指定 Diffie-Hellman 参数文件路径,用于密钥交换。crl-verify /etc/openvpn/easy-rsa/pki/crl.pem
: 指定证书吊销列表 (CRL) 文件的路径,用于检查证书的有效性。tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0
: 启用 TLS 认证,并指定 TLS 认证密钥文件的路径。server 10.254.253.0 255.255.255.0
: 指定 VPN 服务器的虚拟 IP 地址池。ifconfig-pool-persist ipp.txt
: 指定持久化保存虚拟 IP 地址分配的文件路径。push "route 192.168.1.1 255.255.255.255"
: 向客户端推送路由信息,告诉客户端如何路由到指定的目标网络。push "route 18.18.1.0 255.255.255.0"
: 同上,推送另一个路由信息。reneg-bytes 0
和reneg-sec 0
: 关闭重协商功能,确保在连接期间不会重复协商密钥。keepalive 10 600
: 设置保持活动连接的参数。comp-lzo
: 启用数据压缩。client-to-client
: 允许客户端之间进行直接通信。persist-key
和persist-tun
: 持久化存储密钥和虚拟隧道设备。status /etc/openvpn/log/openvpn-status.log
: 指定状态文件的路径。log
、log-append
和verb 3
: 配置日志相关选项,包括日志文件路径和详细程度。script-security 3
: 设置脚本安全性级别。auth-user-pass-verify /etc/openvpn/check.sh via-env
和username-as-common-name
: 配置用户认证,使用指定的脚本进行验证,并将用户名作为通用名称使用。
4.3、修改服务端参数
4.3.1、修改客户端IP
server 100.255.255.0 255.255.255.0
nano /root/openvpn/run/start.sh
iptables
: 使用iptables命令进行防火墙规则的设置。-t nat
: 指定规则类型为 NAT 表,即网络地址转换表,用于配置网络地址转换规则。-A POSTROUTING
: 在POSTROUTING链中添加一条规则,该链用于在数据包离开系统后对其进行处理。-s 100.255.255.0/24
: 指定源 IP 地址为 100.255.255.0/24,即从该子网发出的数据包将受到此规则的影响。-o eth0
: 指定输出接口为 eth0,即数据包通过 eth0 接口离开系统时将受到此规则的影响。-j MASQUERADE
: 指定动作为 MASQUERADE,即对匹配的数据包进行源地址伪装,使得数据包看起来来自于该路由器本身,而不是来自于内部网络中的某个具体主机。
iptables -t nat -A POSTROUTING -s 100.255.255.0/24 -o eth0 -j MASQUERADE
4.3.2、修改协议
proto udp
proto tcp
和 proto udp
是 OpenVPN 配置文件中用于指定通信协议的选项,它们分别代表了 TCP 和 UDP 协议。
-
可靠性:
- TCP(传输控制协议)是面向连接的,提供可靠的数据传输,会保证数据的顺序和完整性。它使用三次握手建立连接,以及应答确认(ACK)和重传机制来确保数据的可靠传输。
- UDP(用户数据报协议)是面向无连接的,不保证数据传输的可靠性,也不保证数据包的顺序。它更加简单高效,不需要建立连接,没有握手和确认机制。
-
性能:
- TCP 的可靠性和保证顺序的特性使得它在网络环境较差或者对数据完整性要求较高的情况下更适用,但由于其额外的开销(如握手、确认、重传等),可能会影响性能。
- UDP 则更轻量级,不需要维护连接状态,传输效率较高,适合实时性要求高、容忍少量丢包的应用场景。
-
适用场景:
- TCP 适用于需要可靠传输、对数据完整性要求高、可以容忍一定延迟的场景,如文件传输、网页访问等。
- UDP 适用于对实时性要求高、可以容忍少量丢包的场景,如音频、视频流传输、在线游戏等。 -
建议选用:
- 如果你的应用对数据完整性要求较高,可以容忍一定的延迟,并且不在乎额外的开销,那么选择 TCP 是一个不错的选择。
- 如果你的应用对实时性要求高,可以容忍少量丢包,并且希望减少传输延迟,那么选择 UDP 更为合适。
4.3.2、修改路由
4.3.2.1、下发指定路由
push "route 192.168.6.0 255.255.255.0" #下发指定内网路由
4.3.2.2、下发全局路由
push "redirect-gateway def1 bypass-dhcp"
4.3.4、修改DNS一
push "redirect-gateway def1 bypass-dns"
4.3.5、修改DNS二
push "dhcp-option DNS 192.168.1.100" #填写自己内网的DNS服务器IP
4.4、创建用户
4.5、修改用户密码
4.6、下载用户配置文件
五、客户端连接测试
5.1、前后路由对比
5.2、tracert路径对比
六、Web日志查看
6.1、首页
6.2、会话管理
6.3、日志管理
七、CCD自定义路由
7.1、进入目录
/root/openvpn/run/ccd
7.2、创建配置文件
nano young
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 192.168.1.100" #可选,全局走VPN,如果内网有绿色DNS则添加