Frp方式实现内网穿透

2025-12-20 14:09:57   浏览: 3次

AI评分:92

原因:本文详细介绍了Frp工具实现内网穿透的完整流程,结构清晰,从下载、服务端配置到客户端设置层层递进。内容实用性强,配有代码示例、参数解释和截图,便于读者动手实践。语言简洁准确,链接提供相关资源(如GitHub仓库),但末尾存在空段落标签,排版稍显冗余,不影响整体实用性。

    在之前,有写过一篇通过SSH进行内网穿透的文章,但是实际上SSH穿透方式在功能上不够强壮,对于一些常用的需求,配置非常繁琐,所以就想着有没有一种工具可以简化。

    本文介绍的工具Frp则是开源社区中最有名的穿透工具,其文件不仅小而精,内存占用也微乎其微,配置上面简单易懂,完全不需要使用其他的客户端来进行阅览。Frp 在github的仓库地址:https://github.com/fatedier/frp 。

    通过配置穿透,可以实现内网服务的对外公开,如可以架设内网游戏服务器、站点等,最终的连接速度主要取决于服务器的带宽大小,因为主要只消耗服务器的带宽,不消耗内存CPU资源,正好可以压榨服务器的性能。


下载

    首先是下载,提供了所有主流的系统架构,选择自己服务器系统和客户端系统版本进行下载即可。客户端常见的是windows 64位系统,即客户端下载 windows_amd64 即可。



    下载好后的压缩包里包含了一份客户端和一份服务端脚本,服务端名称是frps,客户端名称是frpc。我这里的服务端是指的公网端的意思,客户端则是据内网端,我们现在想要实现的是一个局域网设备开启服务,希望在另外一个设备能够访问到,所以我们需要将局域网服务送到公网上,这样其他的设备才能正常消费该局域网服务。



服务端配置

    现在我们来开下常见的服务器端配置,我们来到frps.toml文件:

# 服务端通信端口bindPort = 65534# HTTP服务通信端口
vhostHTTPPort = 10086# 挂载的域名,WEB服务可以配置走该域名作为基准,进行访问
subDomainHost = "frp.dreamcenter.top"

# 鉴权方式,使用token. 为了避免公网打穿内网造成安全隐患,可以设置一个token,来进行彼此通信的鉴权,# 我这里使用文件方式进行配置鉴权,文件名称为token.txt,内容即为密钥,客户端也需要持有该密钥才能与服务器进行正常打通.
auth.method = "token"
auth.tokenSource.type = "file"
auth.tokenSource.file.path = "token.txt"

# 监视面板,可以观测所有的服务状态,也需要一个单独的端口来进行访问 webServer.port = 7500 webServer.user = "xxx" webServer.password = "xxxxxx"


    等我们配置好后,就可以启动服务了,-c来指定配置文件,在cmd输入指令(以windows为例):

frps.exe -c frps.toml

    

    启动成功的示例图:



客户端配置

    接下来的需要穿透的局域网设备客户端配置,文件frpc.toml:

# 通信主机,可以用域名表示,也可以用IP表示serverAddr = "frp.dreamcenter.top"# 通信端口
serverPort = 65534

# 和服务端保持一致 auth.method = "token" auth.tokenSource.type = "file" auth.tokenSource.file.path = "token.txt"
# 配置代理,将本地的TCP 15555 端口映射到公网的6666端口,起名称叫做game, [[proxies]] name = "game" type = "tcp" localPort = 15555 remotePort = 6666
# 配置代理,将本地80站点的web服务挂载在web.abc.dreamcenter.top域名下[[proxies]] name = "web" type = "http" localPort = 80 customDomains = ["web.frp.dreamcenter.top"]


    之后使用如下指令,即可实现穿透:

frpc.exe -c frpc.toml


    需要注意的一点是,对于web这种方式,需要服务端配置nginx,将请求打到服务端配置的web信道,如下方代码块所示,是将所有的三级域名重定向到10086端口上,即web监听端口,后续frps会识别到对应的局域网web服务进行信息交换,用户访问web.frp.dreamcenter.top即可。

        server {
		listen 80;
		server_name *.frp.dreamcenter.top;
		return 301 http://$host:10086$request_uri;
	}


防火墙配置

    在整个过程中,我们需要对外开放的端口主要是以下几个:

1. frp消息通信,serverPort

2. 如果是tcp/udp服务,需要对应协议的远端端口,remotePort

3. 如果是web服务,需要虚拟主机的HTTP端口,vhostHTTPPort






#frp#内网穿透