FRP 内网穿透搭建(全)


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只对同意客户端的连接进行复用;

如: 阿里云中配置服务端:

[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 分享给外网使用,为了方便管理,被代理的 机器 服务的端口号映射外界的端口号为一致,方便记忆使用

[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 &

添加开机启动

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

 

方式一:

  手动下载 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包(网络环境不错的方式)

任意目录下均可执行

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

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


方式三(强烈推荐):

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

编写 Dockerfile

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
 
# 设置当前工作目录
WORKDIR /opt/frp
 
VOLUME /opt/frp
 
ENTRYPOINT ./frps -c ./conf/frps.ini

创建   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
 
      image: alay/frps:latest
      container_name: frps
      ports:
        # 服务端的端口号,需要容器重映射到宿主机
        - 7000:7000
        # 服务端管理页面的端口号,需要容器重映射到宿主机
        - 9527:9527
        # 每增加一个客户端代理的端口都需要进行映射暴露给宿主机
        - 20031:20031
 
      # 这里没有其他容器访问,不需要暴露 link 端口号给其他容器
      # expose:
      # - 80
      #  - 443
 
      # 挂载容器卷给宿主机
      volumes:
        - /opt/frp:/opt/frp/conf
 
      # 开机自动启动容器
      restart: always
 
      # 如果没有域名绑定的,需要删除下面的配置
      environment:
        # 指定需要绑定的域名
        VIRTUAL_HOST: ''

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

docker-compose up -d frps

客户端依葫芦画瓢,frps   --- 改为 ---->>> frpc ,其他的大同小异,自行实现即可


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM