零基础也能搞定:服务器内网穿透完整配置教程
不少刚接触服务器的朋友会遇到一个常见问题:家里的NAS、开发机或办公室的内网服务器只能在局域网里用,一出门就连不上。
其实只要有一台带公网IP的云服务器,配合 服务器内网穿透 工具(比如frp),就能让外网直接访问内网设备。
下面我以最流行的frp为例,带你把整套流程走一遍。
做之前需要准备什么
开始操作前,请确认以下三样东西都在手里:
- 一台有公网IP的云服务器(记下IP和root密码),操作系统建议Ubuntu 20.04+或CentOS 7+。
- 一个已解析到该IP的域名(可选,但如果想用域名访问内网服务,这一步提前做好)。
- 内网服务器(要暴露的那台机器),同样需要能正常上网。
另外,你的云服务器控制台需要 放行 frp 用到的端口(默认服务端监听7000端口,客户端映射端口比如8080等)。
如果用的是腾讯云/阿里云,记得在安全组里添加入方向规则。
服务端部署:让云服务器成为“桥梁”
frp 分为服务端(frps)和客户端(frpc)。
先从云服务器开始。
- 下载 frp(保持服务端和客户端版本一致)
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -xzf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64
- 修改服务端配置 frps.toml(v0.52.3以上使用toml格式,旧版是ini)
bindPort = 7000
只保留这一行也可以,其他可以注释掉。
如果你希望加一个 token 做简单认证,可以加:
auth.method = "token"
auth.token = "your-strong-password"
- 启动服务端
./frps -c frps.toml &
或者用 systemd 管理(推荐生产环境使用),这里先以简单后台运行示例。
可以用 netstat -tulnp | grep 7000 确认端口已监听。
客户端配置:内网机器连上公网
回到内网服务器,下载同样版本的 frp:
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -xzf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64
编辑 frpc.toml:
serverAddr = "你的云服务器公网IP"
serverPort = 7000
auth.method = "token"
auth.token = "your-strong-password" # 如果服务端没设token,这一块可以删掉
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
这个配置的意思是:让公网服务器监听 6000 端口,所有发往这个端口的 TCP 流量都会被转发到内网机器的 22 端口(SSH)。
启动客户端:
./frpc -c frpc.toml &
看到输出 start proxy success 就代表连接成功。
避坑指南:高频问题一次说清
问题1:云服务器安全组没放行端口
最常见错误是 frp 连接不上。请务必在云控制台放行 7000 端口(服务端监听端口)以及你映射的端口(如 6000)。
问题2:客户端连接报错“connection refused”
检查服务端是否启动了 frps,以及客户端配置中的 serverAddr 是否写对了公网 IP。可以用 curl http://你的IP:7000 测试(如果服务端没加密,会返回乱码,但至少说明端口通)。
问题3:token 不匹配
服务端和客户端设置的 auth.token 必须一致,否则客户端会认证失败。
问题4:内网防火墙阻断了本地端口
确保内网机器上你要映射的服务(比如 SSH 的 22 端口)是正常运行的,且本地防火墙没拦截。可以用 systemctl status sshd 检查。
效果验证:从外网访问试试
现在你可以在任何能上网的电脑上,用 SSH 连接你的云服务器 IP 的 6000 端口,就能直接登录到内网服务器:
ssh -p 6000 你的用户名@云服务器IP
如果成功登入,说明服务器内网穿透配置完成。
同理,你可以映射 HTTP 服务(如内网的网页管理界面),只需把 localPort 改成 80,remotePort 设成一个空闲端口(比如 8080),然后浏览器访问 云服务器IP:8080 即可。
如果你正在处理服务器内网穿透,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
熟练之后,你还可以把 frp 配置成 systemd 服务,实现开机自启,彻底释放双手。