
---

## 1) frps（公网服务器）配置

编辑 `frps.toml`，让 frps 监听一个 HTTP CONNECT 复用端口（你希望是 8022 就设 8022）：

```toml
bindPort = 7000

# 关键：tcpmux 复用入口端口
tcpmuxHTTPConnectPort = 8022
```

重启 frps
这个 8022 **不是直接 SSH 端口**，而是“HTTP CONNECT 复用入口”

---

## 2) 两台内网主机的 frpc 配置

### 主机 A（big.smy.top）

`frpc.toml`：

```toml
serverAddr = "你的公网IP"
serverPort = 7000

[[proxies]]
name = "ssh_big"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["big.smy.top"]
localIP = "127.0.0.1"
localPort = 22
```

### 主机 B（small.smy.top）

`frpc.toml`：

```toml
serverAddr = "你的公网IP"
serverPort = 7000

[[proxies]]
name = "ssh_small"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["small.smy.top"]
localIP = "127.0.0.1"
localPort = 22
```

`customDomains` 就是用来区分路由的域名键

---

## 3) DNS 解析

把

- `big.smy.top`
- `small.smy.top`
    

都 **A 记录解析到同一台公网 frps 的 IP**。

---

## 4) 连接方式

因为 tcpmux 依赖 **HTTP CONNECT** 来告诉 frps 目标域名，所以你不能这样直连：

```bash
ssh big.smy.top -p 8022   # ❌ 这样 frps 不知道该转给谁
```

要用 ProxyCommand（官方示例用 socat）：

```bash
ssh -o 'ProxyCommand=socat - PROXY:公网IP:%h:%p,proxyport=8022' test@big.smy.top
ssh -o 'ProxyCommand=socat - PROXY:公网IP:%h:%p,proxyport=8022' test@small.smy.top
```

frps 会根据 `%h`（也就是 big / small 域名）分流到对应主机

---

## 5) 更舒服的用法：写到你的 `~/.ssh/config`

```sshconfig
Host big
    HostName big.smy.top
    User test
    ProxyCommand socat - PROXY:公网IP:%h:%p,proxyport=8022

Host small
    HostName small.smy.top
    User test
    ProxyCommand socat - PROXY:公网IP:%h:%p,proxyport=8022
```

以后直接：

```bash
ssh big
ssh small
```

---

因为 SSH 本身无法携带“我要去哪个域名后端”的信息给 frps
tcpmux 是目前 frp 官方唯一的“同端口分流 SSH”方案

---
