# Frp简单游戏联机


<!--more-->
> [!abstract]-
> 放假回家想和朋友联机，但是双方网络都是对称型NAT，只能通过FRP 中转流量。

## NAT 检测
可以使用[NAT Checker](https://natchecker.com/)这个网站查看自己和朋友的NAT类型。

打洞成功的最重要的一点是，其中一方不是 `对称型NAT`。如果能打洞自然是打洞更好。
![](https://1mg.1144514.xyz/2026/01/20260114114329842.webp)

如果双方都是 `对称型NAT` ，就只能通过 VPS中转流量了。这就用到了`FRP`。

## FRP
>## frp 是什么？
>frp 是一款高性能的反向代理应用，专注于内网穿透。它支持多种协议，包括 TCP、UDP、HTTP、HTTPS 等，并且具备 P2P 通信功能。使用 frp，您可以安全、便捷地将内网服务暴露到公网，通过拥有公网 IP 的节点进行中转。

### 服务端
#### 服务器选择和设置
最好选择国内的 VPS ，看了下论坛，推荐的有 `腾讯云的锐驰`。

一开始我用的 新加坡的VPS。虽然我和朋友都是移动的宽带，这个新加坡的VPS 国内移动延迟才50 左右，但是使用下来有严重的丢包问题，联机起来经常掉线。
然后就找了另一个朋友借了台阿里云深圳的VPS，使用起来就没问题了。

国内面板有防火墙需要设置下规则
入站允许：
- 7000/tcp and udp
- 6000/tcp and udp

出站允许：
- 允许所有 TCP出站
- 允许所有 UDP 出站

#### 基础配置
- **下载**：wget 对应的链接：[Releases · fatedier/frp](https://github.com/fatedier/frp/releases)。一般是 Linux amd64 版本。
- **解压**：`tar -zxvf <fielname>`。

进入解压后的文件夹，编辑 `frps.toml`。

`auth.token` 换复杂一点。

不需要 `web面板` 可以把最后四行删掉。

如果使用我的配置需要使用端口转发访问。
如果嫌麻烦可以修改`webServer.addr = "127.0.0.1"` 这一行为`webServer.addr = "0.0.0.0"`，但是需要最好将 `webServer.password` 设置成强口令。

```toml
# frps.toml
bindPort = 7000
kcpBindPort = 7000

auth.method = "token"
auth.token = ""

webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
```

运行 `./frps -c ./frps.toml`，显示以下信息则启动成功。
```
2026-01-13 22:14:03.576 [I] [frps/root.go:115] frps uses config file: ./frps.toml
2026-01-13 22:14:03.675 [I] [server/service.go:241] frps tcp listen on 0.0.0.0:7000
2026-01-13 22:14:03.676 [I] [server/service.go:250] frps kcp listen on udp 0.0.0.0:7000
2026-01-13 22:14:03.676 [I] [frps/root.go:124] frps started successfully
2026-01-13 22:14:03.676 [I] [server/service.go:358] dashboard listen on 127.0.0.1:7500
```

#### 设置systemd 自启动
```shell
vim /etc/systemd/system/frps.service
```

写入以下信息并保存
```toml
[Unit]
Description=FRP Server Service
After=network.target

[Service]
Type=simple
DynamicUser=yes
Restart=always
RestartSec=5s
ExecStart=/opt/frp_0.66.0_linux_amd64/frps -c /opt/frp_0.66.0_linux_amd64/frps.toml
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
```
为了安全这里不使用 `User=nobody`，而是 `DynamicUser=yes`。

重新加载系统配置
```
systemctl daemon-reload
```

启动 frps 并设置开机自启
```
systemctl enable --now frps
```

查看运行状态
```
systemctl status frps
```

实时滚动查看 frps 的日志
```
journalctl -u frps -f
```

### 客户端
下载对应的链接：[Releases · fatedier/frp](https://github.com/fatedier/frp/releases)。一般是 window amd64 版本。
> [!TIP]
> 下载前关闭 Windows defender，Windows defender 会识别反向连接的特征并删除下载的 frp。下载后将 frp 文件夹加入排除项，然后再开启 Windows defender。

进入对应文件夹，编辑 `frpc.toml` 文件。
```toml
# frpc.toml
serverAddr = "<VPS的IP>"
serverPort = 7000

auth.method = "token"
auth.token = "<与前文设置对应的token>"

[transport]
protocol = "kcp"
proxyURL = ""
tcpMux = true
heartbeatInterval = 10
heartbeatTimeout = 30

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = <游戏联机端口>
remotePort = 6000

[[proxies]]
name = "test-udp"
type = "udp"
localIP = "127.0.0.1"
localPort = <游戏联机端口>
remotePort = 6000
```

这里用的是 KCP 协议，而不是TCP协议。
AI的解答，二者区别如下：

|        | KCP 模式                     | TCP 模式         |
| ------ | -------------------------- | -------------- |
| 稳定性    | **极强**。在丢包 10% 以上的环境下表现更优。 | 易受网络波动影响，握手严格。 |
| 延迟     | **更低**。采用了更激进的重传算法。        | 正常环境下较低。       |
| 流量消耗   | **偏高**。会额外消耗约 10%~20% 流量。  | 正常。            |
| 防火墙友好度 | 一般。部分地区运营商会干扰 UDP/KCP 流量。  | 极好。            |

PowerShell 运行连接：`frpc -c frpc.toml`，如果信息显示 `success` 则成功。

> [!WARNING]
> 使用前需要将 shell 的代理环境关掉，否则会启动失败。

## 参考
1. [frp](https://gofrp.org/zh-cn/)









---

> 作者: Chifan  
> URL: https://eo.chifan.de/posts/frp-game-connect/  

