加载中...

linux系统下frp内网穿透服务搭建

前言

仅供自己学习记录

一、简介

1.1 简述

  • frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议,最牛逼最好用的完全开源的内网穿透工具frps。frp是实现内网穿透的C/S架构软件,满足在外网环境下使用内网服务的需求

1.2 原理如下图

  • 简单解释就是,A是公网服务器,B是内网服务器,C是个人用户。A安装frps服务端,B安装frpc客户端并指向A的IP端口,此时C想访问B的内网服务,只需要访问A的服务,A与B相互转发,完成C访问内网B。

二、安装与使用

2.1 文件下载(这里需要注意的是,同一个文件夹就包含了同类型系统的服务端frps和客户端frpc程序)

2.2 服务端安装

  • 将文件拷贝到服务器任意指定文件目录,并解压文件
  • tar -zxvf + 压缩包文件名

2.3 修改服务端配置文件

  • 2.3.1进入解压的压缩包内,编辑服务端配置文件
  • vim frps.ini
  • 2.3.2 修改fprs.ini础配置,并保存退出
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
# 授权码,请改成更复杂的,这个token之后在客户端会用到
token = 52010  

# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true

# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
  • 另外fprs.ini还有很多配置,可选配
# [必须]标识头
[common]
#服务监听的ip
bind_addr = 0.0.0.0
#[必须]frp连接通讯口,用于和客户端内网穿透传输数据的端口,可自定义。
bind_port = 7000
# 用于KCP协议UDP通讯端口,也可以和“bind_port”共用同一端口,如果没有设置,则kcp在frps中被禁用,可自定义。
kcp_bind_port = 7000
# 以帮助使UDP打洞穿透NAT,可自定义。
bind_udp_port = 7001
#访问web服务需要用到的端口,如果你想支持https,必须指定https端口监听
vhost_http_port = 8001
#https需要用到的端口
vhost_https_port = 443

# 指定 Dashboard (frp管理后台端口)的监听的 IP 地址
dashboard_addr = 0.0.0.0
#指定 Dashboard(frp管理后台端口) 的监听的端口
dashboard_port = 7500
# 指定访问 Dashboard(frp管理后台端口) 的用户名
dashboard_user = admin
# 指定访问 Dashboard (frp管理后台端口)的端口
dashboard_pwd = admin

#防止被随意注册,密钥token,可以设置为更复杂的
token = 123456

# 心跳配置,默认的心跳配置时间是30,不建议修改
heartbeat_timeout = 30
#frp内网穿透服务端监听的端口,如果不设置的话,所有端口都可以连接使用,但为为了不占用系统使用的端口号,限制只能使用服务端的指定端口,建议设置允许的坚挺端口,比如www.chuantou.org提供的内网穿透服务器就是开放50000-60000端口,
#
privilege_allow_ports = 2000-3000,3001,3003,4000-50000

#连接池的数量,如果frp内网穿透客户端设置的连接池的数量大于下面的数值,就会修改frp客户端的连接池为下面的数值
max_pool_count = 100
 # 每个客户端最大可以使用的端口,0表示无限制
max_ports_per_client = 0    

#  每个内网穿透可以创建的连接池上限,避免大量资源占用。可自定义。
max_pool_count = 5

# frp内网穿透服务端frps和frp内网穿透的客户端frpc两台电脑的时间差,如果设置为0的话,不校验时间差异,默认校验时间差为900秒。
authentication_timeout = 900

 # 是否使用tcp复用,默认为true;
 # frp只对同意客户端的连接进行复用;
tcp_mux = true
# 自定义二级域名,通过在 frps 的配置文件中配置 subdomain_host,就可以启用该特性。之后在 frpc 的 http、https 类型的代理中可以不配置 custom_domains,而是配置一个 subdomain 参数。
只需要将 *.{subdomain_host} 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 {subdomain}.{subdomain_host} 来访问自己的 web 服务。
subdomain_host = frps.com

# 日志的记录级别,分为debug, info, warn, error四级,日志保存的天数,默认3天
# 日志存放路径
log_file = ./log/frps.log
# 日志记录类别
log_level = info
最多保存多少天日志,可自定义
log_max_days = 3

2.4 开放端口规则

  • 2.4.1 如何是阿里云或者腾讯云,则需要打开上诉相应端口的入规则。如果是公网物理服务器,则需要开放相应防火墙端口,系统不一样的自己修改指令,当然可以直接关闭防火墙。
# 添加监听端口
sudo firewall-cmd --permanent --add-port=7000/tcp
# 添加管理后台端口
sudo firewall-cmd --permanent --add-port=7500/tcp
sudo firewall-cmd --reload

2.5 启动frps服务

  • 2.5.1 直接文件夹启动
  • 启动方式
# 前台启动
./frps -c ./frps.ini
# 后台启动
./frps -c ./frps.ini &
  • 停止方式
# 查询frp服务pid
ps -ef | grep frp
# 停止frp服务
kill -9 + pid
  • 2.5.2 全局启动设置
sudo mkdir -p /etc/frp
sudo cp frps.ini /etc/frp
sudo cp frps /usr/bin
sudo cp systemd/frps.service /usr/lib/systemd/system/
sudo systemctl enable frps
sudo systemctl start frps

2.6 运行验证

  • 启动成功后,登录frp管理后台,默认 IP:7500,admin/admin,即可查看服务启动

2.7 客户端的安装

  • 2.7.1 假设客户端是内网的linux系统,将之前下载好的frp压缩包拷入本地linux文件夹,并解压缩
  • tar -zxvf + 压缩包文件名
  • 2.7.2 进入解压缩文件夹,编辑客户端配置文件
  • vim frpc.ini
  • 2.7.3 修改fprc.ini基础配置如下

frpc.ini

      [common]
      server_addr = 服务器公网IP
      server_port = 7000
      token = 52010

      [ssh]   //名字跟下面的不能重复,否则会被覆盖 
      type = tcp  //协议
      local_ip = 127.0.0.1  //相对客户端的ip(如果是局域网内其它电脑,这里应该填写局域网内的IP)
      local_port = 22   //客户端被映射的端口
      remote_port = 6000  //服务器的端口

           [mysql]   //名字跟下面的不能重复,否则会被覆盖 
      type = tcp  //协议
      local_ip = 127.0.0.1  //相对客户端的ip(如果是局域网内其它电脑,这里应该填写局域网内的IP)
      local_port = 3306   //客户端被映射的端口
      remote_port = 3307 //服务器的端口

  • 还有更多配置如下,可根据需求添加
#[必须]标识头
[common]
#外网服务器的IP地址
server_addr = 116.85.28.230
#外网服务监听端口
server_port = 7000
#这个和服务端的token保持一致
token = 123456
# 客户端日志
log_file = ./frpc.log       # 指定日志文件;
log_level = info            # 指定日志等级;
log_max_days = 3

# 设置管理地址,用于通过http api控制frpc的动作,如重新加载;
admin_addr = 127.0.0.1
admin_port = 7500
admin_user = admin
admin_passwd = admin

# 初始连接池的数量上限,默认为0;
#pool_count = 5              

# 是否启用tcp复用,默认为true;
tcp_mux = true         
    
# 你的内网穿透名称,将显示为 {名称}.{对应服务名称}
# frpc的用户名,用于区别不用frpc的代理;
# user = your_name            
# 决定首次登录失败时是否退出程序,否则连续登录到frps服务端,可选:false,true
login_fail_exit = true      
# 用于连接服务器的协议,支持tcp、kcp、websocket;支持tcp和kcp,默认是tcp,注意:kcp需要服务端配置参数已开启,才支持。
protocol = tcp   
# 使用tcp流复用,默认为true,可选:false,true,必须与frps服务端已经配置参数相同,否则服务端没有,可以不填此参数。       
tcp_mux = true
# 为frp 客户端指定一个单独的DNS服务器;
#dns_server = 8.8.8.8        
# 要启用的代理的名字,默认为空表示所有代理;
# start = ssh,dns          
# 心跳检查
# heartbeat_interval = 30   # 失败重试次数
# heartbeat_timeout = 90    # 超时时间

#TCP的配置随便加
[ssh_01]
# 协议默认tcp,可选tcp,udp,http,https,stcp,xtcp;
type = tcp
# 本地地址
local_ip = 127.0.0.1
# 本地端口
local_port = 22
# 在服务器端开启的远程端口;
remote_port = 8022
# 是否加密服务端和客户端的通信信息,默认为不加密;
use_encryption = false      
# 是否开启压缩,默认不开启;
use_compression = false     
# 负载均衡配置
#group = test_group          # 负载均衡组名,会将同一组内的客户端进行负载;
#group_key = 123456          # 负载均衡组密钥; 

[web2]
# 协议默认tcp,可选tcp,udp,http,https,stcp,xtcp;
type = tcp
# 本地地址
local_ip = 127.0.0.1
# 本地端口
local_port = 80
# 在服务器端开启的远程端口;
remote_port= 8811
# 是否加密服务端和客户端的通信信息,默认为不加密;
use_encryption = false      
# 是否开启压缩,默认不开启;
use_compression = false     
# 负载均衡配置
#group = test_group          # 负载均衡组名,会将同一组内的客户端进行负载;
#group_key = 123456          # 负载均衡组密钥; 

#https和http 的端口在服务其上面已经定好了的,所以这里不能指定
[web]
type = https
local_ip = 127.0.0.1
local_port = 88
# 是否加密服务端和客户端的通信信息,默认为不加密;
use_encryption = false      
# 是否开启压缩,默认不开启;
use_compression = true
# 访问web页面启用认证,用户名admin
http_user = admin          
# 密码   
http_pwd = admin          
# 子域名,需要服务端配置了subdomain_host参数;    
#subdomain = web01 
# web的域名,和subdomain二选一
custom_domains = fy2018.online        
# 指定用于路由的URL前缀;
#locations = /,/pic
# 配置http包头域名重写;           
host_header_rewrite = example.com   
# 添加包头信息X-From-Where: frp;
header_X-From-Where = frp           
[web1]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = fy2018.online

  • 2.7.4 如果开起了防火墙的,记得开放端口,如果没开的就不用管,系统不一样的自己修改指令
sudo firewall-cmd --permanent --add-port=6000/tcp
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

2.8 frp客户端启动运行

# 前台启动
./frpc -c ./frpc.ini
# 后台启动
./frpc -c ./frpc.ini &

2.9 验证

  • 2.9.1 前后端均正常启动成功后,打开第三方ssh连接客户端,连接公网IP:[映射端口],如47.55.66.88:6000,即可连接到B电脑ssh服务的22端口。

三、常见问题处理

3.1 frp异常

posted @ 2021-09-11 17:59  迪丽甜粑  阅读(1201)  评论(0编辑  收藏  举报