大龄后端转后厨...|

Vermeer

园龄:3年7个月粉丝:6关注:0

2021-08-08 20:35阅读: 1909评论: 0推荐: 1

frp 内网穿透 搭建(超全)

简介:

frp内网穿透 Github 地址 https://github.com/fatedier/frp

如果想使用 Docker 方式部署的朋友,需要具备 docker 的环境支持

docker 环境安装(支持一键安装):https://www.cnblogs.com/chxlay/p/15433473.html

docker-compose 环境安装(支持一键安装):https://www.cnblogs.com/chxlay/p/15433907.html

不想看文字,想直接抄作业的同学,直接调往底部阅读,然后GitHub中分享:https://github.com/chxlay/stonmace-docker/tree/main/extension-server

下载机型对应的版本

 

或者 Linux上执行(版本号 0.36.0 自行更换) --no-check-certificate 参数是取消 HTTPS 的证书验证

wget https://github.com/fatedier/frp/releases/download/v0.36.0/frp_0.36.0_linux_amd64.tar.gz --no-check-certificate

frp 目录结构介绍

解压后:

tar -zxvf frt_xxxxx.tar.gz

服务端放在公网上,保证 网络中能访问 


安装启动

1、服务端配置详解:

复制代码
[common]                        # 通用配置段
bind_addr = 0.0.0.0             # 绑定的IP地址,支持IPv6,不指定默认0.0.0.0;
bind_port = 7000                # 服务端口;
bind_udp_port = 7001            # 是否使用udp端口,不使用删除或注释本行;
kcp_bind_port = 7000            # 是否使用kcp协议,不使用删除或注释本行;
 
# proxy_bind_addr = 127.0.0.1   # 代理监听地址,默认和bind_addr相同;
 
# 虚拟主机
vhost_http_port = 80            # 是否启用虚拟主机,端口可以和bind_port相同;
vhost_https_port = 443
vhost_http_timeout = 60         # 后端虚拟主机响应超时时间,默认为60s;
 
# 开启frps仪表盘可以检查frp的状态和代理的统计信息。可视化界面操作
dashboard_addr = 0.0.0.0        # frps仪表盘绑定的地址;
dashboard_port = 7500           # frps仪表盘绑定的端口;
dashboard_user = admin          # 访问frps仪表盘的用户;
dashboard_pwd = admin           # 密码;
assets_dir = ./static           # 仪表盘页面文件目录,只适用于调试;
 
# 日志配置文件
log_file = ./frps.log           # 日志文件,不指定日志信息默认输出到控制台;
log_level = info                # 日志等级,可用等级“trace, debug, info, warn, error”;
log_max_days = 3                # 日志保存最大保存时间;
 
# 客户端与服务端通信的身份验证令牌
token = 12345678
  
# 心跳检测超时时间,不建议修改默认配置,默认值为90;?
heartbeat_timeout = 90          
 
# 指定允许客户端使用的端口范围,未指定则没有限制;
allow_ports = 2000-3000,3001,3003,4000-50000
 
max_pool_count = 5              # 每个客户端连接服务端的最大连接数;
max_ports_per_client = 0        # 每个客户端最大可以使用的端口,0表示无限制
 
authentication_timeout = 900    # 客户端连接超时时间(秒),默认为900s;
 
subdomain_host = frps.com       # 自定义子域名,需要在dns中将域名解析为泛域名;
 
tcp_mux = true                  # 是否使用tcp复用,默认为true;
 
# frp只对同意客户端的连接进行复用;
复制代码

如: 阿里云中配置服务端:frps.ini 文件 (简版配置即可)

复制代码
[common]
bind_port=7000
 
# frp服务端可视化界面管理控制面板相关配置
dashboard_port=9527
# 可视化管理界面的登录用户 dashboard_user=iserver-frps
# 可视化管理界面的登录密码 dashboard_pwd
=dashboard_password

# 客户端与服务端连接认证密码 token = iserver_password
复制代码

启动:在启动文件当前路径下

nohup /opt/frp/frps -c  /opt/frp/frps.ini >/dev/null 2>&1 &

[root@izj6chfur6qfa919i2o7shz frp]# nohup ./frps -c frps.ini >/dev/null 2>&1 &

 


2、客户端配置详解

复制代码
[common]                        # 通用配置段
 
server_addr = 0.0.0.0           # server的IP地址;支持IPv6
server_port = 7000              # server的端口;
 
# 如果要通过http或socks5代理连接frps,可以在此处或在全局环境变量中设置代理,只支持tcp协议;
 
# http_proxy = http://user:passwd@192.168.1.128:8080
 
# http_proxy = socks5://user:passwd@192.168.1.128:1080
 
# 客户端日志
 
log_file = ./frpc.log       # 指定日志文件;
log_level = info            # 指定日志等级;
log_max_days = 3
 
# 客户端与服务端通信的身份验证令牌
token = 12345678
 
# 设置管理地址,用于通过http api控制frpc的动作,如重新加载;
admin_addr = 127.0.0.1
admin_port = 7400
# 没有安全需求的话不需要设置用户名和密码,直接就可以登录查看客户端配置及连接状态
admin_user = admin
admin_passwd = admin
 
 
pool_count = 5              # 初始连接池的数量,默认为0;
tcp_mux = true              # 是否启用tcp复用,默认为true;
user = your_name            # frpc的用户名,用于区别不用frpc的代理;
login_fail_exit = true      # 首次登录失败时退出程序,否则连续重新登录到frps;
protocol = tcp              # 用于连接服务器的协议,支持tcp、kcp、websocket;
dns_server = 8.8.8.8        # 为frp 客户端指定一个单独的DNS服务器;
 
# start = ssh,dns           # 要启用的代理的名字,默认为空表示所有代理;
 
# 心跳检查
# heartbeat_interval = 30   # 失败重试次数
# heartbeat_timeout = 90    # 超时时间
 
# 配置示例
 
[ssh]                   # 代理配置段名称,如果配置user=your_name,则显示为your_name.ssh;
type = tcp              # 协议默认tcp,可选tcp,udp,http,https,stcp,xtcp;
local_ip = 127.0.0.1            # 本地地址
local_port = 22             # 本地端口
use_encryption = false      # 是否加密服务端和客户端的通信信息,默认为不加密;
use_compression = false     # 是否开启压缩,默认不开启;
 
remote_port = 6001          # 在服务器端开启的远程端口;
 
# 负载均衡配置
group = test_group          # 负载均衡组名,会将同一组内的客户端进行负载;
group_key = 123456          # 负载均衡组密钥;
 
# web示例
[web01]
 
type = http             # 使用http
 
local_ip = 127.0.0.1
 
local_port = 80
 
use_encryption = false
 
use_compression = true
 
http_user = admin           # 访问web01页面启用认证,用户名admin
 
http_pwd = admin            # 密码
 
subdomain = web01           # 子域名,需要服务端配置了subdomain_host参数;
 
custom_domains = web02.example.com   # web01的域名,和subdomain二选一
 
locations = /,/pic              # 指定用于路由的URL前缀;
 
host_header_rewrite = example.com    # 配置http包头域名重写;
 
header_X-From-Where = frp       # 添加包头信息X-From-Where: frp
复制代码

如本地 Linux 电脑配置 ES 分享给外网使用,frpc.ini (简版配置即可),为了方便管理,被代理的 机器 服务的端口号映射外界的端口号为一致,方便记忆使用

复制代码
[common]
# 服务端的链接信息,密码,IP ,端口 token
= iserver_password server_addr = 192.168.xx.xxx server_port = 7000 # 客户端可视化管理界面的 IP (127.0.0.1 就行了,当然如下写具体 IP 也是可以的) 端口 admin_addr = 192.168.xx.xxx admin_port = 9527
# 代理 ES [behelpful
-es] type = tcp local_ip = 192.168.xx.xxx local_port = 9200 remote_port = 9200
# 代理 Kibana [kibana] type
= tcp local_ip = 192.168.xx.xxx local_port = 5601 remote_port = 5601
复制代码

启动:在启动文件当前路径下执行

[root@agent2 frp]# nohup ./frpc -c frpc.ini >/dev/null 2>&1 &

3、添加开机启动

在路径:/etc/init.d  添加一个启动脚本,如: frpc
解释:服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。优先级范围是0-100,数字越大,优先级越低;

# chkconfig:   2345 90 10
# description:  内网穿透frpc 客户端启动
 
nohup /opt/frp/frpc -c /opt/frp/frpc.ini >/dev/null 2>&1 &

授权:

[root@behelpful]# chmod +x /etc/init.d/frpc

添加到chkconfig,开机自启动

[root@behelpful]# chkconfig --add frpc

 


4、Windows 系统使用

下使用案例( Windows系统中的禅道分享公网使用)

复制代码
[common]
 
# FRP 服务端密码
token = iserver_password# 服务端连接地址
server_addr = xx.xx.xx.xx
# 服务端端口号
server_port = 7000
 
# 管理用的
admin_addr = 127.0.0.1
admin_port = 9527
 
[zentao]
type = tcp
local_ip = 127.0.0.1
local_port = 10086
remote_port = 10086
复制代码

启动:在启动文件当前路径下

C:\FRP>.\frpc.exe -c c:\FRP\frpc.ini

5、界面展示

服务端 管理视图化界面: http://xxx.xxx.xxx:9527  ---->>>  输入配置文件中配置的 用户名:iserver-frps,密码:iserver_password

 

 

 客户端管理界面(局域网中访问):http://192.168.0.1:9527  / http://192.168.0.12:9527

 补充:Windows 开机自启动 frp 服务 (推荐方式: https://diannaobos.com/post/405.html

在目录 : C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp   下创建一个开机启动脚本  frp.vbs  (名字自定义,拓展名 必须  .vbs)

内容为 运行 frp 命令:

run "cmd /c 启动程序的路径 -c 启动程序配置文件的路径"

Set ws = CreateObject("Wscript.Shell")
    ws.run "cmd /c D:\Tools\FRP\frpc.exe -c D:\Tools\FRP\frpc.ini",vbhide

 


docker 模式

docker版运行 frp

补充(已安装的朋友跳过):

  docker 环境安装及一键脚本 SH :   https://www.cnblogs.com/chxlay/p/15433473.html

  docker-compose  环境安装及 一键安装脚本 SH :https://www.cnblogs.com/chxlay/p/15433907.html

构建docker镜像(也可以使用 dockerhub 中的):

1、Dockerfile 文件

以下下是自及构建 docker 镜像的(其中 frp 可以是在构建时上传,也可以是构建时下载,根据个人服务器网络情况选择)

魔法墙的原因,墙内用户请使用魔方上网下载 frp_xxxxxxx.tar.gz 文件,拷贝到 Dockerfile 同路径下进行使用,否则可能无法下载

复制代码
# 以build 镜像的时候下载frp程序包的方式的(下载的工具比较多,问题也比较多)
FROM centos:centos7

LABEL author=Alay<chxlay@aliyun.com>
ENV FRP_DIR=/var/frp

ARG VERSION

# 创建临时工作目录,下载 frp tar包文件的
WORKDIR /tmp

# 本地拷贝 Frp 程序压缩包到 容器内(上传和下载 二选一)
COPY frp_${VERSION}_linux_amd64.tar.gz ./
# 下载 frp的发行版 tag(上传和下载 二选一)
#RUN curl -SlO https://github.com/fatedier/frp/releases/download/v${VERSION}/frp_${VERSION}_linux_amd64.tar.gz

RUN set -x \
    # 解压 frp
    && tar -xvf frp_${VERSION}_linux_amd64.tar.gz \
    # 移动到目录
    && mv frp_${VERSION}_linux_amd64 ${FRP_DIR} \
    # 删除临时路径目录
    && rm -rf /tmp

WORKDIR ${FRP_DIR}
# 创建配置文件
RUN mkdir -p ${FRP_DIR}/conf

# 服务端配置文件由本地拷贝到容器(如果使用配置文件挂载到宿主机的话,此处无效)
COPY ./*.ini ${FRP_DIR}/conf/

# 挂载配置文件路径到宿主机
VOLUME ${FRP_DIR}/conf

# 执行运行,指定配置文件方式进行启动(客户端:frpc,服务端 frps )
CMD ./frps -c ./conf/frps.ini
复制代码

 

2、环境变量文件

.env

# 数据挂在根路径
ROOT_VOLUME=/home/appdata

############# FRP 版本信息 ###########
FRP_VERSION=0.51.2

FRP_PATH=${ROOT_VOLUME}/frp

3、构建:

docker build -t="behelpful/frps" .

4、运行

 

docker run -it --name frps --restart=always -v /opt/frp:/opt/frp/conf -p 7000:7000 -p 9527:9527 a77a0e3bd382

 

5、docker-compose 方式运行

也可以是 docker-compose 模式进行运行 ,GitHub分享: https://github.com/chxlay/stonmace-docker/tree/main/extension-server

创建   docker-compose.yml 文件进行管理容器(以下是 Dockerfile 和 docker-compose.yml 在同一个目录下  context: ./ )

复制代码
version: '3.8'
services:

  # 内网穿透服务端 参考:https://www.cnblogs.com/chxlay/p/15116103.html
  easy-frps:
    # 构建 Docker 镜像
    build:
      context: ./frp
      dockerfile: Dockerfile
      args:
        - VERSION=${FRP_VERSION}
    image: easy-frp
    container_name: easy-frps
    restart: always
    # 启动命令
    command: './frps -c ./conf/frps.ini'
    volumes:
      # 配置文件路径挂载
      - '${FRP_PATH}/conf/:/var/frp/conf/'
    # 为了方便,我这里就直接配置 host 模式网络了
    network_mode: 'host'


  # 内网穿透客户端 参考:https://www.cnblogs.com/chxlay/p/15116103.html
  easy-frpc:
    # 构建 Docker 镜像
    build:
      context: ./frp
      dockerfile: Dockerfile
      args:
        - VERSION=${FRP_VERSION}
    image: easy-frp
    container_name: easy-frpc
    restart: always
    # 启动命令
    command: './frpc -c ./conf/frpc.ini'
    volumes:
      # 配置文件路径挂载
      - '${FRP_PATH}/conf/:/var/frp/conf/'
    # 为了方便,我这里就直接配置 host 模式网络了
    network_mode: 'host' 
复制代码

运行 指定运行 frps ,如果不指定则 docker-compose.yml 文件中所有的 service 全部启动, -d 是不打印日志后台启动,省略 -d 的话打印日志依然后台启动

docker-compose up -d easy-frps

 

posted @   Vermeer  阅读(1909)  评论(0编辑  收藏  举报

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起