frp实现内网穿透
frp实现内网穿透
实现原理:在公网服务器上运行服务端(frps)和在内网主机运行客户端(frpc),将内网服务快速暴露到公网上个【实现端口转发,支持多种协议】
用法:公网服务器跑frps,内网跑fprc,配置映射规则。
适合长期使用。
注意事项【也是排错思路】:
-
selinux
和filewalld
和NetworkManager
都要关闭,指令如下,如果开启,一定要关闭。systemctl status selinux systemctl status filewalld systemctl status NetworkManager
-
服务端bind_port端口和客户端server_port保持一致
-
server_addr为服务端ip
-
不要开代理(不管是规则还是全局,直接关掉)
环境相关:
- 服务端【centos7.8 设置为NAT模式,让他相对于内网处于公网状态 192.168.144.133】
- 客户端【win10 划分子网 我设置为192.168.1.11】
1、部署服务端
环境相关:centos7.8【NAT模式】安装了frp53.0 版本(linux版)。
服务端的IP为:192.168.144.133
1、进入到/opt目录下,将frp53版本拖动到该目录下
# 1.解压
tar -zxf frp_0.53.0_linux_amd64.tar.gz
# 2.进入frp_0.53.0_linux_amd64目录
cd frp_0.53.0_linux_amd64
# 3.添加服务端接收外部 HTTP 请求的端口
vim frps.toml
# 添加这行配置
vhostHTTPPort = 80
"""
这里区分一下:
bindPort # 服务端与客户端之间的通信端口
vhostHTTPPort # 服务端接收外部 HTTP 请求的端口
"""
# 4.启动服务端
./frps -c frps.toml
2、部署客户端
环境相关:win10【划分子网,让他处于内网】安装了frp53.0(windows版)。
客户端(内网)IP为:192.168.1.11
下载链接:https://github.com/fatedier/frp/releases?page=2
1、使用小皮部署一个网站
-
把目录列表功能打开
-
将http对应端口改为8888
-
在
www
目录下创建一个cs
文件夹,然后里面放file.pdf
文件(不管什么pdf都行,方便测试) -
启动,我用的nginx + mysql + ftp,如下图所示
2、将安装包解压到C:\tools\frp_0.53.0_windows_amd64
目录下
3、配置客户端【在frpc.toml文件中】
# 介绍一下配置
"""
serverAddr # 服务端的公网ip
serverPort # 服务端通信端口
name="web-alex" # 代理名称,随意取
customDomains = "web.alex.com" # 绑定的域名
# 下面两行即告诉服务端我内网要暴露的ip和端口
localIP"192.168.1.10" # 内网服务的IP
localPort = 8888 # 内网服务的端口
"""
# 配置如下【这个实验我的配置以域名访问为准】【注意:通过域名访问和通过公网的ip和端口访问的客户端配置是不一样的。】
# 通过域名访问的配置【使用这个配置,就使用web.alex.com进行访问】
"""
serverAddr = "192.168.144.133"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localIP = "192.168.1.11"
localPort = 8888
customDomains = ["web.alex.com"]
"""
# 通过公网ip:端口访问的配置【使用这个配置,就使用公网:ip进行访问】
"""
serverAddr = "192.168.144.133"
serverPort = 7000
[[proxies]]
name = "web"
type = "tcp" # 使用 tcp 类型
localIP = "192.168.1.11" # 内网服务的 IP 地址
localPort = 8888 # 内网服务的端口
remotePort = 8888 # 公网访问的端口
"""
# 能够看出来两者配置不同在于:
域名访问: 通常使用 http 或 https 类型的代理
公网:端口访问:通常使用 tcp 或 udp 类型的代理
3、启动客户端,在解压目录下打开终端,执行以下命令
frpc.exe -c frpc.toml
查看服务端,有下列响应
4、在宿主机上手动域名解析,在C:\Windows\System32\drivers\etc
下的hosts文件中配置
192.168.144.133 web.alex.com
5、访问web.alex.com
就能访问到内网中的主机,如下图所示
我再访问一下内网中的pdf文件,如下图所示
现在我来捋一下做内网穿透的这个过程。
1、启动 frpc(客户端),做了以下动作
- 与frps(服务端建立连接);并告诉他我的代理名为
web
,绑定了``www.alex.com`;这个时候通道保持开放。
2、服务端运行中
- 服务端监听的7000端口与客户端进行通信,80接收外部HTTP请求(服务端已知道web.alex.com对应某个客户端的代理)
3、游览器访问呢web.alex.com
- 经过解析到达192.168.144.133:80后,看到
web.alex.com
找到对应代理,通过现有的7000端口转发给客户端
4、客户端收到请求后,转发给192.168.1.11:8888