一个简单、高效的 Go 端口转发工具,支持同时转发多个端口。
go install cnb.cool/4moe/pfwd@latest
安装完成后,pfwd 命令将自动添加到 $GOPATH/bin 目录,可以全局使用:
# 检查是否安装成功
pfwd version
# 查看 pfwd 可执行文件位置
which pfwd
pfwd init
# 使用默认配置文件
pfwd start
# 使用自定义配置文件
pfwd --config /path/to/config.yaml start
访问 CNB Releases 页面,选择适合你系统的版本:
| 平台 | 文件名 |
|---|---|
| Linux AMD64 | pfwd-linux-amd64.tar.gz |
| Linux ARM64 | pfwd-linux-arm64.tar.gz |
| Windows AMD64 | pfwd-windows-amd64.zip |
| macOS AMD64 | pfwd-darwin-amd64.tar.gz |
| macOS ARM64 | pfwd-darwin-arm64.tar.gz |
下载对应的压缩包。
Linux/macOS:
# 解压文件
tar -xzf pfwd-linux-amd64.tar.gz
# 或
tar -xzf pfwd-darwin-amd64.tar.gz
# 添加执行权限
chmod +x pfwd
# 移动到系统路径(可选)
sudo mv pfwd /usr/local/bin/
# 验证安装
pfwd version
Windows:
# 解压文件 Unzip pfwd-windows-amd64.zip # 添加到 PATH(可选) # 或者直接在当前目录使用 .\pfwd.exe version
pfwd init
# 使用默认配置文件
pfwd start
# 使用自定义配置文件
pfwd --config /path/to/config.yaml start
下载已编译好的二进制文件或从源码编译
./pfwd init
这将生成默认的 config.yaml 文件:
# 端口转发配置(支持多个转发规则)
forwards:
- local_port: 1080
remote_host: mysql-server.com
remote_port: 3306
name: "MySQL数据库"
- local_port: 8080
remote_host: redis-server.com
remote_port: 6379
name: "Redis缓存"
- local_port: 9090
remote_host: api-server.com
remote_port: 443
name: "API服务"
编辑 config.yaml,配置你的转发规则:
forwards:
- local_port: 10080 # 本地监听端口
remote_host: example.com # 远程服务器地址
remote_port: 80 # 远程服务器端口
- local_port: 10081
remote_host: example.com
remote_port: 81
# 使用默认配置文件(config.yaml)
./pfwd start
# 使用自定义配置文件
./pfwd --config /path/to/config.yaml start
启动后会显示:
=== Go 端口转发器 === :10080 → example.com:80 :10081 → example.com:81 ========================= 准备启动 2 个转发器... ========================= [1/2] 启动转发器... ✅ 开始监听 :10080,转发到 example.com:80 [2/2] 启动转发器... ✅ 开始监听 :10081,转发到 example.com:81 ✅ 所有转发器已启动 按 Ctrl+C 停止
按 Ctrl+C 优雅停止所有转发器。
docker pull your-registry.com/pfwd:latest
创建 config.yaml:
forwards:
- local_port: 3306
remote_host: mysql.example.com
remote_port: 3306
- local_port: 6379
remote_host: redis.example.com
remote_port: 6379
docker run -d \
--name pfwd \
-p 3306:3306 \
-p 6379:6379 \
-v $(pwd)/config.yaml:/app/config.yaml \
pfwd:latest start
创建 docker-compose.yml:
version: '3.8'
services:
pfwd:
image: pfwd:latest
container_name: pfwd
restart: unless-stopped
ports:
- "3306:3306"
- "6379:6379"
- "9090:9090"
volumes:
- ./config.yaml:/app/config.yaml
启动:
docker-compose up -d
查看日志:
docker-compose logs -f pfwd
停止:
docker-compose down
./pfwd init
生成默认配置文件 config.yaml。
./pfwd start [--config /path/to/config.yaml]
参数说明:
--config, -c: 指定配置文件路径(默认:./config.yaml)./pfwd version
输出:
版本: 0.1.0 构建时间: 2026-02-13_03:20:29 Git提交: 13a62f4
forwards:
- local_port: 10080 # 必需:本地监听端口
remote_host: example.com # 必需:远程服务器地址
remote_port: 80 # 必需:远程服务器端口
name: "描述名称" # 可选:转发规则描述
local_port: 1-65535 的整数remote_host: IP 地址或域名remote_port: 1-65535 的整数name: 字符串描述(可选)forwards:
- local_port: 3306
remote_host: mysql.internal.com
remote_port: 3306
forwards:
- local_port: 6379
remote_host: redis.internal.com
remote_port: 6379
forwards:
- local_port: 3306
remote_host: mysql.internal.com
remote_port: 3306
- local_port: 6379
remote_host: redis.internal.com
remote_port: 6379
- local_port: 9090
remote_host: api.internal.com
remote_port: 8080
错误:bind: address already in use
解决:
lsof -i :3306 (macOS/Linux) 或 netstat -ano | findstr :3306 (Windows)config.yaml 中的 local_port错误:connection refused 或 timeout
解决:
remote_host 和 remote_port 是否正确telnet example.com 3306确保 Docker 容器的端口映射与配置文件中的 local_port 一致:
# config.yaml
forwards:
- local_port: 3306 # 容器内监听的端口
remote_host: mysql.example.com
remote_port: 3306
docker run -d \
-p 3306:3306 \ # 宿主机:容器内端口
pfwd:latest start
如果遇到权限错误:
# Linux/macOS
chmod +x pfwd
当前配置文件支持 IPv6 地址:
forwards:
- local_port: 8080
remote_host: "[2001:db8::1]" # IPv6 地址需要方括号
remote_port: 80
本项目采用 MIT 许可证 - 详见 LICENSE 文件
欢迎提交 Issue 和 Pull Request!