宽带没有公网IP如何通过frp实现内网穿透
我们需要通过外网访问家里的局域网内网设备,通常可以用公网IP端口转发或者内网穿透,如果用公网IP,那就很好解决,可以参见之前文章:
经验:小白记录阿里云域名注册、openwrt 动态DNS(DDNS)配置成功
经验:dynv6免费二级域名注册、openwrt动态DNS解析配置说明
如果没有公网IP,通常需要内网穿透才行。今天尝试了一下frp实现内网穿透访问内网设备。
一、内网穿透原理
FRP(Fast Reverse Proxy)是一种内网穿透工具,允许用户通过公网访问内网服务。其工作原理如下:
FRP 内网穿透原理
-
客户端与服务器的连接:
- FRP 客户端(
frpc
)在内网设备上运行,FRP 服务器(frps
)在公网服务器上运行。 frpc
启动时会主动连接到frps
,并保持这个连接。这个连接通常使用 TCP 协议。
- FRP 客户端(
-
建立隧道:
- 一旦
frpc
成功连接到frps
,它会向frps
注册需要暴露的内网服务,包括本地 IP 和端口。 frps
接收到注册信息后,会在其自身上创建一个对应的监听端口。
- 一旦
-
请求转发:
- 当外部用户访问
frps
的公网 IP 和指定端口时,frps
会接收到这个请求。 frps
根据之前的注册信息,将请求转发到相应的frpc
,即内网设备的 IP 和端口。
- 当外部用户访问
-
数据传输:
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有一个网页,如下:
实现目的:通过外网访问http://192.168.2.106:8219这个网页
实现步骤:
1、服务器端安装并运行frps
2、内网设备安装并运行frpc
三、frp实现内网穿透步骤
1、服务器配置
❶首先打开 frp下载页面,下载最新版的客户端:
https://github.com/fatedier/frp/releases/
部署
- 解压下载的压缩包。
- 将
frpc
复制到内网服务所在的机器上。 - 将
frps
复制到拥有公网 IP 地址的机器上,并将它们放在任意目录。
选择适合自己系统的:
❷下载后解压并上传到服务器任一目录,我用宝塔上传到/www/wwwroot/frp文件夹内:
❸修改配置文件frps.toml:
[common]
bind_port = 7000 # FRP 服务器监听的端口
# 可选:设置日志级别
log_level = info
log_file = ./frps.log
我就用默认的7000端口即可:
❹服务器启动frps服务:
cd /www/wwwroot/frp #进入frps目录
./frps -c ./frps.toml #运行frps
2、客户端配置:
❶同样下载适合客户端的frp程序,我的192.168.2.106的客户端为N1盒子,构架为arm64,因此下载frp_0.60.0_linux_arm64版本,
❷同样上传解压文件到客户端的任一目录,如我上传到N1的/www/frp目录:
❸需要修改frpc.toml的配置内容:
[common]
server_addr = <FRP_SERVER_IP> # 替换为您的 FRP 服务器的公网 IP
server_port = 7000 # 与 frps.ini 中的 bind_port 一致
[N1] #连接客户端名称,不同客户端名称唯一
type = tcp
local_ip = 192.168.2.106 # 内网设备的 IP
local_port = 8219 # 内网设备的端口
remote_port = 8219 # 外部访问的端口
设置内容为:
❹运行客户端的frpc:
cd /www/frp #进入客户端frpc目录
./frpc -c ./frpc.toml #运行frpc
此时,服务器端可以看到连接上的客户端信息:
3、实现外网访问内网设备
通过服务器访问内网设备:通过访问 FRP 服务器的 IP 地址和端口 来访问内网设备的服务。例如:
http://<FRP_SERVER_IP>:8219
如访问http://111.173.104.53:8219,即可正常访问内网设备了:
【注意】:如无法正常访问,需要在服务器端放行对应端口,如8219端口,宝塔的操作路径:【安全】➥【系统防火墙】➥【添加端口规则】➥【端口】输入需放行端口➥【确定】
四、frps和frpc一直运行设置
以上只是临时运行,如果退出终端,则frps或frpc则停止运行,因此如果要程序在后台一直运行,可以使用 nohup
,如服务器端frps运行代码:
nohup ./frps -c ./frps.toml
客户端frpc运行代码:
nohup ./frpc -c ./frpc.toml
另外也可以设置程序随系统自动启动。
五、参考资料
https://gofrp.org/zh-cn/docs/overview/
有很多示例可以参考,实现更高阶应用。