内网穿透frp

内网穿透名字听起来可能很夸张,但是原理还是比较简单的(互联网好像都这个尿性)

简单来说,就是提供一种外部访问内网设备的方式。由于ipv4中ip的个数有限,人们只对少量的设备设置有公网ip,对于路由器其内部的子网并不会分配一个公网ip,而是给一个内网ip。当内部设备需要访问外部时,会转化为路由器的ip+端口号的形式,也就是NAT。

内网穿透就是你一个内网设备连接上中间服务器(拥有公网 IP),并长时间保留这个链接。这样,外部设备访问这个中间服务器的特定端口,就等价于访问这个内网设备了。

之前自己琢磨过一个,即通过ssh连接上外部设备,再在控制的外部设备内再ssh连接上内部设备。现在想想这个方案还真挺不错的(bushi,问题就是普遍还需要多步操作,以及很多时候你是没办法获得这个外部设备控制权的。今天偶然刷到frp,那刚好就来试一试。

配置准备

准备:一个公网服务器,一个内部设备。

项目:https://github.com/fatedier/frp/releases/tag/v0.62.1

下载回来后设这样的文件夹。frpc是frp的client客户端,frps是frp的server服务端。因此如果系统需要下载不同的frp服务端和客户端代码。.toml是配置文件

客户端即为你的内网设备,想要被外网访问的设备。服务端为你的公网服务器。

对于后续部署可以按照 https://www.bilibili.com/video/BV1Jf421q7we 配置,不过我还是更建议用docker去配置。

配置过程

本来打算直接本地跑然后systemd的,但是发现docker太好用了,宝塔太好用了。

下载宝塔linux,下面是通用的下载脚本(好评!)

if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh 6dca892c

然后再docker模块里面,搜索frp,先安装服务端,在服务器上操作。

基本都可以全默认,但是记得修改下自己的frp用户名和frp服务器密码。

确保7500端口放开,然后可以ip:7500登录

然后进入如下界面,说明成功。

对于FRP客户端,同样的方式。

在docker中搜索frp,此时搜索客户端,填写frp服务端的公网ip。可以配置自己的账户密码。

配置好后,访问客户端ip:7400,输入自己的账户密码后,登录结果如下。

现在基本的配置已经完成,下面配置内网穿透。

打开frp client,在configure界面中,下面配置自己的代理,下面以ssh为例。

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
# remotePort 是服务端将通过哪个端口访问客户端的22端口
remotePort = 59022

把你需要配置的内容,放在[[proxies]]下,粘贴过去。一般ssh端口都是22,如果有过修改请麻烦调整为对于端口。

完成后,点击上面的upload,上传,此时在frp client的overview可以见到自己的配置

回到frp server,可以看到服务已经被注册上了

此时,你就可以通过两次ssh的方式简介连接到你的内网服务器了。

如果想要配置内网的服务,那么也可以参照如下,localport就是你内网的进程,完成后再上传一下

[[proxies]]
name = "kodbox"
type = "http"
# 这个是客户端某一个服务的端口,比如kodpod在内部服务器1111端口口上。
localPort = 1111
# customDomains 填写域名,这里演示直接填写服务端的IP,可以替换成域名,如:xxx.bt.cn
customDomains = ["149.88.82.191"]

配置完成,你可以通过访问我通过内网穿透访问我的kodpod:http://149.88.82.191:40800/

整点小活

ssh支持遂穿,即-L参数,可以把对应主机端口上的数据转发过来。那么实现两个功能,一当然是我们的vnc,试一试远控一下我们的主机,二是尝试用宝塔控制一下我们的主机。

ssh -L 5901:localhost:5901 root@149.88.82.191 -p 2222 // 连接服务器
ssh -L 5901:localhost:5901 djs@127.0.0.1 -p 59022     // 内网穿透

再vnc启动一下,好啦,点亮了。

可以合并一下操作

ssh -L 5901:localhost:5901 -J "root@149.88.82.191:2222" djs@127.0.0.1 -p 59022

很好啊很好,但是啊但是可以感受下速度(怎么背景p5的声音录进去了

总之娱乐效果很强(

对于宝塔linux,我内网端口在37548,也是类似的内网穿透一下后,也是轻轻松松访问上了。

如此一来出去玩也可以操作我的电脑啦(爽

最后整个远程写代码,这样就基本全部大功告成了。

我已经有一个远程的vscode了,很轻量级。不过由于是用docker部署的,因此文件内容也只可以看到局部一些。也许可以配置成全局,这个后面再说。

同理对于jetbrain,jetbrain需要的是ssh连接,那我们可以用前面的套路,内网穿透两次,运用-L把内部的ssh端口数据转发,接着,只需访问自己本机的22端口,即可完成远控🥰

ssh -L 22:localhost:22 root@149.88.82.191 -p 2222
ssh -L 22:localhost:2222 djs@127.0.0.1 -p 59022

最后修改一下,成功远控我们的内部服务器,且通过了遂穿加密十分安全🥰🥰

至此也算打通了桌面,文件,项目三重控制了,同时也暴露了需要的服务。以后来说,还真可以轻薄本出门,剩下全部远控了23333

后记

此时在我的终端上,直接显示的是我的内网设备(见下图)。这不禁让我有些好奇,我是直接连接上了内网的设备呢,还是通过服务器中转来的。

即,是:

我的设备 -> 中间服务器 -> 内网设备

还是:

我的设备 -> 内网设备

先查询登录信息,发现是我本地登录(笑

官方链接如下:https://gofrp.org/zh-cn/docs/overview

最终查询后发现应该是通过中间服务器转发而来的,如果需要直连还需要研究研究23333

暂无评论

发送评论 编辑评论


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