1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 在iPad上连接虚拟机中的ubuntu系统 - 使用frp内网穿透实现在外办公

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

时间:2021-08-05 04:25:34

相关推荐

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

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

主要参考链接:

frp内网穿透反向代理实现Windows远程桌面连接 - Shineの小破站 ()

FRP 简单入门安装配置教程 - 开源免费内网穿透工具,无公网 IP 远程访问 - 异次元软件下载 ()

FRP内网穿透搭建远程桌面 - 青阳のblog-一个计算机爱好者的个人博客 ()

前言

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

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

前期准备

在iPad上安装远程终端

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

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

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

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

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

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

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

准备云服务器

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

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

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

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

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

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

实现内网穿透

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

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

1. 安装frp

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

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

wget /fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

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

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

wget https://public-document-ferostmask.oss-cn-/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服务正常启动了

3. 配置安全组规则

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

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

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

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

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

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

1. 安装frp

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

#ubuntu上的操作$ wget https://public-document-ferostmask.oss-cn-/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 #填入公网IPserver_port = 7000 #与服务端的通信端口,需要与服务器配置一致token = 12345678 #安全授权码,需要与服务端配置一致[ssh]type = tcp #代理类型local_ip = 127.0.0.1 #电脑在局域网中的内网IP,如果是本机可以使用127.0.0.1local_port = 22 #远程桌面端口,默认是22remote_port = 7001 #为内网提供给外网访问的服务端口

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

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

$ ./frpc -c ./frpc.ini

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

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

使用iPad连接ubuntu系统

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

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

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

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

最后的一点小工作

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

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

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

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

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

编辑文本内容如下:

[Unit]Description=frps daemonAfter=syslog.target network.targetWants=network.target[Service]Type=simpleExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.iniRestart=alwaysRestartSec=1min[Install]WantedBy=multi-user.target

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

systemctl start frps

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

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

后记

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

其他参考链接:

Ubuntu安装和配置ssh教程_future_ai的博客-CSDN博客_ubuntu安装ssh

云服务器哪家好!阿里云、腾讯云、华为云、百度云的服务器配置及价格对比 - 知乎 ()

centos出现“FirewallD is not running” - 【cosmo】 - 博客园 ()

【点滴记录】宝塔使用frp配置内网穿透 - 赵苦瓜のBlog ()

[frp] 内网穿透神器搭建 萌新也看得懂的教程系列 - 神代綺凛の随波逐流 (moe.best)

(10条消息) (亲测)内网穿透 frp 配置示例_sun-CSDN博客

Linux进程关系 - Vamei - 博客园 ()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。