frp内网穿透

前言

应用场景

  • 远程(桌面)连接,办公与学习
  • 游戏服务器搭建
  • 个人网盘远程访问
  • 内部服务公网访问
  • 适用于公网设备配置不高,但有高带宽和稳定的IP

技术原理

服务端运行,监听一个主端口,等待客户端的连接; 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型; 服务端fork新的进程监听客户端指定的端口; 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端; 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

简单来说,就是一个客户端,一个服务端,客户端和服务端建立连接,同时告诉服务端说,你要监听XX端口XX服务,然后有人来访问服务端那个端口,就会把流量转给客户端处理

实现教程

清楚了你的需求和技术原理之后,我们就开始着手实现,首先来看一下我们需要准备的东西

  • 带有公网IP的设备
  • 运行服务的内网设备
  • 内网穿透工具 frp

大概流程

  1. 打开github项目,下载对应的版本,每个版本的压缩文件中都会带有客户端和服务端,s为服务端(server),c为客户端(client)
  2. 将文件放在公网IP的设备上,解压编辑配置文件frps.toml后运行
  3. 在内网设备配置好客户端文件后运行

具体教程

以下只是本人根据自己的情况进行的配置,如果有问题,请结合官方文档操作——frp官方文档

  1. 下载文件

可以看到有各种版本的,包括安卓、Linux、Windows等等

我这里服务端是Linux,客户端是windows,所以需要下载两个版本的文件

  1. 配置服务端

下载解压之后,其中的frps和frps.toml是服务端文件运行所需要的,先不要急着运行,先编辑配置文件进行配置

# frps.toml
bindPort = 7000 # 服务端与客户端通信端口

auth.token = "填写你的token" # 身份验证令牌,frpc要与frps一致

vhostHTTPPort = 80 #配置HTTP端口,如果你想开启web服务的话,当然也可以配置https

# Server Dashboard,可以查看frp服务状态以及统计信息
webServer.addr = "0.0.0.0" # 后台管理地址,一定要写四个0地址,写127地址是无法打开的
webServer.port = 7500 # 后台管理端口
webServer.user = "admin" # 后台登录用户名
webServer.password = "admin" # 后台登录密码

以上是我的配置文件,当然,你也可以查看官方的配置文件,只不过我们不一定需要那么多,多配置不如少配置

官方配置文件——frp完整配置文件示例

服务端测试

配置文件填写完成后,使用命令./frps -c ./frps.toml运行服务端,然后使用IP+端口打开后台,如果可以正常访问,则运行成功

  1. 配置客户端

客户端我用的是Windows版本,其他版本的操作方法都大同小异,不再演示

和服务端一样,保留frpc和fprc.toml,使用编辑器打开配置文件

serverAddr = "你的公网IP" #远程服务器IP
serverPort = 7000 #流量转发服务器端口

#认证秘钥
auth.token = "和服务端token保持一致"

#具体的连接配置

#http配置(需要服务端配置vhostHTTPPort或HTTPS)
[[proxies]]
name = "web1" #name随意,唯一
type = "http" #类型有tcp、udp、http、https等
localPort = 8088 #本地端口
customDomains = ["填写你的域名"] #将域名解析到公网IP,即可访问内网web服务

#配置多个网站,只需要要修改name,本地端口和域名,按照域名访问即可

#tcp连接测试
[[proxies]]
name = "test_tcp"
type = "tcp"
localPort = 8089
remotePort = 8099

配置文件填好之后,使用命令frpc.exe -c frpc.toml运行,如果没有报错且出现success说明成功了

访问内网服务

我们可以打开服务端后台查看是否有连接

可以看到后台已经出现了tcp连接信息,说明我们已经可以通过互联网访问内网服务了

我们可以将端口改为3389或22等基于tcp协议的一些服务,这样就可以实现远程(桌面)连接

Frp桌面客户端

以上配置是使用命令行和修改配置文件实现的,这里给大家推荐一个可视化、跨平台的frp客户端工具

frpc-desktop

具体可以看图片

后话

由于服务端和客户端的运行和建立连接,都是通过所在的终端进程进行的,所以只要终端会话关闭,服务也就停止了,我们可以将启动方式改为服务启动从而实现后台运行

方案实现

我的方案是将服务端转入后台运行,这样只需要配置好服务端启动一次,客户端就可以随连随用

网络上的教程大多都是将frps添加为一个服务,使用systemctl进行管理,但是经过我的实际操作,问题很多而且也不够简单

我的方法是通过切换终端会话(类似tty切换)来保持后台运行,我使用的软件是tmux,当然你也可以使用其他软件,如screen等

使用tmux实现最简操作

tmux
./frps -c ./frps.toml
#快捷键Ctrl+B D 即可保留终端会话,转入后台运行

tmux的一些使用教程

#tmux帮助手册

#使用方法
输入'tmux'打开tmux窗口进入
输入'exit'或快捷键'ctrl+d'退出,不保留会话和进程

#创建会话
tmux new -s 会话名 (默认从0-n)

#分离会话
输入'tmux detach'或快捷键'ctrl+b d'
执行后退出tmux窗口,但会话和进程转入后台运行

#查看会话
tmux ls

#进入会话
tmux attach -t 会话名/编号

#杀死会话
tmux kill-session -t 编号/会话名

#切换会话
tmux switch -t 编号/会话

#重命名会话
tmux rename-session -t 编号/会话名

#快捷键
Ctrl+b d:分离当前会话
Ctrl+b s:列出所有会话
Ctrl+b $:重命名当前会话

#最简操作
新建会话tmux。
在 Tmux 窗口运行所需的程序。
按下快捷键Ctrl+b d将会话分离。
下次使用时,重新连接到会话tmux attach-session -t my_session。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇