☰
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
2026/11/5 3:47:07 网站建设 项目流程

📌 核心结论(TL;DR):

  1. 内网穿透背景:由于 NAT 技术的存在,外部网络无法主动连接内网的私有 IP。

  2. 核心思路:利用一台拥有公网 IP 的服务器作为中转站。

  3. frp 架构:由运行在公网的frps和运行在内网的frpc组成。内网主动连接公网建立隧道。

  4. 配置逻辑:客户端通过配置localPort和remotePort,将公网端口与内网服务绑定。

一、 为什么需要内网穿透?


在 IPv4 地址枯竭的今天,家庭宽带和公司网络通常都在 NAT 路由器之后,使用私有 IP(如 192.168.x.x)。如果你想在家里搭建一个 Web 服务器供外网访问,或者想在公司远程 SSH 连接家里的电脑,外网是无法直接找到你的。这就是内网穿透要解决的问题。

二、 frp 工作原理

frp 是一款高性能的反向代理应用。

  1. 在内网机器上运行frpc客户端,主动向公网服务器的frps发起连接(因为内网访问外网是被允许的)。

  2. 建立一条长期存在的安全隧道。

  3. 当外部用户访问公网服务器的指定端口时,frps会顺着隧道把请求转发给内网的frpc。

三、 实战配置

(插入 frpc.toml 的截图)

# frpc.toml (运行在内网) serverAddr = "云服务器公网IP" serverPort = 7000 [[proxies]] name = "ssh-tunnel" type = "tcp" localIP = "127.0.0.1" localPort = 22 # 内网本地服务端口 remotePort = 8081 # 暴露给公网的端口

四、 测试验证与避坑

(插入 ssh -p 8081 连接成功的截图)
配置完成后,启动frps和frpc。在公网机器上执行ssh -p 8081 用户名@云服务器IP,成功通过公网 8081 端口登录到了内网的 22 端口。
⚠️ 核心避坑:

  1. 云服务器的安全组必须放行7000(通信端口)和8081(映射端口)。

  2. 如果想让 frp 在后台常驻,可以使用nohup ./frpc -c frpc.toml >/dev/null 2>&1 &命令。

自我实战操作

cd ~/linux_study/network_test mkdir frp_demo && cd frp_demo
第一步:下载并解压 frp

(如果 GitHub 下载慢,可以找网上的国内镜像加速)

# 下载 Linux amd64 版本 wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz 解压 tar -zxvf frp_0.58.1_linux_amd64.tar.gz cd frp_0.58.1_linux_amd64
第二步:配置公网端(frps.toml)
vim frps.toml

(输入以下代码)

bindPort = 7000

(默认通信端口是 7000。重点排坑:去云服务器控制台的安全组里,放行 7000 端口!)

第三步:配置内网端(frpc.toml)
vim frpc.toml

(输入以下代码)

serverAddr = "127.0.0.1" # 模拟环境填 127.0.0.1。如果你在家里,填云服务器的公网 IP serverPort = 7000 # 连向 frps 的 7000 端口 [[proxies]] name = "ssh-tunnel" type = "tcp" localIP = "127.0.0.1" localPort = 22 # 内网真正要暴露的服务端口 (这里是 SSH 的 22) remotePort = 8081 # 映射到公网的 8081 端口

(重点排坑:安全组里还要放行 8081 端口!)

第四步:启动并测试

终端 A(启动服务端):

./frps -c frps.toml

(看到frps started successfully说明成功)

终端 B(启动客户端):

./frpc -c frpc.toml

(看到start proxy success说明隧道建好了)

第五步:见证奇迹

现在,你用本地的电脑(或者直接开第三个终端):

# 尝试连接云服务器的 8081 端口 ssh -p 8081 blog@127.0.0.1

现象:当执行ssh -p 8081 blog@127.0.0.1时,终端弹出了The authenticity of host ... can't be established.的指纹确认提示。

说明:这是 SSH 的首次连接安全机制。因为我们刚才配置了 frp 内网穿透,将本地的 22 端口映射到了 8081 端口。SSH 客户端发现了这个“陌生”的隧道端口,为了防范中间人攻击,要求我们核对 RSA/ED25519 指纹。

操作:输入yes确认后,成功进入了目标主机的终端。这标志着 frp 穿透大获全胜,以后在家里、在公司,随时随地都可以用 8081 这个暗门,连回这台服务器了!

现象:在终端执行ssh -p 8081 blog@127.0.0.1并输入密码后,成功弹出了 Ubuntu 的欢迎信息,提示符变成了blog@VM-0-16-ubuntu:~$。

深度解析:

  1. 我明明连接的是8081端口,为什么能登录进blog用户?因为 frp 客户端在后台默默把请求转发给了本机的22端口。

  2. 这个实战虽然是在同一台机器上模拟的,但如果在真实的办公场景中:

    • frps(服务端)跑在云服务器上。

    • frpc(客户端)跑在公司的内网电脑上。

    • 那么你在家里,只要执行ssh -p 公网IP的8081端口,就能直接远程操控公司的电脑!

  3. 安全提醒:真实场景下,千万不要把带有公网 IP 的 22 端口直接暴露出去,使用 frp 映射加上强密码/密钥认证,是最稳妥的方案。

(实战演示完毕后,记得用Ctrl+C关掉 frps 和 frpc,或者用文档里提到的nohup让它们在后台运行:nohup ./frpc -c frpc.toml &>/dev/null &)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询