## 它是什么?干嘛用的?
先假设这样一个场景,在仅有的IPV4的环境下,你身处外面使用手机数据流量,想访问家里的路由器界面(如192.168.1.1),但奈何路由设备仅仅存与家庭局域网中,无法访问,怎么让路由器管理界面在世界各地都可以访问呢?Frp内网穿透工具就是为了解决这样一个问题的,可以在有网络的任何地方访问到你家庭的设备。家里头无法在外面访问的网络,我们以下称为`内网`
公网:与内网相反,为什么我们都可以在任何地方访问百度?因为百度的服务器放在了一个大家都可以访问到底网络,公共使用的网络--公网
## Frp工具是如何做到的?
简单的说转发,它需要一台在公网设备的帮助转发;借助下面的图就懂了
Frp服务器部署在公网中,它是一个中间商,你想发数据给路由,先发给Frp服务器,Frp再转发给路由,路由发你的数据也是如此
IP:网络地址,字面意思,网络的地址,有地址才找到一个地方
域名: 方便访问,为什么我们输入"baidu.com"就能访问百度呢?为什么大家不直接通过百度IP访问呢?不是所有人都能记住那一串数字的{IP地址:xxx.xxx.xxx.xxx}
## 部署所需
* 一台具有公网IP的设备(服务器)
* 一个属于你的域名
## 进行部署
1、根据你的服务器或设备类型选择对应 `frp` 压缩包
FRP Github Release
本地备份下载
* windows 64位:XXX_windows_amd64.zip
* windows 32位:XXX_windows_386.zip
* linux 64位:XXX_linux_amd64.tar.gz
* linux 32位:XXX_linux_386.tar.gz
2、然后使用ftp或sftp或者scp等方式,将frp压缩包上传到你的服务器中(也可以直接在服务器使用wget进行下载)
3、对frp压缩包进行解压,里面会有几个文件
其中包括有frpc(客户端),frpc.ini(客户端配置),frps(服务器),frps.ini(服务器配置)
假设上传到了服务器的root路径下,对frp文件夹进行权限设置
```
chmod 777 -R /root/frp
```
4、配置frp服务器参数
使用vim编辑: vim frps.ini
```
[common]
bind_addr = 0.0.0.0
bind_port = 服务器监听端口(10000)
bind_udp_port = UDP端口(10001)
kcp_bind_port = KCP端口(10002)
vhost_http_port = 80
vhost_https_port = 443
subdomain_host = 你的域名(如:limons.cn)
dashboard_addr = 0.0.0.0
dashboard_port = 后台管理端口(11000)
dashboard_user = 管理用户名(root)
dashboard_pwd = 管理密码(你自己填一个)
token = 链接密钥(你自己想一个,别照抄啊!如:ABCDEFG)
max_pool_count = 100
log_file = ./frps.log
log_level = info
log_max_days = 3
tcp_mux = true
```
如果你的服务器已经部署了网站那些,也就是80跟443端口已经被占用,那么 `vhost_http_port` 和 `vhost_https_port` 这两个端口也需要改变。总之,frps.ini 中的任何端口不能跟 其他frp 或 其他程序 冲突,否则服务启动失败
## 启动frp
所有配置完成后,正常使用frp的话,肯定是要让frp在后台运行的,以下有几种后台启动方式
### nohub命令:
```
# 在root根目录下执行
nohup /root/frp/frps -c /root/frp/frps.ini
```
### screen命令:
```
# 在frp目录下执行
screen -S frp
./frps -c ./frps.ini
```
### rc.local
修改`/etc/rc.local`文件,加入启动命令
```
/root/frp/frps -c /root/frp/frps.ini &```
```
### systemctl
创建并编辑 `frps.service` 文件,执行代码:
```
vim /lib/systemd/system/frps.service
```
然后在该文件输入以下代码,并保存退出:
```
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/存放frp的目录/frps -c /存放frp的目录/frps.ini
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
```
「**操控命令**」
启动服务 `systemctl start frps`
开机自启动 `systemctl enable frps`
重启服务 `systemctl restart frps`
停止服务 `systemctl stop frps`
查看日志与状态 `systemctl status frps`
客户端自启动与服务端相同,只需要创建 `frpc.service` 并把 `ExecStart` 路径改为存放frpc的路径,操控命令将 `frps` 改为 `frpc`
不同的系统自启动会不太一样,ubuntu,debian,centOS,windows等等,可自行百度
### Openwrt
进入 /etc/init.d 文件夹中,创建一个名为 frp 的文件,写入以下代码:
```
#!/bin/sh /etc/rc.common
START=90
TOP=90
SERVICE=frpc
USE_PROCD=1
PROC="/存放frp的目录/frps -c /存放frp的目录/frps.ini"
start_service(){
procd_open_instance
procd_set_param command $PROC
procd_set_param respawn
procd_close_instance
}
service_triggers(){
procd_add_reload_trigger "rpcd"
}
```
## 解析一个域名到服务器
比如解析了个 frp.example.com 到你的服务器
## 在浏览器中访问frp管理后台
在自己电脑打开浏览器,输入frp后台管理地址,比如本例子中:
域名是:frp.example.com
面板端口:11000
那浏览器地址栏就写 `frp.example.com:11000` 域名后面的端口就是`frps.ini`中的`dashboard_port`。用户名就是`dashboard_user`,密码是`dashboard_pwd`
如果frps.ini中没有配置 subdomain_host 那么就使用 `服务器IP:FRP面板端口` 形式访问,客户端配置时也使用服务器IP
如果访问frp管理后台无法打开,那就是你的服务没启动或者端口没有开放。重新检查`frps.ini`文件,并确定该文件中的`bind_port`、`dashboard_port`在你的防火墙(服务器安全组)中放行了
## 客户端连接服务器
这个客户端是你要被控制的设备,下载frp程序,下载回来后,frps相关的可以删掉了,只有frpc才是客户端使用的
编辑 frpc.ini
```
[common]
server_addr = frp.example.com(刚刚设置的域名解析)
server_port = 服务器监听端口(10000) / bind_port
token = frp服务器中你设置的token
user = 客户端名称(可以随便填一个英文字符串,给这个客户端命名)
[web] //代理内网的网站
type = http //类型http
local_ip = 127.0.0.1 //内网设备IP
local_port = 80 //端口
subdomain = http //子域名:如此时填入的是http,则浏览器输入(http.limons.cn)就会访问到此设备
[ssh]
type = tcp //内网TCP代理
local_ip = 127.0.0.1 //内网设备IP
local_port = 22 //要代理的端口
remote_port = 11022 //代理所生成的端口,远程ssh链接需要指定为这个端口
```
## 被控设备为Windows电脑
如果要被控制的设备是`Windows`,比如公司的电脑,下载`frp`相对应的压缩包,解压后将文件夹名字改为`frp`,删掉`frps`相关文件,只留`frpc`文件,用记事本打开`frpc.ini`进行配置
```
[common]
server_addr = 你的服务器域名或者IP
server_port = 服务器监听端口(10000) / bind_port
token = frp服务器中你设置的token
user = 给本次客户端取一个名(全英文名)
tls_enable=true
[windows]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 33890(映射端口,可随便设置,但不能和其他frp客户端冲突,并且服务器防火墙要放行这个端口)
```
在`frp`文件夹内,按住`shift`键盘并`右键鼠标`,点击右键菜单栏中的powershell,输入命令:
```
./frpc.exe -c frpc.ini
```
如果你看到`start proxy success`的字样,则表示成功了,如果没有,则表示`frpc.ini`配置有问题
按`ctrl+C`停止程序运行,现在程序可以正常运行,但我们需要将其设置`开机自启动`
下载后放到`frp`的文件夹中,并改名为`winsw.exe`,并且新建一个文件`winsw.xml`
用记事本打卡`winsw.xml`,填入下面内容,需要修改的是要运行的frp程序绝对路径,根据你的实际路径填写
```
```
在frp文件夹中,按住`shift`并点击鼠标右键,可以在右键菜单栏中看到`powershell`,输入`.\winsw.exe install`,如下图
如果提示下面,则成功!
成功!重启电脑(被控制设备)后用手机端试试能不能远程桌面吧
下载`Remote Desktop`安装,PC name(电脑名)那里输入FRP服务器域名/IP:端口(上面的remote_port = 33890),比如:
```
frp.example.com:33890
```
此处评论已关闭