前言
近年来, 越来越多的云服务商开始提供纯 IPv6 VPS 或开始支持为服务器附加 IPv6 地址
原因很简单: IPv4 地址枯竭, IPv6 资源充裕且成本更低
纯 IPv6 VPS 通常价格非常便宜, 对于搭建私人游戏服务器来说, 成本优势明显
同时,隐藏在 IPv6 地址后的服务器也能有效降低遭受 DDoS 攻击的风险
然而现实是: 绝大多数游戏服务端并不原生支持纯 IPv6 连接, CS2 也不例外
因此, 我编写了一个名为 PortRelay 的轻量级端口代理工具
借助它, 可以在纯 IPv6 VPS 上运行 CS2 服务器, 并让未经任何修改的 CS2 客户端通过 IPv6 网络正常连接
架构概览
整体思路是: CS2 服务端只监听本机回环地址,由 PortRelay-Server 负责对外暴露 IPv6 接入点
玩家本地运行 PortRelay-Client, 在本机模拟出一个 CS2 服务器地址,流量通过 IPv6 隧道转发
1 | CS2 客户端 |
| 角色 | 运行位置 | 说明 |
|---|---|---|
| CS2 服务端 | 纯 IPv6 VPS | 仅监听 127.0.0.1:27015,不直接暴露公网 |
| PortRelay-Server | 同一台 VPS | 监听 [::]:9000, 将隧道流量转发到本地 CS2 |
| PortRelay-Client | 玩家本机 | 监听 127.0.0.1:27015, 通过 IPv6 与服务端建立隧道 |
准备工作
- 一台纯 IPv6 VPS,用于运行 CS2 服务端和 PortRelay-Server
- 玩家本机需要具备 IPv6 网络接入能力
Step 1: 在 VPS 上部署 CS2 服务端
CS2 专用服务器的安装流程本文不再赘述,你只需确保两点:
CS2 服务端已正确安装并能正常启动
启动参数加入
-ip 127.0.0.1, 使其仅监听本地回环地址, 不直接对外暴露
Step 2: 在 VPS 上部署 PortRelay-Server
2.1 下载
从 Releases 下载对应平台的最新版本,解压到任意目录
你也可以 Fork 源码自行构建,需要 Go 1.24+
2.2 配置 PortRelay-Server
创建配置文件 server.json:
1 | { |
关键字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
listen_port |
9000 |
对外监听端口,等待客户端接入 |
listen_protocol |
all |
同时接受 TCP 和 UDP 连接 |
service_target |
127.0.0.1:27015 |
转发目标: 本机 CS2 服务端 |
passwd |
自定义 | 客户端连接时需携带相同密码 |
2.3 启动 PortRelay-Server
1 | # 前台启动 (测试用) |
看到类似以下的日志表示服务端启动成功:
1 | User@LinuxServer:~/portrelay$ ./portrelay-linux-amd64 |
确认运行正常后,建议将其配置为 systemd 服务实现开机自启
Step 3: 配置玩家本地的 PortRelay-Client
3.1 下载
从 Releases 下载对应操作系统的版本
3.2 创建配置文件
新建 client.json:
1 | { |
| 字段 | 值 | 说明 |
|---|---|---|
listen_local |
127.0.0.1:27015 |
本地监听地址,CS2 直接 connect 此地址 |
server_ip |
[VPS IPv6]:9000 |
服务端的 IPv6 地址和端口 |
server_passwd |
自定义 | 必须与服务端配置一致 |
transport |
auto |
自动选择外层传输协议 |
3.3 启动 PortRelay-Client
1 | ./portrelay --config client.json |
看到 Connected 日志即表示隧道建立成功:
1 | 2026/05/26 21:18:03 [Tunnel "cs2-tunnel"] Connected | server=[IPv6-Address]:9000 | transport=UDP | listen=all |
保持该进程运行 (或配置为后台服务)
Step 4: 连接到服务器
打开 CS2,按 ~ 打开开发者控制台,输入:
1 | connect 127.0.0.1:27015 |
CS2 会将流量发往本地 PortRelay-Client
PortRelay-Client 经 IPv6 隧道将数据包转发到 VPS 上的 CS2 服务端, 玩家无需感知任何中间层
总结
PortRelay 不止于此, 除了本文演示的 IPv4-over-IPv6 场景, 它还支持:
- 将 UDP 流量封装在 TCP 隧道内传输 (或反之),在受限环境下改善连通性
- 通过 Base64 编码的 JSON 配置直接传入 CLI 参数,便于第三方程序调用或二次封装
- 内嵌至自定义客户端,充分利用廉价 IPv6 资源,同时保护服务端免受 DDoS 影响
如果你有任何问题或建议,欢迎在 GitHub 提出 issue