在iPad上连接虚拟机中的ubuntu系统 - 使用frp内网穿透实现在外办公

在iPad上连接虚拟机中的ubuntu系统 - 使用frp内网穿透实现在外办公

主要参考链接:
frp内网穿透反向代理实现Windows远程桌面连接 - Shineの小破站 (geomatlab.com)
FRP 简单入门安装配置教程 - 开源免费内网穿透工具,无公网 IP 远程访问 - 异次元软件下载 (iplaysoft.com)
FRP内网穿透搭建远程桌面 - 青阳のblog-一个计算机爱好者的个人博客 (hipyt.cn)

前言


最近想要入门深度学习《动手学深度学习》 — 动手学深度学习 2.0.0-beta0 documentation (d2l.ai),于是有了在iPad上写代码的想法。起初在连接同一wifi网络的情况下,我很容易就通过ssh连接上了虚拟机中运行的ubuntu系统,但当我回到宿舍、将iPad连接上手机热点后却发现怎么也连不上系统。后来经过查阅资料了解到,不同网络的设备通过内网IP是无法直接连接的,我只好找其他办法连接上虚拟机。最后经过一番了解,我选择了通过内网穿透达到自己连接不同网络上的设备的目的。

我实现内网穿透的过程并不顺利,过程中遇到的各种问题让我决定写一篇文章来记录这段过程,希望能帮助到有和我同样需求的同学。由于我还是个刚入门的小白,所以各种问题我无法解释得非常清楚,如果文章中有不正确的地方也希望各路大佬指正。

前期准备


在iPad上安装远程终端

为了在iPad上敲代码,我们首先需要准备一个能够远程连接主机的终端。这里我使用的是广受好评的Terminus,这是一款内置付费内容的软件,而它的免费部分正好能够满足我们的使用需求。

5908C7BF-43C3-4D0C-AF6A-E01B83DF09D0.jpeg

Terminus在使用前会要求你登录账号,中国地区的苹果账号似乎无法正常登录,可以试试用境外地区的苹果账号登录(确保你能登回原来的账号)。登录之后点击软件右上角的加号就可以添加要连接的主机了。

如果你的iPad和虚拟机上的ubuntu现在处于同一网络,你就可以通过ifconfig命令来查询主机IP,然后在添加主机时将IP填入Hostname中,保存后在Host列表中选择刚才添加的主机,输入用户名和密码就可以登录到系统中啦。(如果你不想每次登录都输入用户名和密码,则可以长按列表中的主机调出选项栏,选中编辑(Edit)选项后找到用户名(Username)和密码(Password)选项,填入登录时使用到的用户名和密码并保存,之后的每次登录就都不用手动输入了)

713035A8-2FA7-43C9-8A12-F87E3A6A4899.jpeg

连进主机后的界面差不多长下面这样。你可以在设置主机的页面调整界面颜色,界面颜色默认是黑色,我根据自己的喜好调整成了白色。

52DD33E3-42D8-4B52-A092-C95108967A25.jpeg

如果你发现连接不上主机,则可能是因为主机中没有安装ssh服务。你可以通过如下命令安装ssh服务:

#安装ssh服务器
$ sudo apt install openssh-server

在安装了ssh服务之后发现仍然连不上系统,则可能是网络设置的问题了(比如被防火墙拦截、虚拟机网络设置等,也可能是两台设备不在同一个网络),当你遇到这些问题时就需要具体问题具体解决了。

准备云服务器

由于在不同网络下无法通过内网IP直接连接两台设备(互相不可见),所以我们需要一台拥有公网IP的设备充当信使,两台设备发出的消息经由信使转交给对方,使得在不同地方的两台设备可以获知对方发出的消息。

经由推荐,我选择了阿里云的ECS共享型 n4云服务器,3年的使用年限花了将近两百大洋。起初担心1M带宽会不会出现网络卡顿,实际体验下来感觉延迟还算能接受。你可以在文章末尾找到推荐云服务器的知乎文章,可以根据自己的情况选择不同配置的服务器。

Untitled

下单云服务器后我们就可以创建实例了,在创建实例镜像一栏我选择的是CentOS 7.9 64位的系统镜像。

Untitled

创建完实例后我们就可以在控制台界面管理实例了(你可以在阿里云首页的右上角找到控制台),在这里我们可以查看实例的公网IP。

2B5D304C-91C1-4223-961B-947D74CEB5B6.jpeg

接着我们就可以通过公网IP远程连入云服务器系统了,不过在进行这步操作之前,我们需要点击名称上方的蓝字(✅运行中左边)进入到实例详细信息页面,然后通过重置实例密码选项设置登录root用户时所使用的密码。

Untitled

设置完密码后我们就可以回到Terminus中进行操作了。我们重新添加一台主机,在Hostname一栏中填入实例的公网IP,保存后尝试连入服务器,一切顺利的话我们就可以看到连接上服务器后的终端界面了:

546E0B01-5C44-4867-B927-721181FD5363.jpeg

实现内网穿透


准备工作做完后我们就可以开始着手实现内网穿透了!首先我们需要在云服务器的系统上安装frp服务。

在云服务器上安装配置frp服务端(frps)

1. 安装frp

frp的安装包可以在对应Github仓库下的releases目录中找到,你可以在这个链接中下载到frp的最新发行版本:Releases · fatedier/frp · GitHub

Untitled

这里我们根据云服务器的处理器架构选择相应的打包文件(即图中划蓝线的文件),右击文件后选择复制链接,到服务器终端里输入wget+空格并黏贴上链接,随后敲下回车键就可以开始下载安装包了

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

这里我遇到了无法下载安装包的问题,初步分析是阿里云服务器登不上Github的原因。我的解决办法是手动下载安装包并上传至阿里云对象存储中,然后再到服务器中通过url链接下载安装包。

你可以通过以下指令直接实现这一步骤。

wget https://public-document-ferostmask.oss-cn-shenzhen.aliyuncs.com/frp_0.38.0_linux_amd64.tar.gz
#我已经把安装包上传至我的对象存储中了,你可以直接通过链接下载

下载完打包文件后我们通过tar命令对文件进行解包和移动:

tar -xzvf frp_0.38.0_linux_amd64.tar.gz    #解包

mv ./frp_0.38.0_linux_amd64 /usr/local/frp    #移动文件至/usr/local目录下并重命名文件
cd /usr/local/frp    #将工作路径改为/usr/local/frp

2. 配置文件、启动服务

工作路径切换至/usr/local/frp后我们就可以开始着手编辑配置文件了:

vim frps.ini

修改配置文件如下:

[common]
bind_port = 7000    #客户端与服务端的通信端口,默认7000,可以更改,但需要避开某些端口
dashboard_port = 7500    #仪表盘端口
dashboard_user = admin    #仪表盘用户名
dashboard_pwd = 123456    #仪表盘密码
token = 12345678    #安全授权码,建议用复杂一些的授权码

保存退出,在终端里输入以下命令就可以启动frps服务了

./frps -c ./frps.ini

看到以下输出信息说明frps服务正常启动了

6E90F705-0D6A-4BA5-B48C-5F80ADC531DA.jpeg

3. 配置安全组规则

完成以上步骤后,我们只差一步就可以通过端口访问云服务器了。

让我们回到阿里云控制台,进入实例详细信息界面点击配置安全组规则选项,接着在右边点击配置规则进入到安全组的配置界面

Untitled

进入配置界面后,我们点击手动添加,在端口范围填入7000, 7001, 7500,授权对象选择0.0.0.0/0,随后点击保存。保存后端口的授权就开启了。

Untitled

这时我们在浏览器地址栏中输入 - 公网IP:7500,回车后在弹窗中填入frps.ini中设置的后台用户名和密码就能访问仪表盘页面了。(确保连接到云服务器系统的终端没有退出,断开重连则需要重启frps服务才能正常连接)

Untitled

在主机上安装配置frp客户端(frpc)

到这里我们已经成功一半了!接下来我们只要在主机上配置frpc服务就可以实现内网穿透了。

1. 安装frp

在ubuntu上,这一步和之前安装frp的步骤基本一致。如果你想要实现Windows远程桌面连接,则可以参考这条博文frp内网穿透反向代理实现Windows远程桌面连接 - Shineの小破站 (geomatlab.com)(注意:博文中使用的3389端口记得要安全组规则中授权)

#ubuntu上的操作
$ wget https://public-document-ferostmask.oss-cn-shenzhen.aliyuncs.com/frp_0.38.0_linux_amd64.tar.gz    #下载安装包
$ tar -xzvf frp_0.38.0_linux_amd64.tar.gz    #解包
$ mv ./frp_0.38.0_linux_amd64 /usr/local/frp    #移动文件至/usr/local目录下并重命名文件
$ cd /usr/local/frp    #将工作路径改为/usr/local/frp

2. 配置文件、启用服务

客户端的配置文件同样需要编辑:

$ vim frpc.ini

修改配置文件如下:

[common]
tls_enable = true    #开启TLS服务,没有开启的话可能会遇到EOF报错
server_addr = 公网IP    #填入公网IP
server_port = 7000    #与服务端的通信端口,需要与服务器配置一致
token = 12345678    #安全授权码,需要与服务端配置一致

[ssh]
type = tcp    #代理类型
local_ip = 127.0.0.1    #电脑在局域网中的内网IP,如果是本机可以使用127.0.0.1
local_port = 22    #远程桌面端口,默认是22
remote_port = 7001    #为内网提供给外网访问的服务端口

这里使用的服务端口记得也要在安全组配置中授权,这里使用的7001已经在之前的步骤中授权了。

修改完成后保存退出,然后使用如下命令启用frpc服务:

$ ./frpc -c ./frpc.ini

Untitled

看到以上信息输出就说明frpc服务正常启动了。

07CBC386-AD3A-4EA0-B5F1-89DB35BACDF2.jpeg

此时服务端也有对应的信息输出。

使用iPad连接ubuntu系统

到这里我们已经完成大部分工作了,现在让我们重新回到Terminus:

保持云服务器的终端连接,回到主界面添加新主机。在Hostname一栏填入公网IP,下拉找到Port栏,填入我们在frpc.ini中填写的remote_port(这里我使用的是7001),点击保存。

随后我们尝试连入主机,输入用户名、密码,不出意外的话我们就进入到了ubuntu系统中了!

D3CC7303-03D4-45C6-9D5D-F4F9062E2135.jpeg

至此我们就可以在外通过端口连接上家中开着的主机啦。

最后的一点小工作


到这里我们已经实现了一开始的目标,只是还有些不太方便的地方需要我们处理一下。

在文中我一直强调保证连接到云服务器的终端没有关闭,这是因为我们在终端里启用进程时,进程是被囊括在会话组中的,当我们退出终端后同一会话组下的所有进程都会被关闭,也就是frps服务会被关闭,这样我们就无法让客户端与服务端建立连接了。

我们不希望每次使用内网穿透前都重新打开终端运行frps进程,所以有没有什么方法能够让内网穿透的体验好一点呢。方法是有的:

我们在云服务器系统上进行以下操作:

vim /etc/systemd/system/frps.service#创建文件

编辑文本内容如下:

[Unit]
Description=frps daemon
After=syslog.target network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
Restart=always
RestartSec=1min

[Install]
WantedBy=multi-user.target

保存后退出,使用如下命令启动frps服务

systemctl start frps

终端无信息返回,这时我们退出连接云服务器的终端,再到主机上启用客户端,发现客户端正常运行。尝试从iPad重新连回主机,正常连接上就表示frps服务仍在运行中了。我们没有设置开机自动启动服务,所以在每次重启云服务器后,我们都需要重新连回终端开启frps服务。

而对于客户端,如果是图像界面就比较无所谓终端占用了,并且因为使用过程中需要虚拟机一直开着,所以我没有配置虚拟机上的服务。

后记


虽然是个人使用的服务,但因为担心安全问题,我还是建议采取一些安全措施:比如主机root用户采用强密码、安装Denyhosts-DenyHosts防御ssh暴力破解 - 知乎 (zhihu.com)等。

其他参考链接:
Ubuntu安装和配置ssh教程_future_ai的博客-CSDN博客_ubuntu安装ssh
云服务器哪家好!2021年阿里云、腾讯云、华为云、百度云的服务器配置及价格对比 - 知乎 (zhihu.com)
centos出现“FirewallD is not running” - 【cosmo】 - 博客园 (cnblogs.com)
【点滴记录】宝塔使用frp配置内网穿透 - 赵苦瓜のBlog (jixiaob.cn)
[frp] 内网穿透神器搭建 萌新也看得懂的教程系列 - 神代綺凛の随波逐流 (moe.best)
(10条消息) (亲测)内网穿透 frp 配置示例_sun-CSDN博客
Linux进程关系 - Vamei - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值