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

我们需要通过外网访问家里的局域网内网设备,通常可以用公网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有一个网页,如下:

20241023131056312

实现目的:通过外网访问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 地址的机器上,并将它们放在任意目录。

选择适合自己系统的:

20241023131057507

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

20241023131057946

❸修改配置文件frps.toml:

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

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

20241023131058209

❹服务器启动frps服务:

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

20241023131058480

2、客户端配置:

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

❷同样上传解压文件到客户端的任一目录,如我上传到N1的/www/frp目录:20241023131059706

❸需要修改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                # 外部访问的端口

设置内容为:

20241023131059448

❹运行客户端的frpc:

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

20241023131100544

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

20241023131100243

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

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

http://<FRP_SERVER_IP>:8219

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

20241023131101724

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

20241023131101479

四、frps和frpc一直运行设置

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

nohup ./frps -c ./frps.toml

20241023131102972客户端frpc运行代码:

nohup ./frpc -c ./frpc.toml 

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

五、参考资料

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

20241023131102262

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

 

阅读剩余
THE END