宽带没有公网IP如何通过frp实现内网穿透

文章目录 「隐藏」
  1. FRP 内网穿透原理
  2. 部署

我们需要通过外网访问家里的局域网内网设备,通常可以用公网 IP 端口转发或者内网穿透,如果用公网 IP,那就很好解决,可以参见之前文章:

经验:小白记录阿里云域名注册、 openwrt 动态 DNS(DDNS)配置成功

经验:dynv6 免费二级域名注册、 openwrt 动态 DNS 解析配置说明

如果没有公网 IP,通常需要内网穿透才行。今天尝试了一下 frp 实现内网穿透访问内网设备。

一、内网穿透原理

FRP(Fast Reverse Proxy)是一种内网穿透工具,允许用户通过公网访问内网服务。其工作原理如下:

FRP 内网穿透原理

  1. 客户端与服务器的连接

    • FRP 客户端(frpc)在内网设备上运行,FRP 服务器(frps)在公网服务器上运行。
    • frpc 启动时会主动连接到 frps,并保持这个连接。这个连接通常使用 TCP 协议。
  2. 建立隧道

    • 一旦 frpc 成功连接到 frps,它会向 frps 注册需要暴露的内网服务,包括本地 IP 和端口。
    • frps 接收到注册信息后,会在其自身上创建一个对应的监听端口。
  3. 请求转发

    • 当外部用户访问 frps 的公网 IP 和指定端口时,frps 会接收到这个请求。
    • frps 根据之前的注册信息,将请求转发到相应的 frpc,即内网设备的 IP 和端口。
  4. 数据传输

    • frpc 接收到来自 frps 的请求后,将其转发到本地服务(如 Web 服务器、数据库等)。
    • 内网服务的响应会通过 frpc 返回给 frps,然后再由 frps 返回给外部用户。

因此,要实现 frp 穿透,需要一个具备公网 IP 的服务器,前面上一篇文章写了获取一个服务器,公网 IP 为:111.173.104.53,以此服务器来说明如何通过 frp 实现内网穿透。

二、搭建 frp 示例

示例说明:

有一个公网 IP 的服务器,IP 为:111.173.104.53

内网设备:192.168.2.106,端口 8219 有一个网页,如下:

宽带没有公网IP如何通过frp实现内网穿透 - 第1张图片

实现目的:通过外网访问 http://192.168.2.106:8219 这个网页

实现步骤:

1 、服务器端安装并运行 frps

2 、内网设备安装并运行 frpc

三、 frp 实现内网穿透步骤

1 、服务器配置

❶首先打开 frp 下载页面,下载最新版的客户端:

https://github.com/fatedier/frp/releases/

部署

  1. 解压下载的压缩包。
  2. frpc 复制到内网服务所在的机器上。
  3. frps 复制到拥有公网 IP 地址的机器上,并将它们放在任意目录。

选择适合自己系统的:

宽带没有公网IP如何通过frp实现内网穿透 - 第2张图片

❷下载后解压并上传到服务器任一目录,我用宝塔上传到/www/wwwroot/frp 文件夹内:

宽带没有公网IP如何通过frp实现内网穿透 - 第3张图片

❸修改配置文件 frps.toml:

[common]bind_port = 7000  # FRP 服务器监听的端口
# 可选:设置日志级别log_level = infolog_file = ./frps.log

我就用默认的 7000 端口即可:

宽带没有公网IP如何通过frp实现内网穿透 - 第4张图片

❹服务器启动 frps 服务:

cd /www/wwwroot/frp  #进入 frps 目录./frps -c ./frps.toml  #运行 frps

宽带没有公网IP如何通过frp实现内网穿透 - 第5张图片

2 、客户端配置:

❶同样下载适合客户端的 frp 程序,我的 192.168.2.106 的客户端为 N1 盒子,构架为 arm64,因此下载 frp_0.60.0_linux_arm64 版本,

❷同样上传解压文件到客户端的任一目录,如我上传到 N1 的/www/frp 目录:宽带没有公网IP如何通过frp实现内网穿透 - 第6张图片

❸需要修改 frpc.toml 的配置内容:

[common]server_addr = <FRP_SERVER_IP>  # 替换为您的 FRP 服务器的公网 IPserver_port = 7000               # 与 frps.ini 中的 bind_port 一致
[N1]                #连接客户端名称,不同客户端名称唯一type = tcplocal_ip = 192.168.2.106         # 内网设备的 IPlocal_port = 8219                 # 内网设备的端口remote_port = 8219                # 外部访问的端口

设置内容为:

宽带没有公网IP如何通过frp实现内网穿透 - 第7张图片

❹运行客户端的 frpc:

cd /www/frp #进入客户端 frpc 目录./frpc -c ./frpc.toml  #运行 frpc

宽带没有公网IP如何通过frp实现内网穿透 - 第8张图片

此时,服务器端可以看到连接上的客户端信息:

宽带没有公网IP如何通过frp实现内网穿透 - 第9张图片

3 、实现外网访问内网设备

通过服务器访问内网设备:通过访问 FRP 服务器的 IP 地址和端口 来访问内网设备的服务。例如:

http://<FRP_SERVER_IP>:8219

如访问 http://111.173.104.53:8219,即可正常访问内网设备了:

宽带没有公网IP如何通过frp实现内网穿透 - 第10张图片

【注意】:如无法正常访问,需要在服务器端放行对应端口,如 8219 端口,宝塔的操作路径:【安全】➥【系统防火墙】➥【添加端口规则】➥【端口】输入需放行端口➥【确定】

宽带没有公网IP如何通过frp实现内网穿透 - 第11张图片

四、 frps 和 frpc 一直运行设置

以上只是临时运行,如果退出终端,则 frps 或 frpc 则停止运行,因此如果要程序在后台一直运行,可以使用 nohup,如服务器端 frps 运行代码:

nohup ./frps -c ./frps.toml

宽带没有公网IP如何通过frp实现内网穿透 - 第12张图片客户端 frpc 运行代码:

nohup ./frpc -c ./frpc.toml 

另外也可以设置程序随系统自动启动。

五、参考资料

https://gofrp.org/zh-cn/docs/overview/

宽带没有公网IP如何通过frp实现内网穿透 - 第13张图片

有很多示例可以参考,实现更高阶应用。

 

《宽带没有公网IP如何通过frp实现内网穿透》留言数:0

发表留言