Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[frp] 内网穿透神器搭建 萌新也看得懂的教程

[frp] 内网穿透神器搭建 萌新也看得懂的教程

作者头像
子润先生
修改于 2021-06-10 03:26:57
修改于 2021-06-10 03:26:57
2K00
代码可运行
举报
运行总次数:0
代码可运行

目前个人认为配置和使用上是最方便的内网穿透工具,已经用了快两年了,拿来穿透进没有公网的位于学校宿舍的路由器,蹭蹭百度文库企业账号和知网之类的23333

Head Pic: 「ALTER」/「NIAN」[pixiv]

frp

fatedier/frp

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议

前言

为什么不直接放一个一键脚本?手动搭建不会很麻烦吗?

  1. 这个程序配置起来一点都不麻烦
  2. 一键脚本固然方便,但是对于萌新,我更建议你们尝试手动配置,这样对熟悉与理解 Linux 会有更大帮助
  3. 手动配置具有更大的自由度,并且你将会很清楚这些程序是干什么的

本文将以萌新也能看懂的方式讲解

  1. frp服务端搭建
  2. frp服务端配置
  3. frp客户端配置

不会讲解frp客户端的搭建,因为目前frp的主要用途是用于内网穿透,因此客户端通常情况下是家用路由器之类的没有公网的设备

本文针对的受众是拥有“刷了带frp的固件的路由器(比如这个)”而不清楚如何使用或者在使用上存在疑惑的萌新

如果你需要在一个不含 frp 的 openwrt 路由器上搭建客户端,或者是拥有树莓派之类的家用 linux 机想部署客户端,那么我认为你的知识水平应该足以根据frp服务端搭建的步骤来类比出客户端的搭建方法,以及通过百度谷歌来解决问题

0.18.0版本开始,新版与旧版不兼容,并且部分配置字段不同,为了不混淆,这里讲的是新版的搭建与配置[/scode]

服务端 - frps

1. 下载程序

首先到 frp 的 releases 页面下载最新版的对应 VPS 的处理器架构的压缩包 https://github.com/fatedier/frp/releases

如何知道 VPS 的处理器架构?在 VPS 上运行这个命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1arch

如果输出x86_64则需要下载带linux_amd64的那个压缩包; 如果输出的是其他的,则在文件列表中找 linux 的对应架构的压缩包

x86_64架构举例(目前大多数都应该是这个架构),本文撰写时 frp 最新版是v0.18.0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2
3
4
5
6
7
8
9
10cd /root
# 下载
wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.18.0/frp_0.18.0_linux_amd64.tar.gz
# 解压
tar -xzvf frp_0.18.0_linux_amd64.tar.gz
# 文件夹名改成 frp,不然目录太长了不方便
mv frp_0.18.0_linux_amd64 frp
cd frp
# 确保 frps 程序具有可执行权限
chmod +x frps

然后试着运行一下frps,看看是否能正常运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1./frps --help

正常情况下会输出一串帮助信息,那么就说明你下载了正确架构的版本

如果提示-bash: ./frps: cannot execute binary file: Exec format error就说明你下错版本了

2. 配置程序

参考以下配置说明来书写配置文件frps.ini,你可以先在电脑上打一份草稿 此处只解释说明一些必要和常用的配置,如需研究完整配置说明请看目录下的frps_full.ini,以及参考frp中文说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30# 下面这句开头必须要有,表示配置的开始
[common]

# frp 服务端端口(必须)
bind_port = 7000

# frp 服务端密码(必须)
token = 12345678

# 认证超时时间,由于时间戳会被用于加密认证,防止报文劫持后被他人利用
# 因此服务端与客户端所在机器的时间差不能超过这个时间(秒)
# 默认为900秒,即15分钟,如果设置成0就不会对报文时间戳进行超时验证
authentication_timeout = 900

# 仪表盘端口,只有设置了才能使用仪表盘(即后台)
dashboard_port = 7500

# 仪表盘访问的用户名密码,如果不设置,则默认都是 admin
dashboard_user = admin
dashboard_pwd = admin

# 如果你想要用 frp 穿透访问内网中的网站(例如路由器设置页面)
# 则必须要设置以下两个监听端口,不设置则不会开启这项功能
vhost_http_port = 10080
vhost_https_port = 10443

# 此设置需要配合客户端设置,仅在穿透到内网中的 http 或 https 时有用(可选)
# 假设此项设置为 example.com,客户端配置 http 时将 subdomain 设置为 test,
# 则你将 test.example.com 解析到服务端后,可以使用此域名来访问客户端对应的 http
subdomain_host = example.com

然后把你的准备好的配置文件内容写入frps.ini

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2
3
4
5
6
7
8
9echo "[common]
bind_port = 7000
token = 12345678
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10080
vhost_https_port = 10443
subdomain_host = example.com" > frps.ini

试着启动一下frps

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2# 使用 -c 参数指定配置文件
./frps -c frps.ini

如果没有出现错误提示就说明配置没有问题,可以正常使用

接着按下Ctrl + C终止程序运行

3. 使 frps 在后台持续运行

启动

直接使用前面的命令行来运行是不行的,因为在关掉 ssh 窗口后程序frps就会停止运行,因此要使用nohup [command] &这种操作来使其在后台运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1nohup /root/frp/frps -c /root/frp/frps.ini &

并且程序的所有输出(日志)会被写入nohup.out文件中,你可以使用cat命令查看其内容

停止

想停止的话,结束frps即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1pkill frps
重启

那就先停止再启动嘛23333

加入开机自启

编辑/etc/rc.local文件,将启动那句命令加到exit 0语句之前(如果有)

客户端 - frpc

如需研究完整配置说明请看目录下的frpc_full.ini,以及参考frp中文说明

书写配置

基本配置(必须)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2
3
4
5
6
7
8# 下面这句开头必须要有,表示配置的开始
[common]
# frp 服务端地址,可以填ip或者域名
server_addr = 0.0.0.0
# frp 服务端端口,即填写服务端配置中的 bind_port
server_port = 7000
# 填写 frp 服务端密码
token = 12345678
TCP/UDP

这里以转发 ssh 为例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# 自定义一个配置名称,格式为“[名称]”,放在开头
[ssh]
# 连接类型,填 tcp 或 udp
type = tcp

# 本地ip,填你需要转发到的目的ip
# 如果是转发到frp客户端所在本机(比如路由器)则填 127.0.0.1
# 否则填对应机器的内网ip
local_ip = 127.0.0.1
# 需要转发到的端口,比如 ssh 端口是 22
local_port = 22

# 是否加密客户端与服务端之间的通信,默认是 false
use_encryption = false
# 是否压缩客户端与服务端之间的通信,默认是 false
# 压缩可以节省流量,但需要消耗 CPU 资源
# 加密自然也会消耗 CPU 资源,但是不大
use_compression = false

# frp 服务端的远程监听端口,即你访问服务端的 remote_port 就相当于访问
# 客户端的 local_port,如果填0则会随机分配一个端口
remote_port = 6001
HTTP(S)

以转发路由器设置页面为例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37# 自定义一个配置名称,格式为“[名称]”,放在开头
[router-web]
# 连接类型,填 http 或 https
type = http

local_ip = 127.0.0.1
local_port = 80

# http 可以考虑加密和压缩一下
use_encryption = true
use_compression = true

# 自定义访问网站的用户名和密码,如果不定义的话谁都可以访问,会不安全
# 有些路由器如果从内部访问web是不需要用户名密码的,因此需要在这里加一层密码保护
# 如果你发现不加这个密码保护,路由器配置页面原本的用户认证能正常生效的话,可以不加
http_user = admin
http_pwd = admin

# 还记得我们在服务端配置的 subdomain_host = example.com 吗
# 假设这里我们填 web01,那么你将 web01.example.com 解析到服务端ip后
# 你就可以使用 域名:端口 来访问你的 http 了
# 这个域名的作用是用来区分不同的 http,因为你可以配置多个这样的配置
subdomain = web01

# 自定义域名,这个不同于 subdomain,你可以设置与 subdomain_host 无关的其他域名
# subdomain 与 custom_domains 中至少有一个必须要设置
custom_domains = web02.yourdomain.com

# 匹配路径,可以设置多个,用逗号分隔,比如你设置 locations 为以下这个,
# 那么所有 http://xxx/abc 和 http://xxx/def 都会被转发到 http://xxx/
# 如果不需要这个功能可以不写这项,就直接该怎么访问就怎么访问
locations = /abc,/def

# 重写 host header,相当于反向代理中的“发送域名”
# 如果设置了,转发 http 时,请求中的 host 会被替换成这个
# 一般情况下不需要用到这个,可以不写这项
host_header_rewrite = dev.yourdomain.com
TCP/UDP 范围转发
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2
3
4
5
6
7
8
9
10
11# 自定义一个配置名称,格式为“[range:名称]”,放在开头
[range:multi-port]

type = tcp
local_ip = 127.0.0.1
use_encryption = false
use_compression = false

# 本地端口和远程端口可以指定多个范围,如下格式,且范围之间必须一一对应
local_port = 6010-6020,6022,6024-6028
remote_port = 16010-16020,16022,16024-16028

合并配置

将你决定要使用的配置合起来,然后填到路由器的 frp 配置脚本中

如果你是在 linux 上运行,则写入到frpc.ini中,然后仿照运行服务端的方式来运行客户端

比如将以上示例配置合并之后,看起来应该是这个样子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 复制1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33[common]
server_addr = 0.0.0.0
server_port = 7000
token = 12345678

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false
remote_port = 6001

[router-web]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = true
use_compression = true
http_user = admin
http_pwd = admin
subdomain = web01
custom_domains = web02.yourdomain.com
locations = /abc,/def
host_header_rewrite = dev.yourdomain.com

[range:multi-port]
type = tcp
local_ip = 127.0.0.1
use_encryption = false
use_compression = false
local_port = 6010-6020,6022,6024-6028
remote_port = 16010-16020,16022,16024-16028

事后

登录服务端的 dashboard,看看是否连接成功,测试各项转发是否可用

如果出现无法使用的情况,按照基本思路排查问题:

  1. 看服务端和客户端日志是否有报错
  2. 客户端与服务端连接正常,就检查是否是服务端的防火墙或者安全组是否没开放使用到的端口
  3. 如果客户端是在路由器上,想转发至内网设备上的某个端口或服务,请检查目标设备的防火墙是否开放所需端口,且建议为该内网设备分配一个静态ip

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
搭建frp内网穿透
frp脚本下载:https://github.com/fatedier/frp/releases/
R0A1NG
2022/02/19
1.8K0
搭建frp内网穿透
Frp内网穿透
Frp是一个用于内网穿透的反向代理工具,可以方便的从外网访问内网中的主机。frp分为服务器端(frps)和客户端(frpc),想要实现内网穿透,除了需要frp工具,我们还需要一台VPS。接下里就演示一下内网穿透的效果。
Tommonkey
2023/02/27
2.3K0
Frp内网穿透
frp配置-内网穿透工具最佳实践
frp是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
zhangheng
2020/04/29
9.2K0
frp配置-内网穿透工具最佳实践
FRP 内网穿透下载配置[通俗易懂]
搭建FRP很简单,关键的步骤只有三步: 1,获取FRP文件; 2,设置FRP配置文件; 3,启动FRP服务。
全栈程序员站长
2022/09/30
1.6K0
FRP 内网穿透下载配置[通俗易懂]
Frp实现网络的内外穿透
在没有Frp穿透开源出来的时候,链接远程网络通常是采用向日葵或者TeamViewer,并且在做渗透测试的时候面对的目标常常是处于内网之中;在以往的渗透中拿到了服务器权限后,个人最常使用的内网代理方式是 reGeorg + Proxifier/proxychains,虽然是脚本代理的方式,但使用快捷方便,能够迅速访问到内部网;但是但是随着目标内网环境越来越大,这种脚本形式代理的局限性越来越明显;
全栈工程师修炼指南
2022/09/29
3.5K0
Frp实现网络的内外穿透
FRP内网穿透
对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题。之前一直用最简单的nc做反代,折腾了几次之后迁移到FRP上面了;记录一下ABC;
happy123.me
2019/12/30
3.8K0
内网隧道之frp
frp 的程序代码为了糅合 frpc 和 frps 之间的请求,自己在TCP之上进行协议封装,因此大量使用了 channel, 所以代码被割散到各处,很不容易连贯起来
中龙技术
2022/09/29
7420
内网隧道之frp
内网渗透 | 内网穿透工具FRP的使用
FRP(Fast Reverse Proxy) 是一款简单,好用,稳定的隧道工具。FRP 使用 Go 语言开发,它是一款高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务。FRP 支持 TCP、UDP、KCP、HTTP、HTTPS等协议类型,并且支持 Web 服务根据域名进行路由转发。在进行内网渗透中,FRP是常用的一款隧道工具。
谢公子
2022/01/19
2.5K0
内网渗透 | 内网穿透工具FRP的使用
快速搭建frp的ssh和http的内网穿透
frp 是一个用Go语言开发的,可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 、 http 和 https。可将一个部署在本机的web服务映射到外网。
没有故事的陈师傅
2020/11/11
5.8K2
快速搭建frp的ssh和http的内网穿透
内网穿透工具 frp 使用教程
frp 适用于有公网IP需求的用户,如果有需要在互联网中找到自己的电脑,但是电脑又没有公网IPv4地址,又不想用IPv6地址,恰好还有一个空闲的拥有IPv4公网地址的云服务器,那么frp 是使用你需要的工具。
为为为什么
2022/08/06
6.3K0
内网穿透工具 frp 使用教程
Frp 中文文档
master 分支用于发布稳定版本,dev 分支用于开发,您可以尝试下载最新的 release 版本进行测试。
雪梦科技
2020/05/11
6.1K0
Frp 中文文档
内网渗透之隐藏通信隧道 -- sock5
SOCKS是一种代理服务,可以简单地将一端的系统连接另一 端。 SOCKS支持多种协议,包括HTTP、FTP等。SOCKS分为SOCKS 4和SOCKS 5两种类型: SOCKS 4只支持TCP协议;SOCKS5不仅支持TCP/UDP协议,还支持各种身份验证机制等,其标准端口为1080.SOCKS能够与目标内网计算机进行通信,避免多次使用端口转发。
Gh0st1nTheShel
2021/11/23
5.7K0
内网穿透FRP搭建教程
        开篇先虾扯蛋一会儿,看到上一篇博文更新已经是1个多月之前的文章了,当时学习小程序忙!拖拖拉拉一个多月,也没学到什么,不过基本的构建明白了!今天是给大家分享一下,内网穿透教程!顺便分享一下自己的frp服务器!
十月梦想
2018/08/29
3.7K0
安排几款实用的内网穿透工具+教程
本文以渗透的视角,总结几种个人常用的内网穿透,内网代理工具,介绍其简单原理和使用方法。
民工哥
2021/11/26
1.4K0
Ubuntu安装frps服务器与xtcp配置
ubuntu安装frps服务器与xtcp配置 1.在服务器上安装 1.下载 wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz tar -zxvf frp_0.29.0_linux_amd64.tar.gz 2.修改服务器配置文件:frps.ini [common] bind_port = 7000 #auth_token = frp # 指定 Dashboard 的监听的
用户5746037
2022/05/18
6.4K0
centos frp内网穿透_内网穿透 无需公网ip
安装步骤省略(下载解压拷贝到server服务器和client服务器完事)具体移步:github
全栈程序员站长
2022/09/30
2.2K0
推荐几款实用的内网穿透工具
本文以渗透的视角,总结几种个人常用的内网穿透,内网代理工具,介绍其简单原理和使用方法。
Java团长
2022/02/10
9.1K1
推荐几款实用的内网穿透工具
常见内网穿透工具,收好了!
目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……)。
网络工程师笔记
2023/09/09
1.5K0
常见内网穿透工具,收好了!
FRP内网穿透_内网穿透 无需公网ip
二、为什么要使用内网穿透 为了外网要访问内网,因为当不在同一局域网内,ip和地址互相ping不同的话,最简单的方式是使用向日葵与teamview,但是用起来并不方便。
全栈程序员站长
2022/09/30
5.1K0
FRP内网穿透_内网穿透 无需公网ip
树莓派折腾记:使用FRP穿透内网
文章更新:   20170525 初次成文 问题提出:   在实际网络环境中,树莓派常常处于内网环境下,由于内外网相互隔离的原因,我们无法在外网访问处于内网中的树莓派。为了解决这个问题,"内网穿透"技术应运而生。   FRP是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https协议。在这篇文章中,小苏将为大家介绍FRP服务端和客户端的配置,通过FRP,让树莓派穿透内网,使大家在外网环境下也能轻松访问处于内网中的树莓派~   本篇文章只做抛砖引玉目的 ,请大家在看完文章
美丽应用
2018/07/20
2.5K0
相关推荐
搭建frp内网穿透
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验