服务器内网穿透教程:零基础实现服务器内网穿透
什么是内网穿透,为什么你需要它
内网穿透就是把没有公网 IP 的内网服务(比如家里的 NAS、开发中的 API、远程桌面)通过一台中间服务器暴露到公网上,让外网也能直接访问。
典型场景:在家调试代码、远程管理内网设备、搭建临时演示环境。
如果你是刚接触服务器的新手,这条 服务器内网穿透教程 会带你用 frp 这个轻量工具,在 15 分钟内跑通第一个穿透隧道。
准备工作清单
完成本教程你需要:
- 一台有公网 IP 的云服务器(VPS,最低配 1 核 1G 即可,系统推荐 CentOS 7+ 或 Ubuntu 20+)
- 一台目标内网机器(可以是 Linux、Windows 或 macOS,本文以 Linux 为例)
- SSH 客户端(Windows 用 Xshell 或 Putty,Mac/Linux 直接用终端)
- 知道服务端和客户端的防火墙如何放行端口(云服务商的安全组也要配置)
注意:公网服务器的 防火墙 和云平台 安全组 都要开放 frp 使用的端口(默认 7000 用于控制,其他端口用于具体服务)。
第一步:在公网服务器上部署 frp 服务端
登录你的公网服务器,依次执行以下命令:
# 下载 frp 最新稳定版(以 0.53.2 为例,版本号根据官方调整)
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
# 解压
tar -xzf frp_0.53.2_linux_amd64.tar.gz
# 移到 /usr/local 方便管理
sudo mv frp_0.53.2_linux_amd64 /usr/local/frp
编辑服务端配置文件 frps.toml(注意新版 frp 使用 toml 格式):
sudo vim /usr/local/frp/frps.toml
写入以下内容(替换 your_token 为你自己设的密钥):
bind_port = 7000
# 用于身份验证的 token,客户端必须一致
auth.token = "your_token"
# 面板管理端口(可选,建议开启方便查看状态)
web_server.addr = "0.0.0.0"
web_server.port = 7500
web_server.user = "admin"
web_server.password = "admin123"
启动服务端:
/usr/local/frp/frps -c /usr/local/frp/frps.toml &
检查是否启动成功:
netstat -tuln | grep 7000
# 如果看到 LISTEN 就说明成功了
第二步:在内网机器上部署 frp 客户端
进入你的内网机器(以 Linux 为例),同样下载并解压 frp(注意 CPU 架构,如果是 arm 请选 arm64 版本)。
# 同样下载客户端(与服务端同版本),用 scp 或 wget 都行
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar -xzf frp_0.53.2_linux_amd64.tar.gz
sudo mv frp_0.53.2_linux_amd64 /usr/local/frp
编辑客户端配置文件 frpc.toml:
sudo vim /usr/local/frp/frpc.toml
写入以下内容(假设你想穿透内网 80 端口的 Web 服务):
server_addr = "你的公网服务器IP"
server_port = 7000
auth.token = "your_token"
[[proxies]]
name = "web"
type = "tcp"
local_ip = "127.0.0.1"
local_port = 80
remote_port = 8080
启动客户端:
/usr/local/frp/frpc -c /usr/local/frp/frpc.toml &
第三步:外网访问验证
现在你可以在任何能上网的设备上,访问 http://你的公网服务器IP:8080 — 如果能正常打开内网机器上的 Web 页面,说明隧道已通。
同样,如果你想穿透 SSH 服务,把配置文件改成:
[[proxies]]
name = "ssh"
type = "tcp"
local_ip = "127.0.0.1"
local_port = 22
remote_port = 2222
然后外网通过 ssh -p 2222 用户名@公网服务器IP 即可连接内网机器。
避坑与高频问题
- 防火墙/安全组没开端口:这是最常见的原因。公网服务器需要放行 7000、7500(管理面板)和所有 remote_port(如上例 8080);内网机器一般不需要额外设置。
- 客户端和服务端版本不一致:务必下载同一个大版本(如 0.53.x),否则可能报错连接失败。
- Token 不匹配:
frps.toml和frpc.toml中的auth.token必须完全一致。 - 是否设置开机自启:虽然本教程用临时启动,生产环境建议写 systemd 服务。创建
/etc/systemd/system/frps.service和frpc.service文件,内容参考官方示例。 - 端口冲突:确保 remote_port 在公网服务器上未被占用。
如果你在操作过程中遇到 connection refused,先执行 tail -f /var/log/frpc.log 查看客户端日志,绝大多数问题一眼就能定位。
总结
跟着这份 服务器内网穿透教程,你从零完成了 frp 服务的搭建与初步使用。
核心就是三步:公网服务器装服务端 → 内网机器装客户端 → 配置 proxy 并启动。
建议你在无风险测试环境先跑通一次,再应用到实际项目中。
后续还可以学习 frp 的 HTTPS 穿透、UDP 打洞、多隧道管理等高级玩法,搭配 Dashboard 面板彻底掌控你的内网服务。