在二级路由下用树莓派和frp折腾内网穿透

国产精品牛牛热在线视频国产
栏目分类
国产精品
国产精品
国产免费
你的位置:国产精品牛牛热在线视频国产 > 国产精品 > 在二级路由下用树莓派和frp折腾内网穿透
在二级路由下用树莓派和frp折腾内网穿透
发布日期:2021-10-22 03:47    点击次数:144
背景

买个草莓派发展一直是我想做的事情。可惜我没钱。直到今年双十一,我咬了咬牙,终于买了树莓派。

其实我当时买草莓派是有直接原因的,就是想开发云打印项目。令人失望的是,因为驾驶问题,办公室三台打印机中只有一台可以连接到树莓Pi,但那台是性能最差的一台。在这方面,树莓Pi不如我十一年前在办公室带的笔记本电脑——三台打印机都能流畅连接。所以这个树莓派一直放在创业园的办公室里吃灰。

当然,如果我想执行任何命令,我可以把我的电脑带到创业园,连接到办公网络,甚至打开SSH到树莓Pi——我甚至不需要带电脑,但我可以使用11年前的电脑。我这样已经很久了,但是这种方法的缺点很明显:如果忘记带书和资料,就要在宿舍和办公室之间来回跑。虽然创业园离宿舍不远,但我的宿舍在六楼。这让我有了远程操作草莓派的想法。

众所周知,运营商分配给用户的IP正在发生变化。在这种情况下,需要DDNS,即客户端将域名指向您当前的IP地址,并动态检测更改。办公路由器是TP-LINK,虽然不是智能路由器,但也有DDNS。按理说,只要DDNS和港口转运都设置好了,就不会有问题。但是我发现这是行不通的。后来才知道DDNS实施的前提是路由器有公共IP,但可惜的是办公室没有公共IP,位于校园网,属于二级路由...

我在阿里巴巴云上买了一个有学生权限的入门级ECS一年,同时买了一个花生壳内网渗透服务。经过测试,花生壳可以在树莓派上运行并穿透内网,但我买的价格功能太有限,钱对学生来说还是很重要的。

当时我自然想到了那个ECS。ECS有固定的公网IP,可以用来实现内网渗透。我不需要再花钱了。

说到内网渗透,我想到的是……Ngrok(Ngrok . com/)。但是ngrok第二版不再开源,第一版(github.com/inconshreveable/ngrok)不适合生产环境,测试后无法运行。不管我的操作有没有错,不能放到后台的界面也是个问题。

就在我失望的时候,另一个内网渗透的工具进入了我的视野——FRP(github . com/fate dier/FRP)。经过简单的测试,玻璃钢对我有效。

但是在“测试”的时候,我对树莓皮远程操作的需求并没有那么强烈,所以暂时放在一边。直到最近气温骤降,手因为突然刹车受伤,不能在办公室待太久(虽然办公室有空调整,交了电费),于是这个计划再次提上日程。

我花了三天时间才实现这个计划。期间查了大量数据,因误操作重新安装了三次系统。但最终成功了。我来说说成功的手术。

网络结构

首先,在此之前我已经通过路由器的IP-MAC绑定为树莓Pi和笔记本电脑分配了固定IP。路由器为192.168.1.1,草莓派为192.168.1.120,笔记本电脑为192.168.1.121。所以我们得到了下面的网络图:

下面假设服务器的地址是http://example.com,域名是可控的。

下载

接下来,在GitHub上下载frp发行版(GitHub . com/fate dier/FRP/releases)。下载时观看相应的平台。ECS对应linux_amd64,树莓Pi对应linux_arm(其实不是64位……)。

下载时,复制相应文件的链接,输入一个方便的目录,然后执行(从下面开始,shell命令和脚本中用$()包装的语句(包括$())替换为描述的部分):

$ wget $(链接)

稍后,您会看到目录中有一个对应的文件。

然后解压:

tar -xzv -f $(frp压缩包路径) -C $(要解压到的路径(不含frp文件夹本身))

然后,您会在相应的目录中看到以frp开头的文件夹。由于名称太长,记不住,我们最好更改文件夹名称:

mv $(frp文件夹路径) $(改名后的frp文件夹路径)

最终,我把它解压到了ECS上的/root/frps和草莓派上的/home/pi/frpc。

配置

我们这里的目标是能够在外部网络中连接SSH。我们可以参考文件来配置玻璃钢。frp的一个优点是官方文件是中文的(github . com/fate dier/FRP/blob/master/README _ zh . MD)。

在ECS上编辑frps.ini文件,路径为/root/frps/frps.ini:

[common]# 绑定的端口bind_port = 6000# 为了安全,可以增加一个身份验证码的设置(选填)token = abc

此外,请确保上面提到的这些端口号没有被其他应用程序占用。

然后编辑草莓派上的frpc.ini文件:

[common]# 这里填frps所在服务器的地址server_addr = example.com# 与frps.ini中[common]中的bind_port一致server_port = 6000# 与frps.ini中[common]中的token一致(若没有可不填)token = abc# 建立SSH连接的内网穿透[ssh]# SSH使用TCP连接type = tcp# 填本机的IP就可以local_ip = 127.0.0.1# SSH服务的端口号,默认是22,如果更改了就填更改的端口号local_port = 22# 服务器对应的端口号,注意不能和服务器上的已有端口冲突remote_port = 6022

在阿里巴巴云的ECS中,网络安全组需要设置为允许进出站方向的端口。例如,在上面的例子中,我们应该允许入站和出站方向的TCP连接端口6000和6022。

阿里云的网络安全组默认是允许所有出站端口的,所以这种情况下允许对应的入站端口就行了。下同。测试

在我们实际使用它之前,我们应该先测试它。

首先在ECS上运行frps:

# /root/frps/frps -c /root/frps/frps.ini

再次在草莓派上运行frpc:

$ /home/pi/frpc/frpc -c /home/frpc/frpc.ini为了方便讲解,上面的路径使用了绝对路径,使用对应的相对路径也是可以的。

观察输出。如果输出没有错误,用SSH连接http://example.com。记得把端口号改成6022。如果可以连接,说明没有问题。这时,按Ctrl+C停止两边的程序。

后台运行与自启动

我们无法在实际操作中运行此命令。把这个窗口挂在电脑上,否则我们会在关闭程序时停止。因此,我们必须想办法让它在后台运行。

让一个程序在后台运行的方法有很多,这里我们用一个更方便的方法:让它变成一个服务。这样做的好处是,我们可以通过一个命令启动、停止、重启、自启动和取消自启动。尤其是自我启动,这也是我们需要的。

在两台机器上创建服务的方式是相似的。我将以ECS上的frps为例。在树莓Pi上操作时记得换成frpc及相关内容。

首先,我们在/lib/systemd/system/(中创建一个文件frps.service,在这个文件中,取一个之前可以记住的名字就可以了。服务,但要注意一致性)。内容如下。保存:

[Unit]# 写一个比较容易理解的介绍,以后查日志的时候有用Description=fraps serviceAfter=network.target syslog.targetWants=network.target[Service]Type=simple# 这里写之前运行成功的frps命令ExecStart=/root/frps/frps -c /root/frps/frps.ini[Install]WantedBy=multi-user.target

然后执行以下命令启动服务:

# service frps start

之后,将对草莓派执行类似的操作,但将修改frpc.ini,并在[common]字段中添加以下条目:

# 由于树莓派没有时钟,开机后时间不对,frpc访问服务器时会发生错误,所以此项必填authentication_timeout = 0# 为防止网络错误导致服务退出,填上此项login_fail_exit = false这个操作非常重要。我之前没有进行设置,结果第二天树莓派开机了,frp却没有启动成功。当时我在宿舍,带着电脑去了办公室,查了日志才发现这个问题。

执行相应的frpc服务。测试一下。如果没有问题,继续以下操作。

在ECS上执行以下命令,实现自启动:

# systemctl enable frps.service

对草莓派做类似的操作。重启树莓皮进行测试。如果重启后树莓Pi可以通过外网连接,那就成功了。

远程桌面

现在SSH可以连接了,让我们考虑连接其他东西,比如11年前的笔记本电脑。

和SSH一样,远程桌面是通过TCP连接的,但是远程桌面的默认端口号是3389。

在以下操作之前,我已经设置了网络共享并打开了电脑的远程桌面。

在草莓派的frpc.ini中添加以下内容:

[RDP] type = tcp# 这里填笔记本电脑的IPlocal_ip = 192.168.1.121local_port = 3389# 还是要注意不要和已有端口冲突remote_port = 6389

控制台中允许端口6389入站方向的TCP连接到ECS。

要重新启动frpc服务:

# service frpc restart

然后使用远程桌面连接工具连接到示例。

如果成功了,就没有问题了。

我之前以为要让笔记本电脑在树莓派之下的网络才行,当时还费很大力气开了树莓派的无线热点,之后发现只要笔记本电脑与树莓派在同一网络即可……

之后,我成功利用远程桌面连接,远程打印了宿舍室友的准考证。

我之前在树莓Pi上安装了xrdp,可以通过远程桌面连接访问树莓Pi的图形环境。它需要能够远程连接,只需要做同样的事情,但是更改[RDP],将对应的IP更改为127.0.0.1,并更改对应的端口号。但是,xrdp不如Windows原生远程桌面,但是比VNC好很多。

分开服务

请注意,如果您使用SSH在外部网络上连接树莓Pi,当frpc服务重新启动时,SSH连接将会中断。虽然可以重新连接,但是如果不能重新连接就很尴尬了。我遇到过这样的情况:配置文件写错了,导致frp重启失败,不得不去办公室解决问题。

在我的测试之后,我发现多个frpc可以在同一个设备上运行,并且没有冲突的端口号。在这种情况下,我们可以尝试为SSH部分编写一个ini文件(注意也应该编写[common]部分),将相应的命令编写为frpc_ssh.service的服务,并设置启动和自启动。这样,当我们在SSH上重启frpc时,不会影响SSH。

运行树莓派上的网站

许多人使用ngrok和frp将本地网站映射到公共地址进行测试。我们假设网站运行在树莓码头的80号港口,我们想把它映射到http://pi.example.com。

您可以在ECS的frps.ini的[公共]字段中添加以下配置:

# 映射到虚拟主机的HTTP端口,不要有冲突vhost_http_port = 6080# 这里填域名subdomain_host = example.com

在草莓派的frp.ini中添加以下配置:

# 取一个易懂的不重复的名字[web]type = http# 本地运行HTTP服务的端口local_port = 80# 子域名subdomain = pi

控制台中允许端口80和6080的入站方向上的TCP连接到ECS。

在http://example.com的域名解析配置中,为ECS的IP地址添加一条记录*。

重启双方玻璃钢相关服务。当你访问http://pi.example.com时,你可以访问树莓皮的网站。

类似的方法也可以用于访问运行HTTPS协议的特定域名的网站。详情可以看官方文件。

实际上,不建议使用类似*的记录,而是使用类似*的记录。测试可以建立,相应的部分应该修改。

结尾

玻璃钢的配置有很多种,可以看官方文件。而且还有中文的公文,挺方便的。



Powered by 国产精品牛牛热在线视频国产 @2013-2021 RSS地图 HTML地图

2013-2021 版权所有