## FRP 内网穿透工具 - [[#FRP介绍|FRP介绍]] - [[#环境准备|环境准备]] - [[#[安装](https://github.com/fatedier/frp/releases)|[安装](https://github.com/fatedier/frp/releases)]] - [[#配置SSH转发|配置SSH转发]] - [[#服务端配置|服务端配置]] - [[#客户端配置|客户端配置]] - [[#测试链接|测试链接]] - [[#注意事项|注意事项]] - [[#配置http转发|配置http转发]] - [[#服务端配置|服务端配置]] - [[#客户端配置|客户端配置]] - [[#测试|测试]] - [[#多WEB服务配置|多WEB服务配置]] - [[#根据域名来区分服务|根据域名来区分服务]] - [[#服务端配置|服务端配置]] - [[#客户端配置|客户端配置]] - [[#测试|测试]] - [[#根据端口来区分服务|根据端口来区分服务]] - [[#服务端配置|服务端配置]] - [[#客户端配置|客户端配置]] - [[#测试|测试]] ### FRP介绍 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 ### 环境准备 在开始之前我们需要准备的东西有一台需要做内网穿透的内网服务器 (后文称为客户端),一台可以访问外网的服务器(后文称为服务端)([阿里云](https://www.aliyun.com/?utm_medium=text&utm_source=bdbrand&utm_campaign=bdbrand&utm_content=se_32492)等) 以及一个已经备案并且别安服务器是服务端的域名(仅做 ssh 内网穿透不需要)。 ### [安装](https://github.com/fatedier/frp/releases) **下载后上传至服务器或者使用wget命令下载** `wget [下载连接]` >建议安装路径 /opt **解压** `tar -zxf ***` **文件介绍** + frpc: 客户端启动程序 + frpc_full.ini: 客户端所有配置项(可以再此文件查看 frp 的所有的配置项) + frpc.ini: 客户端配置项 + frps: 服务端启动程序 + frps_full.ini: 服务端所有配置项(可以再此文件查看 frp 的所有的配置项) + frps.ini: 服务端配置项 + LICENSE: 许可证 ### 配置SSH转发 ##### 服务端配置 **编辑服务端配置文件** ```shell #编辑服务端配置文件 vim frps.ini #写入以下内容 [common] bind_port = 7000 #用于和客户端连接通讯的端口 ``` **服务端启动** `./frps -c ./frps.ini` > 这行命令的意思是以frps.ini的配置启动frps服务端 > 但是这样启动后退出就会中断服务 **使用nohup启动** `nohup ./frps -c ./frps.ini &` ##### 客户端配置 **编辑编辑客户端配置文件** ```shell #编辑客户端配置文件 vim frpc.ini #写入以下内容 [common] server_addr = 1.1.1.1 #服务端ip server_port = 7000 #服务端bind_port的端口 [ssh] type = tcp #连接类型 local_ip = 127.0.0.1 #本机的话则直接写入127.0.0.1 也可以是本机其他可ssh远程主机的ip local_port = 22 #ssh端口默认为22 remote_port = 6000 #设置远程服务端对应的端口 ``` **客户端启动** `./frpc -c ./frpc.ini` ##### 测试链接 `ssh 服务端ip -p 6000` ##### 注意事项 + 防火墙开启服务端端口7000、6000 + 防火墙开启客户端端口22 ### 配置http转发 ##### 服务端配置 **编辑服务端配置文件** ```shell #编辑服务端配置文件 vim frps.ini #写入以下内容 [common] bind_port = 7000 #用于和客户端连接通讯的端口 vhost_http_port = 8080 #访问服务端的8080端口frp会将http请求转发到客户端 ``` **服务端启动** `./frps -c ./frps.ini` ##### 客户端配置 **编辑客户端配置文件** ```shell #编辑客户端配置文件 vim frpc.ini #写入以下内容 [common] server_addr = 1.1.1.1 #服务端ip server_port = 7000 #服务端bind_port的端口 [web] type = http #连接类型 local_ip = 192.168.3.5 #要转发web服务的ip地址本机的话可以省略这条 如果是其他web 写要进行转发的web服务的服务器ip local_port = 80 #要转发web服务的端口 custom_domains = test.my.com #绑定域名 写多个则用,进行分割 ``` **客户端启动** `./frpc -c ./frpc.ini` ##### 测试 访问 http://test.my.com:8080 ### 多WEB服务配置 #### 根据域名来区分服务 ##### 服务端配置 **编辑服务端配置文件** ```shell #编辑服务端配置文件 vim frps.ini #写入以下内容 [common] bind_port = 7000 #用于和客户端连接通讯的端口 vhost_http_port = 8080 #访问服务端的8080端口frp会将http请求转发到客户端 ``` **服务端启动** `./frps -c ./frps.ini` ##### 客户端配置 **编辑客户端配置文件** ```shell #编辑客户端配置文件 vim frpc.ini #写入以下内容 [common] server_addr = 1.1.1.1 #服务端ip server_port = 7000 #服务端bind_port的端口 [web] type = http #连接类型 local_ip = 192.168.3.5 #要转发web服务的ip地址本机的话可以省略这条 如果是其他web 写要进行转发的web服务的服务器ip local_port = 80 #要转发web服务的端口 custom_domains = test.my.com #绑定域名 写多个则用,进行分割 [web2] #保持唯一 type = http #连接类型 local_ip = 192.168.3.5 #要转发web服务的ip地址本机的话可以省略这条 如果是其他web 写要进行转发的web服务的服务器ip local_port = 8080 #要转发web服务的端口 custom_domains = test2.my.com #绑定域名 写多个则用,进行分割 ``` **客户端启动** `./frpc -c ./frpc.ini` ##### 测试 访问 http://test.my.com:8080 => 192.168.3.5:80 访问 http://test2.my.com:8080 => 192.168.3.5:8080 #### 根据端口来区分服务 ##### 服务端配置 **编辑服务端配置文件** ```shell #编辑服务端配置文件 vim frps.ini #写入以下内容 [common] bind_port = 7000 #用于和客户端连接通讯的端口 ``` **服务端启动** `./frps -c ./frps.ini` ##### 客户端配置 **编辑客户端配置文件** ```shell #编辑客户端配置文件 vim frpc.ini #写入以下内容 [common] server_addr = 1.1.1.1 #服务端ip server_port = 7000 #服务端bind_port的端口 [web] #保持唯一 type = tcp #连接类型 注意这里不写http local_ip = 192.168.3.5 #要转发web服务的ip地址本机的话可以省略这条 如果是其他web 写要进行转发的web服务的服务端ip local_port = 80 #要转发web服务的端口 remote_port = 80 #访问服务器进行转发的端口 [web] #保持唯一 type = tcp #连接类型 注意这里不写http local_ip = 192.168.3.5 #要转发web服务的ip地址本机的话可以省略这条 如果是其他web 写要进行转发的web服务的服务端ip local_port = 8080 #要转发web服务的端口 remote_port = 8080 #访问服务器进行转发的端口 ``` **客户端启动** `./frpc -c ./frpc.ini` ##### 测试 访问 http://服务端ip:80 => 192.168.3.5:80 访问 http://服务端ip:8080 => 192.168.3.5:8080 [官方文档](https://gofrp.org/docs/)