服务器内网穿透访问住宅主机服务:服务器内网穿透访问住宅主机

写在前面:为什么你需要用服务器内网穿透访问住宅主机

很多人在家里搭了NAS、开发服务器或监控面板,但运营商不给公网IP,或者给的也是动态IP,没法直接从外网访问。
通过内网穿透工具,你可以租一台低配云服务器作为跳板,让家中的主机主动连接到这台云服务器,然后在云服务器上开一个端口,所有发往该端口的流量都会被转发到你家里服务的端口。
这样你就能在任何地方通过公网IP访问家里的服务了。
本文以最流行的 frp 为例,从零开始讲清楚每个步骤。

准备阶段:你需要的东西和系统环境

  • 一台公网服务器(随便几十块钱的轻量云即可,操作系统建议 CentOS 7+ 或 Ubuntu 20.04+,本文以 Ubuntu 22.04 为例)。
  • 一台家庭内网主机(可以是树莓派、旧电脑或NAS,同样 Linux 或 Windows 都行,这里用 Linux 举例)。
  • frp 软件包:到 frp GitHub Releases 下载对应架构的压缩包。一般下载 frp_0.xx.x_linux_amd64.tar.gz(64位 x86)。

两个机器都能正常上网,并且家里的主机能主动访问公网服务器(HTTP/HTTPS 和自定义端口)。

分步操作:从下载到启动一次跑通

1. 在公网服务器上部署 frps(服务端)

SSH 登录你的公网服务器,执行:

wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
tar -xzf frp_0.58.0_linux_amd64.tar.gz
cd frp_0.58.0_linux_amd64

编辑服务端配置文件 frps.toml(新版 frp 使用 TOML 格式,旧版是 ini,以下按新版 TOML 示例):

[common]
bind_port = 7000

保存后启动:

./frps -c frps.toml

看到 start frps success 即成功。
如果报端口被占用,换一个端口(如 7001)并同步修改后续配置。

重要:需要在云服务器的安全组/防火墙中放行 bind_port(7000)以及后面打算给客户端用的远程端口(例如 8080),否则客户端连不上。

2. 让 frps 后台运行并开机自启

screennohup 简单后台:

nohup ./frps -c frps.toml > frps.log 2>&1 &

更推荐使用 systemd 管理,确保重启后自动启动:

sudo vi /etc/systemd/system/frps.service

写入:

[Unit]
Description=frp server
After=network.target

[Service]
Type=simple
ExecStart=/root/frp_0.58.0_linux_amd64/frps -c /root/frp_0.58.0_linux_amd64/frps.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

然后执行:

sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps

看到 active (running) 即可。

3. 在家里主机上部署 frpc(客户端)

frp_0.58.0_linux_amd64.tar.gz 下载到家里主机,同样解压。
也可以直接用 scp 从服务器下载:

scp root@你的公网IP:~/frp_0.58.0_linux_amd64/frpc ~/
scp root@你的公网IP:~/frp_0.58.0_linux_amd64/frpc.toml ~/

编辑 frpc.toml

[common]
server_addr = "你的公网IP"
server_port = 7000

[web]
type = "tcp"
local_ip = "127.0.0.1"
local_port = 80
remote_port = 8080
这里假设你家里有 Web 服务(比如 Nginx 或本地开发环境)监听在 80 端口。如果你想访问其他服务(如 SSH),修改 local_portremote_port 即可。

启动客户端测试:

./frpc -c frpc.toml

看到 start proxy success 表示连接成功。

4. 客户端同样设置自启

在家里的主机上创建 systemd 服务(路径根据实际情况调整):

sudo vi /etc/systemd/system/frpc.service

内容:

[Unit]
Description=frp client
After=network.target

[Service]
Type=simple
ExecStart=/home/pi/frp_0.58.0_linux_amd64/frpc -c /home/pi/frp_0.58.0_linux_amd64/frpc.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用并启动:

sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
sudo systemctl status frpc

避坑指南:常见报错与排查方法

  • 连接超时或拒绝:检查公网服务器防火墙是否放行了 bind_portremote_port。云服务商安全组也需要入方向允许这两个端口。
  • 客户端报错dial tcp ... i/o timeout:大概率是家里网络禁止出站到服务器端口,检查家里路由器是否有限制,或改用其他端口(如 443)。
  • bind_port 冲突:frps 默认 7000 端口,如果已被占用,用 netstat -tlnp | grep 7000 确认,然后改端口。
  • 服务已启动但外网访问不到:确认家里主机上的本地服务是否正常运行,可以用 curl http://127.0.0.1:80 测试。
  • systemd 启动失败:查看日志 journalctl -u frpc.service -n 50,多半是路径或权限问题。

效果验证:确保隧道通路上线

访问 http://你的公网IP:8080 应该能直接看到家里主机的 Web 服务页面。
如果出现错误页面,回退检查每一步的状态日志。
更可靠的方法:在家里主机上执行 tail -f frpc.log 同时刷新浏览器,观察是否有 accept new connection 字样。
如果看到这个,说明流量已经成功打回家了。

常见问题解答

问:frp 支持 UDP 吗?
支持,但需要将 type 改为 udp,并确保服务器和客户端都配置正确。

问:没有公网服务器怎么办?
可以用免费内网穿透服务(如 ngrok、Tailscale),但稳定性和自定义能力不如自建 frp。如果预算紧张,可以先用一台 1 核 1G 的低价云服务器起步。

问:家里主机掉线后重连会自动恢复吗?
设置好 systemd 的 Restart=on-failure 后,frpc 崩溃或网络闪断后会尝试自动重启,通常几秒内恢复。

问:如何添加更多端口映射?
在frpc.toml中加新的 proxy 段,比如 [ssh] type = tcp local_port = 22 remote_port = 2222,然后重启 frpc。

如果你在操作中遇到其他具体报错,可以先去 frp 官方文档或社区搜索,多数问题都有现成解决方案。
按照本文的步骤一步步走,普通人半小时内就能完成服务器内网穿透访问住宅主机服务的搭建。

分享到:
上一篇
服务器异地容灾备份住宅主机方案:住宅主机做异地容灾备份
下一篇
宝塔面板定时清理网站缓存文件的完整步骤
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意