好的 👍 我帮你写一篇完整的 frp 内网穿透教程博文,内容会包含:
- frp 简介
- 使用场景
- 服务端(frps)配置
- 客户端(frpc)配置
- 常见问题和优化
frp 内网穿透教程:轻松实现远程访问内网服务
什么是 frp?
frp (Fast Reverse Proxy) 是一款高性能的反向代理应用,用于内网穿透。它可以将内网中的服务(例如 Web 服务、SSH、远程桌面等)暴露到公网,方便远程访问。
常见应用场景:
- 在家远程访问公司或家庭内网服务器
- 将本地开发环境映射到公网,方便测试和演示
- 为树莓派、NAS 等设备提供外网访问入口
安装 frp
frp 是 Go 写的单个二进制程序,部署非常简单:
# 下载 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
:
# frps.toml
bindPort = 7000 # frpc 客户端连接 frps 的端口
dashboardPort = 7500 # Web 管理面板端口
dashboardUser = "admin" # 面板用户名
dashboardPwd = "admin123" # 面板密码
auth.method = "token" # 使用 token 验证
auth.token = "1234567890" # 客户端和服务端必须一致
启动服务端:
./frps -c frps.toml
后台运行(推荐使用 systemd 管理):
# /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
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
客户端配置(frpc)
客户端运行在 内网机器(例如你的家用电脑、树莓派、NAS)。
编辑 frpc.toml
:
# 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
。
启动客户端:
./frpc -c frpc.toml
同样可以用 systemd
托管。
常见问题
- 防火墙问题
- 确保 VPS 开放了
bindPort
、dashboardPort
和所有remotePort
。 例如用
ufw
:sudo ufw allow 7000 sudo ufw allow 7500 sudo ufw allow 6000
- 确保 VPS 开放了
- Token 验证失败
- 检查
frps.toml
和frpc.toml
的auth.token
是否一致。
- 检查
- HTTP 映射无效
- 确保域名解析到 VPS 的公网 IP。
- 如果用 80/443 端口,需要在 VPS 开放这些端口。
总结
frp 的优点是:
- 配置简单
- 支持多种协议(TCP、UDP、HTTP、HTTPS、STCP、XTCP)
- 有 Dashboard 方便管理
在实际使用中,建议:
- 使用 Token 或 TLS 加强安全性
- 配合 Nginx 反向代理,让多个服务共享 80/443
- 配合 systemd 实现开机自启
这样一来,就可以非常方便地在公网访问内网服务了 🚀
要不要我帮你把这篇文章再改写成 Jekyll 博文格式(带 front matter
),直接放到 _posts/
就能用?