Skip to content

normal-coder/OpenVPN2SS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenVPN2SS

现代网络环境中,生产或特定网络为确保其网络安全,往往会使用 VPN 网络做接入管制。

在这种复杂网络环境下,OpenVPN 客户端经常会与 Surge 等网络调试工具存在 DNS 抢占问题。当用户存在多套 OpenVPN 网络时,还需要频繁在不同 OpenVPN 配置间切换,非常繁琐。

OpenVPN2SS 将 OpenVPN 客户端通过 SSServer 转化为 ss:// 协议,通过支持 ss:// 协议的网络客户端接入,可有效解决 DNS 抢占、频繁需要切换变更网络的问题。

目录结构

.
├── Dockerfile                   # 基于 alpine 的镜像源文件,无需改动
├── docker-compose.yml           # Docker Compose 文件
├── docker-entrypoint.sh         # 镜像启动脚本,无需改动
├── config                       # 配置文件目录
│   ├── openvpn                  # OpenVPN 配置文件目录
│   │   ├── ca.crt               # 
│   │   ├── openvpn.ovpn         # 
│   │   ├── pass.txt             # 
│   │   ├── ta.key               # 
│   │   ├── user.crt             # 
│   │   └── user.key             # 
│   └── shadowsocks              # 
│       ├── shadowsocks.json     # 用于被订阅的服务端配置
│       └── shadowsocks.service  # SS 系统文件,无需改动
├── logs                         # OpenVPN 运行日志目录
└── README.md

使用说明

OpenVPN2SS 基于 Docker 设计,支持一键 docker compose up -d 运行。运行前请预先配置 OpenVPN 认证文件SSServer 服务端配置OpenVPN 内网 DNS 地址

一、OpenVPN 认证配置

在多数 OpenVPN 客户端认证文件中,一般包含 xxxx.ovpnxxxx.crtxxxx.keyca.crtta.key 五个文件。

请按照如下文件名称,将配置文件命名存入 config/openvpn 配置目录。

文件名称 用途说明
ca.crt 根证书(CA)的公钥证书文件。
用来验证服务器和客户端证书的合法性。
openvpn.ovpn OpenVPN 配置文件。
包含了连接服务器所需的所有配置选项,如服务器地址、端口、加密算法等。
pass.txt OpenVPN 用户密码文件。
用于自动化连接过程中的认证。
ta.key 预共享密钥文件(TLS-Auth 密钥)。
它增加了��输数据的安全性,用于验证通信的完整性。
user.crt 用户的公钥证书文件。
用于客户端身份验证和通信加密。
user.key 用户的私钥文件。
用于客户端身份验证和通信加密。

其中:pass.txt 对应 OpenVPN 用户密码文件,以保证客户端可以自动连接而不需要手动输入密码。

二、SSServer 服务端配置

通过 SS_PASSWORD 环境变量设置 Shadowsocks 连接密码。可以在启动前导出环境变量,或在 docker-compose.yml.env 文件中配置:

export SS_PASSWORD=your_password_here

默认配置中采用 aes-256-gcm 认证加密算法,在容器内开放 5162 端口,并通过 Docker 对外暴露(依然是 5162 端口不变)。

三、构建镜像(可选)

本工程已提供 Docker 镜像,可直接通过 DockerHub 获取,你也可以选择自行构建。

docker-compose build openvpn-client

四、设定 OpenVPN 内网 DNS,启动运行

多数 OpenVPN 网络内部一般会配套 CoreDNS 一类服务发现服务,用于内网的 DNS 分发,但由于 OpenVPN CLI Client 不会自动接管容器中的 DNS 网络,需要在 docker-compose.ymldns 配置节中进行指定,该段配置支持多个 DNS 服务器指向。以内网 DNS 服务器 IP 为 10.8.0.1 为例,参考如下:

version: "3"
services:
  openvpn-client:
    container_name: openvpn-client
    ...
    dns:
      - 10.8.0.1
    ...

随后就可以启动了,启动命令如下:

docker compose up -d

当你参考下方命令查阅运行日志,看到如下内容,表示 OpenVPN 和 SS 已成功运行。

# OpenVPN 运行日志,位于 logs/ovpn.log
➜  tail -f logs/ovpn.log
2023-11-01 07:53:49 Data Channel: using negotiated cipher 'AES-256-GCM'
2023-11-01 07:53:49 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2023-11-01 07:53:49 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2023-11-01 07:53:49 ROUTE_GATEWAY 172.29.0.1/255.255.0.0 IFACE=eth0 HWADDR=00:00:00:00:00:00
2023-11-01 07:53:49 TUN/TAP device tun0 opened
2023-11-01 07:53:49 /sbin/ip link set dev tun0 up mtu 1500
2023-11-01 07:53:49 /sbin/ip link set dev tun0 up
2023-11-01 07:53:49 /sbin/ip addr add dev tun0 10.8.0.5/24
2023-11-01 07:53:49 /sbin/ip route add 10.0.64.9/32 via 10.8.0.1
2023-11-01 07:53:49 Initialization Sequence Completed
...
# SS 日志,位于容器运行时日志输出
➜  docker compose logs -f
openvpn-client  | 2023-11-01T11:54:08.534779916+00:00 INFO  shadowsocks server 1.17.0 build 2023-10-15T02:31:43.546559935+00:00
openvpn-client  | 2023-11-01T11:54:08.538587179+00:00 INFO  shadowsocks tcp server listening on 0.0.0.0:5162, inbound address 0.0.0.0:5162

配置上游网络代理以接入 OpenVPN 网络

接入需要使用支持 ss:// 协议的网络工具,默认可指向本地 127.0.0.1 的 5162 端口,使用 aes-256-gcm 认证加密算法,结合上文阶段中配置的 SSServer 密码实现认证。以下是 Surge 下配置客户端示例截图:

ss-client-config

About

Convert OpenVPN into Socks5 via Docker 将 OpenVPN 协议转为 Socks 协议,支持同时多开多个 OpenVPN 客户端,解决不同工作环境 OpenVPN 内网同时访问问题

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors