前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >搭建frp内网穿透

搭建frp内网穿透

作者头像
R0A1NG
发布2022-02-19 09:34:37
发布2022-02-19 09:34:37
1.7K00
代码可运行
举报
文章被收录于专栏:R0A1NG 技术分享R0A1NG 技术分享
运行总次数:0
代码可运行

准备

一个有公网IP的服务器(国内外皆可) 客户端

frp脚本

frp脚本下载:https://github.com/fatedier/frp/releases/

选择合适的版本下载.

服务器配置

下载脚本

wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_linux_386.tar.gz

解压

tar zxvf frp_0.35.1_linux_386.tar.gz 进入frp目录 cd frp_0.35.1_linux_386

这里服务端,需要用到frps,frps.ini,systemd(其他的删除也行) 这里需要配置frps.ini这个配置文件 vim frps.ini打开文件

代码语言:javascript
代码运行次数:0
复制
#[必须]标识头
[common]
#[必须]服务器IP(0.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中的一个服务器IP,支持IPV6.)
bind_addr = 0.0.0.0
#[必须]FRP通讯端口(用于和客户端内网穿透传输数据的端口)
bind_port = 7000
#用于KCP协议UDP通讯端口(也可以和“bind_port”共用同一端口,如果没有设置,则kcp在frps中被禁用)
kcp_bind_port = 7000
#UDP通讯端口(以帮助使UDP打洞穿透NAT)
bind_udp_port = 7001
#[必须]连接认证密钥-特权模式(客户端连接到本服务端的登录验证密钥)
privilege_token = www.roaing.com
#如果你想支持http,必须指定http端口监听
vhost_http_port = 80
#如果你想支持https,必须指定https端口监听
vhost_https_port = 443
#限制只能使用服务端的指定端口(只允许客户端绑定你列出的端口,如果你什么都不设置的话,不会有任何限制。可自定义!开放这些端口,给客户端使用,包括tcp、udp、kcp、)
privilege_allow_ports = 2000-3000,3001,3003,4000-50000
#自定义二级域名(通过在 frps 的配置文件中配置 subdomain_host,就可以启用该特性。之后在 frpc 的 http、https 类型的代理中可以不配置 custom_domains,而是配置一个 subdomain 参数。只需要将 *.{subdomain_host} 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 {subdomain}.{subdomain_host} 来访问自己的 web 服务。)
subdomain_host = frps.com
#每个内网穿透服务限制最大连接池上限(每个内网穿透可以创建的连接池上限,避免大量资源占用)
max_pool_count = 5
#如果使用tcp流复用,默认值为true(不开启则,false客户端和服务器端之间的连接支持多路复用,不再需要为每一个用户请求创建一个连接,使连接建立的延迟降低,并且避免了大量文件描述符的占用,使 frp 可以承载更高的并发数。)
tcp_mux=true
#心跳配置,不建议修改,默认值是90
heartbeat_timeout = 90
#客户端与服务端时间相差验证(假如客户端设备的时间和服务端的时间相差大于设定值,那么拒绝客户端连接。如果设置为0,则不验证时间,默认值为900秒,可自定义。)
authentication_timeout = 900
#绑定服务端IP(0.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中的一个服务器IP,支持IPV6.)
dashboard_addr = 0.0.0.0
#WEB端口(访问WEB服务端IP:端口)
dashboard_port = 7500
#用户名(如果没有设置,默认值是admin)
dashboard_user = admin
#登录密码(如果没有设置,默认值是admin)
dashboard_pwd = admin
#记录日志(日志存放路径)
log_file = /etc/frp/log/frps.log
#日志记录类别(可选:trace, debug, info, warn, error)
log_level = info
#最多保存多少天日志
log_max_days = 7

根据以上注释,选择自己合适的配置使用, 这里,我的配置

代码语言:javascript
代码运行次数:0
复制
#与客户端进行通信的端口
server_port = 7000
server_addr = 0.0.0.0

#用户名
user = admin

#token
token = admin

记得要放行这个端口 然后启动frps

./frps -c frps.ini

客户端配置

下载frp

wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_freebsd_amd64.tar.gz 解压 tar frp_0.35.1_freebsd_amd64.tar.gz 进入frp目录 cd frp_0.35.1_linux_amd64 这里服务端,需要用到frpc,frpc.ini,systemd(其他的删除也行) 这里需要配置frpc.ini这个配置文件 vim frpc.ini打开文件

代码语言:javascript
代码运行次数:0
复制
# [common] 部分不可缺少
[common]

# server_addr 服务器ip,必须包含IP地址 或者 域名 主机名
# 用方括号括起来,例如 "[::1]:80", "[ipv6-host]:http" 或 "[ipv6-host%zone]:80"
server_addr = 0.0.0.0
server_port = 7000

# 如果您想通过 http 代理或 socks5 代理连接frps,则可以在此处或在全局环境变量中设置 http_proxy
# 仅在协议为tcp时有效
# http_proxy = http:// user:passwd@192.168.1.128:8080
# http_proxy = socks5:// user:passwd@192.168.1.128:1080

# 日志文件 路径,例如./frpc.log
log_file = ./frpc.log

# trace, debug, info, warn, error
log_level = info

log_max_days = 3

# FRP 身份验证
token = 12345678

# 通过 http api 设置控制 frpc 管理员地址
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

# 提前建立连接,默认值为零
pool_count = 5

# 如果使用tcp流多路复用,则默认为true,它必须与 frps.ini 相同
tcp_mux = true

# your proxy name will be changed to {user}.{proxy}
user = your_name

# 决定首次登录失败时是否退出程序,否则继续重新登录到 frps
# 默认为true
login_fail_exit = true

# 用于连接服务器的通信协议
# 现在它支持tcp,kcp和websocket,默认为tcp
protocol = tcp

# 如果 tls_enable 为 true,则 frpc 将通过 tls 连接 frps
tls_enable = true

# specify a dns server, so frpc will use this instead of default one
# dns_server = 8.8.8.8

# proxy names you want to start divided by ','
# default is empty, means all proxies
# start = ssh,dns

# heartbeat configure, it's not recommended to modify the default value
# the default value of heartbeat_interval is 10 and heartbeat_timeout is 90
# heartbeat_interval = 30
# heartbeat_timeout = 90

# 'ssh' is the unique proxy name
# if user in [common] section is not empty, it will be changed to {user}.{proxy} such as 'your_name.ssh'

[ssh]
# tcp | udp | http | https | stcp | xtcp, 默认:tcp
type = tcp
local_ip = 127.0.0.1
local_port = 22

# true 或 false,如果为 true,则将对 frps 和 frpc 之间的消息进行加密,默认为 false
use_encryption = false

# 如果为 true,则邮件将被压缩
use_compression = false

# 远程端口
remote_port = 6001

# frps将负载均衡同一组中代理的连接
group = test_group

# 可以将多个相同类型的 proxy 加入到同一个 group 中,从而实现负载均衡的功能。
group_key = 123456

# 启用后端服务的运行状况检查,它现在支持'tcp'和'http'
# frpc将连接本地服务的端口以检测其健康状态
health_check_type = tcp

# 检查连接超时
health_check_timeout_s = 3

# 如果连续3次失败,代理将从frps中删除
health_check_max_failed = 3

# 每 10 秒将进行一次检查
health_check_interval_s = 10

[ssh_random]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 如果 remote_port 为0,则 frps 将为您分配一个随机端口
remote_port = 0

# 如果要公开多个端口,请在节名称前添加“ range:”前缀
# frpc 将生成多个代理,例如'tcp_port_6010','tcp_port_6011'等。
[range:tcp_port]
type = tcp
local_ip = 127.0.0.1
local_port = 6010-6020,6022,6024-6028
remote_port = 6010-6020,6022,6024-6028
use_encryption = false
use_compression = false

[dns]
type = udp
local_ip = 114.114.114.114
local_port = 53
remote_port = 6002
use_encryption = false
use_compression = false

[range:udp_port]
type = udp
local_ip = 127.0.0.1
local_port = 6010-6020
remote_port = 6010-6020
use_encryption = false
use_compression = false

# 将您的域名解析为[server_addr],以便可以使用http://web01.yourdomain.com浏览web01、使用http://web02.yourdomain.com浏览web02
[web01]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true

# http用户名和密码是http协议的安全认证
# 如果未设置,则无需认证即可访问此custom_domains
http_user = admin
http_pwd = admin


# 如果frps的域是frps.com,则可以通过URL http://test.frps.com 访问[web01]代理
subdomain = web01

#custom_domains域名
custom_domains = youname.com,www.youname.com


# 位置仅适用于http类型
locations = /,/pic
host_header_rewrite = example.com

# 带有前缀“ header_”的参数将用于更新http请求标头
header_X-From-Where = frp
health_check_type = http

# frpc 将向本地 http 服务发送 GET http 请求'/ status'
# http 服务在返回 2xx http 响应代码时仍处于活动状态

health_check_url = /status
health_check_interval_s = 10
health_check_max_failed = 3
health_check_timeout_s = 3

[web02]
type = https
local_ip = 127.0.0.1
local_port = 8000
use_encryption = false
use_compression = false
subdomain = web01
custom_domains = web02.yourdomain.com
# 如果不为空,则frpc将使用代理协议将连接信息传输到您的本地服务
# v1或v2或为空
proxy_protocol_version = v2

[plugin_unix_domain_socket]
type = tcp
remote_port = 6003
# 如果定义了插件,则 local_ip 和 local_port 无效
# 插件将处理从 frps 获得的连接
plugin = unix_domain_socket

# 插件需要前缀 “ plugin_” 的参数
plugin_unix_path = /var/run/docker.sock

[plugin_http_proxy]
type = tcp
remote_port = 6004
plugin = http_proxy
plugin_http_user = abc
plugin_http_passwd = abc

[plugin_socks5]
type = tcp
remote_port = 6005
plugin = socks5
plugin_user = abc
plugin_passwd = abc

[plugin_static_file]
type = tcp
remote_port = 6006
plugin = static_file
plugin_local_path = /var/www/blog
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc

[plugin_https2http]
type = https
custom_domains = test.yourdomain.com
plugin = https2http
plugin_local_addr = 127.0.0.1:80
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1

[secret_tcp]

# 如果类型是 secret tcp ,则 remote_port 是无用的
# 想要连接本地端口的用户应使用 stcp 代理部署另一个 frpc,并且角色为 visitor
type = stcp

# 用于访客身份验证的sk
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false

# 在stcp服务器和stcp访客中,frpc的用户应相同
[secret_tcp_visitor]

# frpc角色访问者-> frps-> frpc角色服务器
role = visitor
type = stcp

# 您要访问的服务器名称
server_name = secret_tcp
sk = abcdefg

# 将此地址连接到访客stcp服务器
bind_addr = 127.0.0.1
bind_port = 9000
use_encryption = false
use_compression = false

[p2p_tcp]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false

[p2p_tcp_visitor]
role = visitor
type = xtcp
server_name = p2p_tcp
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 9001
use_encryption = false
use_compression = false

根据以上注释,选择自己合适的配置使用, 这里,我的配置(我配置的是ssh)

代码语言:javascript
代码运行次数:0
复制
[common]
server_addr = xx.xx.xx.xx(服务器IP)
server_port = 7000
privilege_token = admin
user = admin

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22 
remote_port = 6000

记得要把服务端6000端口也放行 启动frpc

./frpc -c frpc.ini

连接成功的服务端

连接成功的客户端

尝试连接frp穿透后的ssh

连接成功

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 03 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备
  • frp脚本
  • 服务器配置
  • 客户端配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档