f
rp介绍
frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。frp 项目官网是 https://github.com/fatedier/frp,
frp工作原理
服务端运行,监听一个主端口,等待客户端的连接;
客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
服务端fork新的进程监听客户端指定的端口;
外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
简单来说就是
一台没有公网ip的服务器,利用有公网ip的服务器的ip
。让这两台设备连接。然后把这两台看成是一台就行了。然后这个frp就相当于把它俩连接起来的工具。
可以先了解一下其他的知识,比如
正向代理与反向代理
。这篇文章其实讲的挺好的。
vpn就使用了正向代理,frp中使用了反向代理
。
2 配置教程
想要配置frp穿透,首先必须先要有一台有公网ip的服务器,主要得有公网ip
(即:可以外网访问)的服务器。
如果没有,接下来的教程就不用看了
。配置教程主要分为两个部分,
一是服务器端(外网服务器)的配置;二是客户端(内网服务器)配置。
1、
下载frp
https://github.com/fatedier/frp/releases
frp_0.38.0_linux_amd64.tar.gz是64位系统,frp_0.38.0_linux_386.tar.gz是32位系统,根据自已的云服务器去下载对应的frp文件。
2.解压压缩文件:
tar -zxvf frp_
0.38.0
_linux_amd64.tar.gz
mv
frp_0.38.0_linux_amd64 frp
mv frp /usr/local/
cd
/usr/local/frp
frpc
,
frpc.in
i ,
因为
包含
c结尾代表client,是客户端所使用的,
所以
服务器端用不到
可以
删除
掉,也可以不删除,没有影响
。
然后配置frps.ini文件。
使用
vim frps.ini
修改文件
如下所示
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port =
7000
# 授权码,请改成更复杂的
#
token =
xd
1234
56abc
# 这个token之后在客户端会用到
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user =
xd
admin
dashboard_pwd =
xd
admin
#
vhost_http_port =
6001
#
访问6001端口,映射到内网web服务
#
vhost_https_port = 10443
#
enable_prometheus = true
# frp日志配置
log_file =
/usr/local/frp
/
log/frps.log
log_level = info
log_max_days = 3
dashboard_port是服务端仪表板的端口
。开启后可使用ip+dashboard_port访问。
token是另外一个没有公网ip的电脑连接的密码。
dashboard_user和dashboard_pwd表示打开仪表板页面登录的用户名和密码.
bind_port表示用于客户端和服务端连接的端口.也就是没有ip电脑所要连接的端口.它俩绑在一起的绳子.
使用守护程序systemctl
在
/lib/systemd/system
文件夹下创建frps.service
vim frps.service
输入如下内容,保存退出。
[Unit]
Description=frp service
After=network.target
[Service]
TimeoutStartSec=30
ExecStart=#frp绝对路径#/frps -c #frp绝对路径#/frps.ini
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
启动服务
s
ystemctl start frps
服务开机自启动
s
ystemctl enable frps
服务器上最终的配置
[Unit]
Description=frp service
After=network.target
[Service]
TimeoutStartSec=30
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
验证服务端是否启动成功
访问:http://服务器IP:后台管理端口” ,输入用户名和密码可以查看连接状态
如:http://62.244.114.4:7500/,用户名和密码分别对应frps.ini文件中的dashboard_user和dashboard_pwd
登录之后界面如下:
如果上述步骤没有问题,则说明frp的服务端配置成功了,也就意味着内网穿透你已经成功了一半!!!
但是要提前到你买的官网打开这个可以访问的端口(我的是阿里云的服务器)(
如何开放端口百度查询即可
)如图:我的已经添加7000端口和3389端口
阿里云开放端口,在
云服务器
—>
ECS
安全组
—>配置规则
还需要iptables或者fillwalld放开相关的端口
iptables
vim /etc/sysconfig/iptables
#自定义frp内网穿透端口
-A INPUT -p tcp -m state –state NEW -m tcp –dport 7000 -j ACCEPT
#frp管理后台端口
-A INPUT -p tcp -m state –state NEW -m tcp –dport 7500 -j ACCEPT
重启 iptables 防火墙服务
# systemctl restart iptables.service
fillwalld
那怎么开启一个端口呢
添加
firewall-cmd –zone=public –add-port=80/tcp –permanent (–permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd –reload
查看
firewall-cmd –zone= public –query-port=80/tcp
删除
firewall-cmd –zone= public –remove-port=80/tcp –permanent
测试地址:http://182.92.232.14:7500/static/#/
客户端相关配置(也就是另外一台内网的服务器)
解压压缩文件:
tar -zxvf frp_
0.38.0
_linux_amd64.tar.gz
mv
frp_0.38.0_linux_amd64 frp
mv frp /usr/local/
cd
/usr/local/frp
因为是客户端所以编辑包含c的文件
然后配置frp
c
.ini文件。
使用
vim frp
c
.ini
修改文件
如下所示
[common]
server_addr = 公网ip
server_port = 7000
[ssh]
type = tcp
local_ip =
192.168.1.88
local_port = 22
remote_port =
6000
[
web1
]
type = tcp
local_ip=
192.168.1.88 #这个地方是没有公网ip的服务器地址
local_port =
80 #这个地方是没有公网ip的服务器部署的服务的端口
remote_port=
8080 #绑定的远程有公网ip的服务器的端口
# frp日志配置
log_file =
/usr/local/frp
/
log/frp
c
.log
log_level = info
log_max_days = 3
客户端配置
[common]
server_addr = 公网ip
server_port = 7000
[ssh]
type = tcp
local_ip=
192.168.1.88
local_port =
22
remote_port=600
0
查看frp
c
.ini配置文件(C代表客户端),在命令窗口直接输入frpc.ini即可打开。server_addr = 114.119.110.120是你买的服务器的公网IP要对应上。
server_port
= 7000是监听端口与服务器的
bind_port
对应一致。local_port =
22
,remote_port =
6000
是在买服务器的官网开通的可访问端口。
最终配置
[common]
server_addr =
182.92.232.14
server_port =
7000
[ssh]
type = tcp
local_ip =
192.168.1.88
local_port = 22
remote_port =
6000
[web]
type =
tcp
local_ip =
192.168.1.88
#访问本地80web服务
local_port = 80
#必须已经备案
custom_domains = www.
ddzhl
.c
om
# frp日志配置
log_file =
/usr/local/frp
/
log/frp
c
.log
log_level = info
log_max_days = 3
注意:代理端口好像限制最大8888(
remote_port
)
使用守护程序systemctl
在
/lib/systemd/system
文件夹下创建frp
c
.service
vim frp
c
.service
输入如下内容,保存退出。
[Unit]
Description=frp service
After=network.target
[Service]
TimeoutStartSec=30
ExecStart=
/usr/local
/
frp/
frp
c
-c
/usr/local
/
frp
/frp
c
.ini
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
启动服务
s
ystemctl start frp
c
服务开机自启动
s
ystemctl enable frp
c
最终实验的最终版本
服务端部分
vim frps.ini
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
authentication_method = token
# 授权码,请改成更复杂的
token = xd123456abc
# 这个token之后在客户端会用到
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = xdadmin
dashboard_pwd = xdadmin
# 访问10080端口,映射到内网web服务
#vhost_http_port = 10080
#vhost_https_port = 10443
#enable_prometheus = true
# frp日志配置
log_file = /usr/local/frp/log/frps.log
log_level = info
log_max_days = 3
客户端部分
vim frp
c
.ini
[common]
server_addr = 182.92.232.14
server_port = 7000
authentication_method = token
token = xd123456abc
[ssh]
type = tcp
local_ip = 192.168.1.88
local_port = 22
remote_port = 6000
[web]
type = tcp
local_ip = 192.168.1.88
local_port = 80
#访问本地80web服务
remote_port = 8080
custom_domains = www.ddzhl.com
#必须已经备案
# frp日志配置
log_file = /usr/local/frp/log/frpc.log
log_level = info
log_max_days = 3
注意需要阿里云和防火墙开放需要的哪些端口,不然还是没有办法访问的
访问web服务的时候
type=tcp
如果是type=http的话,访问不了
测试
访问
现在访问服务器IP:访问内部的ssh端口 就可以访问内网的设备
比如我现在要访问我内网的设备就访问:
182.92.232.14:
6000
连接成功
frp如何加token?
在 frps.ini 和 frpc.ini中均添加
authentication_method = token
token = changeit