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
本文来自博客园,作者:Vermeer,转载请注明原文链接:https://www.cnblogs.com/chxlay/p/15116103.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步