使用 Docker 搭建 frp 内网穿透

背景

家里旧电脑重装了 Linux 系统,并且搭建了一些服务比如Syncthing,想要将其在外面(如公司)也能同步,由于家庭网络是处于NAT 内部的,再外部无法直接访问,因此需要借助公网服务器再搭建一套 frp 内网穿透。

💻服务端配置

1.准备配置文件 frps.toml

公网服务器 上创建配置目录和文件:

1
2
3
4
5
6
# 创建配置目录
mkdir -p /opt/frp/frps
cd /opt/frp/frps

# 创建文件并编辑
vim frps.toml

内容示例:

1
2
3
4
5
bindPort = 7000         # 客户端连接端口
vhostHTTPPort = 8080 # HTTP 虚拟主机端口(可选)

[auth]
token = "your-secret-token" # 安全密钥,客户端需一致

⚠️ 建议将 token 设置为一串强随机字符串,用于安全验证。

2.运行 frps 容器

1
2
3
4
5
6
7
8
docker run -d \
--name frps \
-v /opt/frp/frps/frps.toml:/etc/frp/frps.toml \
-p 7000:7000 \
-p 8080:8080 \
--restart always \
registry.cn-hangzhou.aliyuncs.com/lusyoe/frps:v0.62.0 \
-c /etc/frp/frps.toml

⚠️ 记得开启安全组,对外放行70008080端口。

🐳客户端配置

1. 准备配置文件 frpc.toml

家里电脑 上创建配置目录和文件:

1
2
3
4
5
6
# 创建配置目录
mkdir -p /opt/frp/frpc
cd /opt/frp/frpc

# 创建文件并编辑
vim frpc.toml

内容示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
serverAddr = "x.x.x.x"  # 公网服务器的公网IP
serverPort = 7000

[auth]
token = "your-secret-token" # 安全密钥,客户端需一致

# Syncthing 主同步端口
[[proxies]]
name = "syncthing-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22000
remotePort = 22000 # 公网访问端口

# Web 管理界面(可选)
[[proxies]]
name = "syncthing-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8384
remotePort = 8384

⚠️ 记得开启安全组,对外放行8384端口

2.运行 frpc 容器

1
2
3
4
5
6
7
docker run -d \
--name frpc \
-v /opt/frp/frpc/frpc.toml:/etc/frp/frpc.toml \
--network host \
--restart always \
registry.cn-hangzhou.aliyuncs.com/lusyoe/frpc:0.62 \
-c /etc/frp/frpc.toml

⚠️ 注意 --network host:表示容器共享主机网络(否则 localhost 无法正确映射 Syncthing)。

✅ 最终效果

  • 你访问 公网服务器 的 http://[公网IP]:8384 会直连家里的 Syncthing。
  • 在添加设备的时候需要在[高级]里面将地址 dynamic 改为:tcp://公网IP:22000

PS:这样不使用syncthing公共的中继池,也会更安全更稳定。