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。
  • linux系统下frp内网穿透服务搭建插图

二、安装与使用

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 如何是阿里云或者腾讯云,则需要打开上诉相应端口的入规则。如果是公网物理服务器,则需要开放相应防火墙端口,系统不一样的自己修改指令,当然可以直接关闭防火墙。
  • linux系统下frp内网穿透服务搭建插图2
# 添加监听端口 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,即可查看服务启动
  • linux系统下frp内网穿透服务搭建插图3

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异常

原文链接:https://www.cnblogs.com/hi-9527/p/15256371.html

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享