在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,这是一款内置付费内容的软件,而它的免费部分正好能够满足我们的使用需求。

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 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服务正常启动了

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の小破站 (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

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

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

使用iPad连接ubuntu系统

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

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

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

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

最后的一点小工作


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

在文中我一直强调保证连接到云服务器的终端没有关闭,这是因为我们在终端里启用进程时,进程是被囊括在会话组中的,当我们退出终端后同一会话组下的所有进程都会被关闭,也就是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)

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

  1. 【错误记录】VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ② | 删除交换空间 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 [错误记录]VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ) 博客中 , 给出了解决方案 ...

  2. Ubuntu搭建SVN服务 - 内网穿透实现公网远程访问

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  3. 公网SSH远程Ubuntu:安装cpolar内网穿透映射22端口 2/3

    系列文章 公网SSH远程Ubuntu:局域网内ssh远程Ubuntu 1/3 公网SSH远程Ubuntu:安装cpolar内网穿透映射22端口 2/3 公网SSH远程Ubuntu:配置固定的公网TCP ...

  4. SSH远程连接访问树莓派【无公网IP做内网穿透】

     系列文章 树莓派搭建网站,并免费内网穿透发布上线到公网 树莓派搭建WordPress网站,并内网穿透发布上线无需公网IP服务器 为树莓派上的WordPress网站配置自己的域名,并内网穿透发布上线公 ...

  5. Frp 内网穿透服务器在渗透中的应用

    内容 实战-在内网发布服务使之可在公网访问 使用 frp 搭建内网穿透服务器 实战-kali 配置 MSF 接收来自公网的 shell 实战-跨网段获取内网 shell 实战-内网穿透-二级代理 实战 ...

  6. 跨局域网远程连接神器——frp内网穿透

    跨局域网远程连接神器--frp内网穿透 ​ 放寒假回家想用服务器跑代码.想用校园网下文章.甚至还想用服务器打两把游戏.这该怎么办?有的大佬会想,可以在家买一个服务器嘛!如果是这样就打扰了...对于我这 ...

  7. ubuntu20.04上安装和使用frp内网穿透的方法

    ubuntu20.04上安装和使用frp内网穿透的方法 第一步:下载frp软件 frp_0.36.2_linux_amd64.tar.gz 下载地址:https://download.csdn.net ...

  8. CentOS7 使用frp内网穿透 在公司远程桌面连接自家电脑

    CentOS7 使用frp内网穿透 在公司远程桌面连接自家电脑 Day1 文章目录 CentOS7 使用frp内网穿透 在公司远程桌面连接自家电脑 前言 一.服务器的安装与配置 面板: 二.客户端的安 ...

  9. Xshell 无法连接虚拟机中的ubuntu的问题

    转自:http://blog.csdn.net/qq_26941173/article/details/51173320 版权声明:本文为博主原创文章,未经博主允许不得转载.   昨天在VMware  ...

  10. 公网SSH远程连接内网Ubuntu主机【cpolar内网穿透】

    SSH为建立在应用层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性的协议.但在没有公网IP的环境下,只能在同个局域网下远程. 本篇教程主要实现通过内网穿透,在公网环境下SSH远程登录内网的 ...

最新文章

  1. 使用C++实现单项选择题标准化考试系统设计
  2. C程序设计的抽象思维-递归过程-砝码称重
  3. 【温故知新】HTML学习笔记(上)
  4. WireShark抓浏览器的https包
  5. iview table后端分页 多选 翻页选中回显
  6. Python之简单验证码实现
  7. 常用函数(字符和字符串)
  8. C++ float的内存布局
  9. Windows搭建SonarQube_Mysql
  10. C语言 实现登录注册功能
  11. https 非对称加密
  12. 从数据类型 varchar 转换为 numeric 时出错.
  13. H3C DHCP中继实验
  14. java程序设计实验指导书_java程序设计实验指导书-my
  15. EasyRoad3D使用手册
  16. matlab 凸多边形,matlab练习程序(多边形顶点凹凸性)
  17. 毕业这么多年,为啥升职加薪这么难?
  18. Springboot中下划线转驼峰配置
  19. 成长的思考:如何在工作中保持高速的自我成长
  20. 试题 算法训练 后缀数组——最长重复子串

热门文章

  1. php李炎辉,李炎恢PHP视频教程第一季资源分享
  2. linux 硬盘自动休眠,【Linux】硬盘休眠
  3. 浅谈,盘点历史上有哪些著名的电脑病毒,80%的人都不知道!
  4. 第5章第24节:如何在幻灯片中播放视频文件 [PowerPoint精美幻灯片实战教程]
  5. 24位真彩色bmp图片转8位256色带调色板的bmp图
  6. linux在服务器上下载文件,上传下载文件到Linux服务器
  7. windows下ghostscript (gs)安装,环境变量设置,是否安装成功
  8. 穷养的女孩和富养的女孩的区别在哪?
  9. chariot iperf使用_iperf局域网性能工具
  10. html5兼容包,webpack4搭建现代Hybird-h5工程