Skip to content

Repository files navigation

EasyRouter

EasyRouter 是一个 LAN-first TCP 路由器。客户端应用始终连接本机地址,EasyRouter 会自动选择局域网直连或该服务的 FRP 公网入口。

例如,一台家用服务器的 SSH 在局域网监听 192.168.1.20:22222,并通过 FRP 暴露为 203.0.113.10:7600。MacBook 无论在家还是外出,都只需连接 EasyRouter 提供的本机地址:

ssh -p 22222 user@127.0.0.1

Client Server

主要功能

  • 局域网可达时优先直连,不可达时自动回退到 FRP。
  • 通过 UDP 自动发现服务端,服务端局域网地址变化后无需逐台修改客户端。
  • 每项服务可使用不同的 FRP 主机和端口。
  • 客户端可以为每项服务覆盖本机端口。
  • 本机端口未指定时,依次尝试局域网端口、FRP 端口和随机空闲端口。
  • 支持从 frpc.toml 导入一条或多条 TCP 业务代理。
  • Windows 系统托盘、macOS 菜单栏驻留和单实例运行。
  • Linux 可只运行无图形界面的 easyrouter-core

工作方式

flowchart LR
  A["应用<br/>127.0.0.1:本机端口"] --> C["EasyRouter 客户端"]
  C -->|"优先"| L["局域网服务"]
  C -->|"不可达时回退"| F["FRP 业务入口"]
  S["EasyRouter 服务端"] -->|"UDP 发现 / 目录 API"| C
  R["FRP 控制入口"] -.->|"同步服务目录"| C
Loading

EasyRouter 使用两类公网端口:

  • 控制端口:同步服务目录,默认是 45890,只需映射一次。
  • 业务端口:承载 SSH、HTTP、数据库等实际流量,每项服务独立配置。

安装

桌面用户可以从项目 Releases 下载对应平台的安装包:

  • Windows:推荐使用 x64 NSIS 安装程序,也支持 MSI。
  • macOS:根据设备选择 Apple Silicon 或 Intel 构建。
  • Linux:可以自行构建桌面应用,服务器场景推荐部署 easyrouter-core

从源码构建和参与开发请参阅 CONTRIBUTING.md

快速开始:SSH + FRP

下面使用这组示例地址:

项目 示例值
家中服务器局域网 IP 192.168.1.20
SSH 端口 22222
FRP 服务器地址 203.0.113.10
FRP 服务端口 7000
EasyRouter 公网控制端口 45890
SSH 公网端口 7600

203.0.113.10 是文档示例地址,请替换为自己的 FRP 服务器域名或公网 IP。

1. 配置 frpc

在家中服务器的 frpc.toml 中同时映射 EasyRouter 控制端口和 SSH 业务端口:

serverAddr = "203.0.113.10"
serverPort = 7000

[[proxies]]
name = "easyrouter-control"
type = "tcp"
localIP = "127.0.0.1"
localPort = 45890
remotePort = 45890

[[proxies]]
name = "home-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22222
remotePort = 7600

FRP 服务器需要允许 TCP 458907600 入站。完整说明见 FRP 使用指南,仓库内也提供了可直接修改的 frpc 示例

2. 配置 EasyRouter 服务端

在家中服务器打开 EasyRouter,进入“配置中心”:

  1. 设备角色选择“服务端”。
  2. 设置一个足够长的共享访问令牌。
  3. 服务端局域网 IP 确认为 192.168.1.20;程序会自动检测,也可以手动修改。
  4. API 端口保持 45890
  5. 添加 SSH 服务:
字段
显示名称 Home SSH
局域网主机 $agent
局域网端口 22222
FRP 主机 203.0.113.10
FRP 端口 7600

$agent 表示使用 EasyRouter 服务端配置的局域网 IP。若目标服务位于 NAS 或另一台虚拟机,应填写那台设备的局域网 IP。

3. 配置 macOS/Windows 客户端

在笔记本打开 EasyRouter:

  1. 设备角色选择“客户端”。
  2. 填写与服务端完全一致的共享访问令牌。
  3. 公网控制地址填写 http://203.0.113.10:45890
  4. 本机监听地址建议保持 127.0.0.1
  5. 保存并应用。

路由状态出现 Home SSH 后,点击“复制”会得到类似:

127.0.0.1:22222

连接 SSH:

ssh -p 22222 user@127.0.0.1

在家时,新连接会使用 192.168.1.20:22222;外出时会自动使用 203.0.113.10:7600。SSH 命令无需改变。

4. 本机端口冲突

如果客户端的 22222 已被占用,EasyRouter 会继续尝试 FRP 端口 7600,两者都不可用时使用随机空闲端口。实际端口会显示在路由状态中。

也可以在客户端“配置中心 → 本机服务端口”中为 Home SSH 手动设置 22223。保存后使用:

ssh -p 22223 user@127.0.0.1

端口覆盖只影响当前客户端,不会修改服务端或其他设备。

从 FRP 配置导入服务

服务端配置中心支持粘贴一条或多条 [[proxies]] TCP 代理。导入时会使用:

  • serverAddr → FRP 主机
  • localIP → 局域网主机;127.0.0.10.0.0.0localhost 会转换为 $agent
  • localPort → 局域网端口
  • remotePort → FRP 端口

建议只导入业务代理,不要把 easyrouter-control 控制代理作为服务导入。导入结果不会立即生效,可以检查和调整后再保存。

后台运行

  • Windows:关闭主窗口后驻留系统托盘;托盘菜单可以打开面板、重启核心或退出。
  • macOS:关闭主窗口后驻留菜单栏;只有执行“退出 EasyRouter”才会停止核心。
  • Linux:可以通过 systemd 运行 easyrouter-core,不依赖桌面环境。

Linux 安装示例:

cargo build --release -p easyrouter-core
sudo ./scripts/install-linux-systemd.sh
sudo editor /etc/easyrouter/easyrouter.json
sudo systemctl restart easyrouter

配置示例位于 packaging/systemd/easyrouter.example.json

安全建议

  • 首次远程使用前务必更换默认共享令牌,并在所有客户端使用相同令牌。
  • 控制 API 默认使用 HTTP。公网使用时建议通过 TLS、VPN 或 FRP 的安全传输能力保护令牌。
  • 客户端默认监听 127.0.0.1。只有明确需要向局域网其他设备开放时才使用 0.0.0.0,并配置防火墙。
  • EasyRouter 不替代 FRP 的身份认证,也不加密原始业务协议。SSH、HTTPS 等端到端加密仍由业务服务负责。
  • 不要将包含真实令牌、私有域名或公网服务器凭据的配置文件提交到仓库。

文档

当前限制

  • 只代理 TCP 业务流量。
  • 客户端当前同步单个 EasyRouter 服务端目录。
  • 路线切换只影响新建立的连接,不会迁移已有 TCP 会话。
  • UDP 业务代理、多个服务端目录合并、证书固定和 mDNS 尚未支持。

License

EasyRouter 使用 MIT License

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages