FRP 内网穿透搭建(全)

>>>  干货 2022-03-08 已经重新整理,发布在个人码云上:https://gitee.com/chxlay/iserver-docker  <<<<<

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

下载机型对应的版本

 或者 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

解压后:

tar -zxvf frt_xxxxx.tar.gz

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


服务端配置详解:

[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=behelpful
# 可视化管理界面的登录密码 dashboard_pwd
=behelpful9527

# 客户端与服务端连接认证密码 token = behelpful@8888

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

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 &

 


客户端配置详解

[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
= behelpful@8888 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 &

添加开机启动

相关阅读  Cisco命令大全

在路径:/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

 


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

[common]
 
# FRP 服务端密码
token = behelpful@8888# 服务端连接地址
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

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

 

 

 客户端管理界面(局域网中访问):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版运行 frp

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

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

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

方式一:

  手动下载 GitHub 上的 frp tar包文件上传到 Linux 系统中(网络环境不佳的方式,一段时间GitHub访问特别困难,使用此方式)

将下载好的 tar 包文件,和编写好的配置文件 frps.ini(服务端为例子)放入 Dockerfile 同一个目录下,切记同一个目录下,或者只要符合 COPY 的原则即可

编写Dockerfile (手动下载的 0.36.0 版本)

FROM centos
 
MAINTAINER Alay<chxlay@gmail.com>
 
# 将GitHub 下载的 frp 文件拷贝到 Dockerfile 同一个路径下
COPY frp_0.36.0_linux_amd64.tar.gz /opt/frp_0.36.0_linux_amd64.tar.gz
 
RUN set -x \
    && cd /opt \
    && tar -zxvf frp_0.36.0_linux_amd64.tar.gz \
    && mv frp_0.36.0_linux_amd64 frp/
 
# 由于运行时配置文件加载位置为:./conf 路径下,所以为以下COPY 配置文件准备配置文件目录
RUN mkdir /opt/frp/conf/ -p \
 
# 服务端配置文件由本地拷贝到容器(二选一即可)
# COPY frps.ini /opt/frp/conf/frps.ini
# 挂载配置文件路径到宿主机,挂载与上面的复制配置文件到容器内(二选一即可)推荐
VOLUME /opt/frp/conf
 
# 设置当前工作目录
WORKDIR /opt/frp
 
# 服务端暴露的端口号
EXPOSE 7000
# 管理页面暴露的端口号
EXPOSE 9527
 
# 启动 frp 服务的命令,客户端则改为 frpc即可
ENTRYPOINT ./frps -c frps.ini

构建:

docker build -t="behelpful/frps" .

运行(不挂载与挂载二选一)

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

方式二:

  联网下载 GitHub 上的  frp tar包(网络环境不错的方式)

相关阅读  前端攻城狮学习笔记五:继承、原型、setInterval、数组去重

任意目录下均可执行    (2022-03-05 更新,由于 centos 镜像的更新,且此方案下载的工具较多,网络连接 github 问题也较多,所以不建议使用部署时下载 frp 的方式 )

FROM centos
 
MAINTAINER Alay<chxlay@gmail.com>
 
ARG FRP_VERSION=0.36.0
 
# 安装工具,下面用完后移除
RUN yum -y install wget
 
# 安装此工具是解决 wget https 时 Unable to establish SSL connection.报错
# 同时 wget 需要携带参数:--no-check-certificate
RUN yum -y install openssl
 
# 创建临时工作目录,下载 frp tar包文件的
WORKDIR /tmp
 
RUN set -x \
    && wget https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz --no-check-certificate \
    && tar -zxvf frp_${FRP_VERSION}_linux_amd64.tar.gz \
    && mv frp_${FRP_VERSION}_linux_amd64 /opt/frp/ \
    && yum remove -y wget \
    && yum remove -y openssl \
    && yum autoremove -y
 
# 由于运行时配置文件加载位置为:./conf 路径下,所以为以下COPY 配置文件准备配置文件目录
RUN mkdir /opt/frp/conf/ -p
 
# 服务端配置文件由本地拷贝到容器(二选一即可)
# COPY frps.ini /opt/frp/conf/frps.ini
# 挂载配置文件路径到宿主机,挂载与上面的复制配置文件到容器内(二选一即可)推荐
VOLUME /opt/frp/conf
 
# 服务端暴露的端口号
EXPOSE 7000
# 管理页面暴露的端口号
EXPOSE 9527
 
# 设置当前工作目录
WORKDIR /opt/frp
 
ENTRYPOINT ./frps -c ./conf/frps.ini

构建、运行 等和方式同步执行


方式三 

  (2022-03-05 更新,由于 centos 镜像的更新,且此方案下载的工具较多,网络连接 github 问题也较多,所以不建议使用部署时下载 frp 的方式 )

  docker-compose 方式,这里以网络方式下载 GitHub 中 frp 的 tar 包文件(网络环境不好的自行改为本地 COPY 模式)

编写 Dockerfile, frp 的版本 通过 环境变量 .env文件

FROM centos

LABEL author=Alay<chxlay@gmail.com>

ARG VERSION

# 安装工具,下面用完后移除
RUN yum -y install wget

# 安装此工具是解决 wget https 时 Unable to establish SSL connection.报错
# 同时 wget 需要携带参数:--no-check-certificate
RUN yum -y install openssl

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

RUN set -x \
    && wget https://github.com/fatedier/frp/releases/download/v${VERSION}/frp_${VERSION}_linux_amd64.tar.gz --no-check-certificate \
    && tar -zxvf frp_${VERSION}_linux_amd64.tar.gz \
    && mv frp_${VERSION}_linux_amd64 /opt/frp/ \
    && yum remove -y wget \
    && yum remove -y openssl \
    && yum autoremove -y

# 由于运行时配置文件加载位置为:./conf 路径下,所以为以下COPY 配置文件准备配置文件目录
RUN mkdir /opt/frp/conf/ -p

# 服务端配置文件由本地拷贝到容器(二选一即可)
# COPY frps.ini /opt/frp/conf/frps.ini
# 挂载配置文件路径到宿主机,挂载与上面的复制配置文件到容器内(二选一即可)推荐
VOLUME /opt/frp/conf

# 设置当前工作目录
WORKDIR /opt/frp

VOLUME /opt/frp

ENTRYPOINT ./frps -c ./conf/frps.ini

环境变量文件。.env

FRP_VERSION=0.36.0

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

version: '2'
services:
  frps:
    # 构建 Docker 镜像
    build:
      # 构建的上下文参数路径,相对 docker-compose.yml 的路径
      context: ./
      # 指定Dockerfile 文件相当于 docker build -f 只有一个Dockerfile 的时候可以省略不写
      dockerfile: Dockerfile
      args:
        - VERSION=${FRP_VERSION}
    image: alay/frps:latest 
    container_name: frps
    # 如果使用了 network_mode: 'host'  则以下端口映射就不需要配置了,否则,每一个应用的端口都需要配置映射  
    ports: 
    # 服务端的端口号,需要容器重映射到宿主机 
      - 7000:7000 # 服务端管理页面的端口号,需要容器重映射到宿主机 
      - 9527:9527 # 每增加一个客户端代理的端口都需要进行映射暴露给宿主机 
      - 20031:20031 
    
    # 这里没有其他容器访问,不需要暴露 link 端口号给其他容器 
    
    # expose: 
      # - 80 
      # - 443 
    
    # 挂载容器卷给宿主机,挂在配置文件  
    volumes: 
      - /opt/frp:/opt/frp/conf 
    
    # 开机自动启动容器  
    restart: always 
    
    # 为了方便,我这里就直接配置 host 模式网络了     
    network_mode: 'host'

 

相关阅读  静态路由汇总(路由聚合)

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

docker-compose up -d frps

客户端依葫芦画瓢,frps   — 改为 —->>> frpc ,在个人码云中有示例


AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年

本文来自一日成建站教程网https://www.yiricheng.cn/),为广大编程爱好者提供零基础快速搭建博客网站的方法,分享计算机网络、HTML、CSS、JavaScript、PHP、响应式设计以及Python自动化办公的博客文章,另有各类小工具、电子书、免费教程。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。