内网穿透配置教程:从零搭建到远程访问验证
内网穿透要解决的核心问题只有一个:让没有公网 IP 的内网服务,能被外网稳定访问。
常见做法是在一台有公网 IP 的服务器上运行穿透服务端,内网设备运行客户端并主动连接服务端,由服务端把公网请求转发进来。
本文以 frp 为例,讲清从准备到验证的完整流程,适用于 Linux 服务器、家庭 NAS 或办公内网 Web 服务。
开始前先确认三件事
动手前建议先核对环境和权限,避免配到一半才发现条件不满足。
- 一台有公网 IP 的服务器,系统可以是常见 Linux 发行版,能通过 SSH 登录。
- 内网需要暴露的服务已经能本地访问,例如
http://127.0.0.1:8080。 - 你拥有内网设备的操作权限,可以安装软件、修改配置和放行防火墙。
如果只是临时测试,用 ssh -R 反向隧道也能实现,但长期运行建议用 frp 或同类工具,配置更清晰,也方便做开机自启。
公网服务端部署 frp
登录公网服务器,下载与系统架构匹配的 frp 压缩包。
版本号请以官方发布页为准,下面用占位版本演示,替换成实际版本即可。
wget https://github.com/fatedier/frp/releases/download/v0.xx.x/frp_0.xx.x_linux_amd64.tar.gz
tar -zxvf frp_0.xx.x_linux_amd64.tar.gz
cd frp_0.xx.x_linux_amd64
编辑服务端配置文件 frps.toml,最小可用配置如下:
bindPort = 7000
auth.method = "token"
auth.token = "换成你自己的长随机字符串"
其中 bindPort 是客户端连接服务端的端口,auth.token 用来防止未授权客户端接入,不要留空或使用弱口令。
启动服务端并设置开机自启:
sudo cp frps /usr/local/bin/
sudo mkdir -p /etc/frp
sudo cp frps.toml /etc/frp/
新建 /etc/systemd/system/frps.service:
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=always
[Install]
WantedBy=multi-user.target
启用并检查状态:
sudo systemctl daemon-reload
sudo systemctl enable --now frps
sudo systemctl status frps
看到 active (running) 说明服务端已启动。
如果失败,用 journalctl -u frps -n 50 查看具体报错。
内网客户端连接与映射
在内网设备上同样下载 frp,编辑 frpc.toml。
假设要把内网 127.0.0.1:8080 的 Web 服务映射到公网服务器的 8080 端口:
serverAddr = "你的公网服务器IP"
serverPort = 7000
auth.method = "token"
auth.token = "与服务端一致的长随机字符串"
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8080
客户端也可以用 systemd 守护,写法与服务端类似,把 ExecStart 换成 /usr/local/bin/frpc -c /etc/frp/frpc.toml 即可。
启动后检查日志:
sudo systemctl status frpc
日志里出现 start proxy success 表示映射建立成功。
放行端口与访问验证
服务端和客户端都启动后,还需要在公网服务器的防火墙或安全组放行对应端口。
以 ufw 为例:
sudo ufw allow 7000/tcp
sudo ufw allow 8080/tcp
如果用的是云服务器,还要在控制台安全组里放行同样的端口。只放行真正需要的端口,不要图省事开放全部端口。
验证分三步:
- 在公网服务器上执行
curl http://127.0.0.1:8080,能返回内网服务内容,说明转发链路通了。 - 在本地浏览器访问
http://公网服务器IP:8080,能看到页面,说明外网访问正常。 - 内网客户端重启后,确认代理自动恢复,说明守护配置生效。
常见问题与避坑要点
连不上服务端:先确认公网 IP、serverPort 和防火墙放行都正确,再用 telnet 公网IP 7000 测试端口连通性。
映射成功但页面打不开:检查 localIP 和 localPort 是否指向真实服务,内网服务是否只监听了 127.0.0.1 而客户端不在同一台机器。
token 不一致:客户端和服务端的 auth.token 必须完全一致,注意不要有多余空格。
安全提醒:暴露到公网的服务建议加访问认证,HTTP 类服务可以配合 Nginx 反向代理和 HTTPS,数据库、远程桌面等敏感端口不要直接映射到公网。
什么时候需要内网穿透
适合的场景包括:远程访问家里 NAS、调试内网 Web 项目、给同事临时演示本地服务。
如果只是偶尔用一次,SSH 反向隧道更轻量;
如果长期使用、需要多服务映射和稳定守护,frp 这类工具更合适。
配置完成后建议定期检查日志和端口开放情况,确保服务可用且没有多余暴露面。
如果你正在处理内网穿透配置教程相关的问题,建议先按本文步骤完整执行一遍,再根据自己的网络环境微调;
遇到异常时优先回看避坑部分和日志输出。