docker-compose.yml

services:
  openvpn:
    image: kylemanna/openvpn:latest
    container_name: openvpn
    cap_add:
      - NET_ADMIN
    ports:
      - "1194:1194/udp"
    volumes:
      - ./openvpn-data:/etc/openvpn
    restart: unless-stopped
    environment:
      - OVPN_SERVER_URL=udp://39.105.165.233:1194

openvpn.conf配置

server 192.168.255.0 255.255.255.0
verb 3
key /etc/openvpn/pki/private/39.105.165.233.key
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/39.105.165.233.crt
dh /etc/openvpn/pki/dh.pem
tls-auth /etc/openvpn/pki/ta.key
key-direction 0
keepalive 10 60
persist-key
persist-tun

proto udp
# Rely on Docker to do port mapping, internally always 1194
port 1194
dev tun0
status /etc/openvpn/openvpn-status.log

user nobody
group nogroup
#comp-lzo no

### Route Configurations Below
#route 192.168.254.0 255.255.255.0

### Push Configurations Below
#push "block-outside-dns"
push "dhcp-option DNS 223.5.5.5"
push "dhcp-option DNS 114.114.114.114"
#push "comp-lzo no"

#push "redirect-gateway def1"
push "route 47.101.38.208 255.255.255.255"

客户端

官网地址:https://openvpn.net/community/

初次使用请下载客户端 http://agment.huizyrt.ltd/OpenVPN-2.7.7-I001-amd64.msi

一、环境初始化

1. 生成 OpenVPN 配置

docker compose -f /data/openvpn/docker-compose.yml run --rm openvpn ovpn_genconfig -u udp://39.105.165.233

2. 初始化 PKI(公钥基础设施)

docker compose run --rm openvpn ovpn_initpki
  • 密码:mlb@123456

  • Common Name:milaibei

  • 后续所有密码均为 mlb@123456


二、客户端证书管理

1. 新建客户端证书

# 无密码方式(去掉 nopass 则需要密码)
docker compose run --rm openvpn easyrsa build-client-full zhangming nopass
  • 证书密码:mlb@123456

2. 导出客户端配置

docker compose run --rm openvpn ovpn_getclient zhangming > zhangming.ovpn

3. 修改 .ovpn 文件

生成的 .ovpn 文件删掉(注释)最后一行:

# redirect-gateway def1

说明:redirect-gateway def1 表示全部流量都走 VPN。删掉之后,只有服务器配置的 IP 走 VPN,其他流量走本地网络。


三、证书状态查看

cat /data/openvpn/openvpn-data/pki/index.txt
标记含义
VValid,有效
RRevoked,已吊销


四、吊销客户端证书

# 1. 进入容器
docker exec -it openvpn bash

# 2. 进入 Easy-RSA 目录
cd /usr/share/easy-rsa/

# 3. 吊销指定客户端证书(将 client1 替换为实际用户名)
./easyrsa revoke client1
# 输入 yes 确认
# 密码:mlb@123456

# 4. 生成/更新 CRL 文件
./easyrsa gen-crl
# 密码:mlb@123456

# 5. 退出容器
exit

# 6. 重启容器使 CRL 生效
docker restart openvpn


五、运维常用命令

1. 查看当前在线用户

cat /data/openvpn/openvpn-/openvpn-status.log

2. 查看连接日志

docker logs openvpn 2>&1 | grep -E "peer info|Connection|Established|Closing"


六、文件归档清单

文件/路径说明
/data/openvpn/docker-compose.ymlDocker Compose 配置文件
/data/openvpn/openvpn-data/pki/index.txt证书状态文件
/data/openvpn/openvpn-data/openvpn-status.log在线用户日志
*.ovpn客户端配置文件(下发给用户后本地留存)