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、启动客户端,在解压目录下打开终端,执行以下命令
查看服务端,有下列响应
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
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |