文章

frp 内网穿透教程:轻松实现远程访问内网服务

frp 内网穿透教程:轻松实现远程访问内网服务

什么是 frp?

frp (Fast Reverse Proxy) 是一款高性能的反向代理应用,用于内网穿透。它可以将内网中的服务(例如 Web 服务、SSH、远程桌面等)暴露到公网,方便远程访问。

常见应用场景:

  • 在家远程访问公司或家庭内网服务器

  • 将本地开发环境映射到公网,方便测试和演示

  • 为树莓派、NAS 等设备提供外网访问入口


安装 frp

frp 是 Go 写的单个二进制程序,部署非常简单:

1
2
3
4
# 下载 frp(以 0.60.0 为例,可去 GitHub Releases 获取最新版本)
wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz
tar -zxvf frp_0.60.0_linux_amd64.tar.gz
cd frp_0.60.0_linux_amd64

解压后会看到:

  • frps:服务端程序

  • frps.toml:服务端配置文件

  • frpc:客户端程序

  • frpc.toml:客户端配置文件


服务端配置(frps)

服务端需要有 公网 IP 的 VPS,比如阿里云、腾讯云、搬瓦工等。

编辑配置文件 frps.toml

1
2
3
4
5
6
7
# frps.toml
bindPort = 7000                # frpc 客户端连接 frps 的端口
dashboardPort = 7500           # Web 管理面板端口
dashboardUser = "admin"        # 面板用户名
dashboardPwd = "admin123"      # 面板密码
auth.method = "token"          # 使用 token 验证
auth.token = "1234567890"      # 客户端和服务端必须一致

启动服务端:

1
./frps -c frps.toml

后台运行(推荐使用 systemd 管理):

1
2
3
4
5
6
7
8
9
10
11
12
# /etc/systemd/system/frps.service
[Unit]
Description=frp server
After=network.target

[Service]
ExecStart=/root/frp/frps -c /root/frp/frps.toml
Restart=always
User=root

[Install]
WantedBy=multi-user.target
1
2
3
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps

客户端配置(frpc)

客户端运行在 内网机器(例如你的家用电脑、树莓派、NAS)。

编辑 frpc.toml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# frpc.toml
serverAddr = "你的VPS公网IP"
serverPort = 7000
auth.method = "token"
auth.token = "1234567890"

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["example.com"]

说明:

  • ssh:把内网的 22 端口映射到 VPS 的 6000 端口。

    • 使用时直接 ssh -p 6000 user@你的VPS_IP 即可远程登录。
  • web:把内网的 Web 服务映射到公网域名 example.com

启动客户端:

1
./frpc -c frpc.toml

同样可以用 systemd 托管。


常见问题

  1. 防火墙问题

    • 确保 VPS 开放了 bindPortdashboardPort 和所有 remotePort

    • 例如用 ufw

      1
      2
      3
      
        sudo ufw allow 7000
        sudo ufw allow 7500
        sudo ufw allow 6000
      
  2. Token 验证失败

    • 检查 frps.tomlfrpc.tomlauth.token 是否一致。
  3. HTTP 映射无效

    • 确保域名解析到 VPS 的公网 IP。

    • 如果用 80/443 端口,需要在 VPS 开放这些端口。


总结

frp 的优点是:

  • 配置简单

  • 支持多种协议(TCP、UDP、HTTP、HTTPS、STCP、XTCP)

  • 有 Dashboard 方便管理

在实际使用中,建议:

  • 使用 Token 或 TLS 加强安全性

  • 配合 Nginx 反向代理,让多个服务共享 80/443

  • 配合 systemd 实现开机自启

这样一来,就可以非常方便地在公网访问内网服务了 🚀


本文由作者按照 CC BY 4.0 进行授权