【如何在自己的宿舍有一台幽灵主机?】关于如何合理配置外网透穿和进行System服务的编写、安装,同时添加局域网唤醒等的一次实践。

1 篇文章 0 订阅
1 篇文章 0 订阅

基础命令和服务部分

背景故事:呜呼哀哉,我因为没有趁着第一波危机从学校逃跑,不幸地阳了,没有精力完成实验报告和拷贝文件,只好在家远程连接到学校的电脑上完成作业,他需要做一些操作让他的台机能在家中被连接。

  • 我已有的知识:

    • Linux基础服务命令:systemctl,crontab……
    • 网页搜索能力
  • 我已有的设备:

    • 台式电脑:在宿舍,运行Windows11和Ubuntu22.04.1
    • 香橙派3:在宿舍,运行Ubuntu18.04
    • 笔记本:带回宿舍用以连接
  • 我需要做的:

    • 让香橙派能够唤醒台式电脑
    • 保持宿舍需要每时每刻发包的电信网络不断网
    • 让这两台设备能够被远控
  • 解决方案:

    • 唤醒问题:使用魔术封包的方法让主机支持WakeOnLan
    • 联网问题:使用crontab定时任务,让香橙派每一分钟给路由器发包,保证联网保活的包不断
    • 远程连接问题:使用内网透传工具

服务构建

保活:Crontab定时命令服务

数据包流量分析

背景故事:由于电信网络糟糕的设计,每次重启路由器时(即断电后第二天),都需要重新重新验证,所以必须进行保活处理。

  1. 首先验证网络登录方式,使用BurpSuite对登录网络进行抓包:(由于现在是远程访问,就改包越权访问到主页演示一下orz,一旦登出我两台设备都没网了害得等服务主动发包帮我续上)image20221218132940999

  2. 最终抓到的包为:image20221218133130102

  3. 稍稍修改为curl命令的语法并写成可以直接运行的脚本形式:image20221218133246914

curl命令语法:curl命令用法_追梦菜鸟的博客-CSDN博客_curl语法

基础语法为:curl [options…] ,主要有:

  1. -H/–header LINE (H) # 添加请求头, 可添加多个 -H 参数,参数格式: -H “NAME: VALUE”
  2. -o/–output FILE FILE # 把响应内容输出到指定文件
  3. -F/–form CONTENT (H) # 参考格式: -F “name1=@/filepath” -F “name2=stringvalue”
  4. -b/–cookie STRING/FILE (H) *# 请求头的 Cookie 字段, 以字符串的形式提供,*或从指定 cookie 文件中读取
  5. -d/–data DATA (H)
  1. 这时候可以使用终端运行脚本进行验证:image20221218133346827

  2. 下面把脚本使用scp命令拷贝给香橙派之后进行定时任务的书写:image20221218133620133

SCP命令用法为:Linux scp命令 | 菜鸟教程 (runoob.com)

  1. 本地到远程:scp local_file remote_username@remote_ip:remote_file
  2. 远程到本地:scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
Crontab保活

网上一般的都是比较老的/etc/cron和直接开启crond服务,但是ubuntu升级到systemctl下的系统步骤较少,这里随便试一下成功了。

  1. 我这里ubuntu自带了crontab的命令。image20221218134507120

  2. 调用cron -e选择vim进行服务文件的编辑。cron的格式为:《crontab命令详解 含启动/重启/停止》

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

  1. crontab -l列出cron服务内容:在每分钟执行一次curl的操作,同时在每小时删除一次日志文件。cron当中必须使用绝对路径,否则会运行失败。image20221218135121983

  2. network.sh内容:将内容存入tmp.txt日志当中。image20221218135244996

  3. 接下来使能服务,注意ubuntu中cron的服务不是crond,而是cron.serviceimage20221218135419224

systemctl基本的服务操作:

$ systemctl start   <docker>.service    //启动
$ systemctl restart <docker>.service    //重启
$ systemctl stop    <docker>.service    //停止
$ systemctl reload  <docker>.service    //重新加载
$ systemctl enable  <docker>.service    //加入开机启动
$ systemctl disable <docker>.service    //取消开机启动

systemctl配置详解:

详细讲解systemctl(附常用指令) - 掘金 (juejin.cn)

  1. 可以观察tmp.txt日志文件看看是不是真的curl了,也可以使用systemctl status <service>进行日志查看:image20221218135844577

  2. 可以看到已经成功了。

远程登录开启

由于我的路由器时电信送的便宜玩意,管理后台特别烂,所以只有DHCP的局域网IP分配,非常伤心。无法配置todesk的远程唤醒,只能使用ubuntu下的ethtools工具进行相关配置。

所以我大概是简体中文ubuntu22唤醒第一人了?

国内互联网上的资料非常老,在服务管理这一块用的还是古老的rc.local方式,而这种方式在ubuntu22当中根本就没有被使能,所以必须还是使用systemd的方式进行服务的追加和保活。

被唤醒主机
  1. 安装ethtool软件包:sudo apt install ethtool -y

  2. 更改并查看网卡状态,将网卡的在线唤醒模式开启:sudo ethtool -s enp5s0 wol g

  3. 使用ethtool enp5s0查看网卡状态,Wake-on:这一项为g表示已经开启了唤醒:image20221218140530400

  4. 但是由于Linux万物皆文件的特性,在重启时,网卡的配置文件会被覆盖,因此采用systemd的方式,编写系统服务完成自动唤醒网卡的操作:

  5. 使用--preserve-env操作进行提权,直接编写systemctl服务:sudo --preserve-env systemctl edit --force --full wol-enable.service

  [Unit]    # 服务本身的名字和说明
  Description=Enable Wake-up on LAN
  
  [Service]
  Type=oneshot    # 只执行一项任务、随后立即退出的服务
  ExecStart=/sbin/ethtool -s enp2s0   wol g    # 执行的命令,注意ethtool的位置是在sbin下的,泪目
  
  [Install]
  WantedBy=basic.target    # 挂载在basic.target下,优先级必须比我用户启动高
  1. 详细配置2.0:linux systemctl 指令 —— 阮一峰 - 七脉 - 博客园 (cnblogs.com)
唤醒机器
  1. 查询到被唤醒机器的mac地址之后,使用魔术封包即可唤醒,也是安装个wakeonlan软件包就行。image20221218141250231

  2. 可以看到ubuntu的软件包是全局发送的,不像windows下某些解决方案必须固定ip。

  3. 个人学了基本sdn控制器之后的理解大概是路由会记住主机的mac表然后发送给对应主机。

  4. 为了配合简洁使用写了个flask服务:

@app.route('/', methods=['GET'])
def hello_world():
    return '''
    <form action="/" method="post">
        <input type="submit" value="SendRemoteRebootMessage">
    </form>
    '''

@app.route('/', methods=['POST'])
def post():
    import subprocess
    subprocess.call('./a.sh')
    return '''
    Successfully Reboot from remote
    <form action="/" method="post">
        <input type="submit" value="Resend Message">
    </form>
    '''
  1. 对应服务程序:由于flask这个pip包的原因,不能使用nohup&在后台运行,所以状态一直是loaded,但是日志是没有问题的。image20221218141622686
  2. 来点cpolar透传5000端口之后的样子:image20221218141901735

外网透传和远控

  1. 透传使用的是cpolar白嫖的三个通道,配置方法在文档里面很详细:https://www.cpolar.com/docs,还有9200端口的webui,基本上很无脑:image20221218142023423
  2. 控制方面使用的是toDesk,非常流畅,也是对Linux支持较为友好。
    3.image20221218142149380

后续使用

双系统切换

电脑的默认引导加载程序和管理器因为安装了Ubuntu的缘故被设置成grub2,因此其实对于引导的修改就是对于grub2启动项的修改。

Grub2在UbuntuWiki上的介绍:↓简单的部分中文翻译和理解:这里为软件包相关配置,不涉及到grub控制台的配置

  1. Grub2介绍: 是引导加载和管理工具,在进入的时候会提供界面等待用户选择,或者将控制交给系统内核(可以是任意被识别到的系统内核)。

  2. 文件结构:

  3. /etc/grub.d(文件夹):Grub2脚本

  4. /boot/grub (文件夹):Grub2模块和菜单文件(grub.cfg

  5. /etc/default/grub :(配置文件)用户主要修改通过这个文件
    1. 应用配置更改:修改grub.d/etc/default/grub后,运行update-grub,来修改/boot/grub当中的内容。

Linux切换到Windows

修改grub配置文件,并且运行sudo update-grub即可。

image20221218141710251

Windows下切换回Linux系统
  1. 让Windows正确识别到Linux的文件系统并且能进行修改
  2. 在网上陆续找了一些能识别ext4文件系统的软件但是都效果不佳,最终找到Linux File Systems for Windows | Paragon Software (paragon-software.com)可以将Linux盘挂在到Windows系统文件管理器当中image20221218123143305
  3. grub的描述当中可知,grub在进行启动引导时,使用的是/boot/grub当中的模块和菜单文件。直接修改/boot/grub/grub.cfg菜单文件,将默认启动选项移到windows11对应的启动菜单栏目即可。image20221218122929405

意外失去连接之后怎么办

  1. 此时局域网还是连通的,使用nmap扫描当前网段的内容。

  2. 使用cpolar远程登录到香橙派中。

  3. 使用命令:nmap 192.168.101.1-10 扫描10个ip,一般情况下dhcp会将PC分配在1-10当中。因为我都开启了ssh服务,可以通过香橙派作为中继连接主机的ssh服务image20221218132505568

  4. 此时pc被分配在192.168.101.6上。ssh连接之后重启服务或者重启。

  5. 扫描时可以添加如下选项:

  6. Windows如果无法扫描到,添加:-Pn 禁止ping访问确定主机是否存在,强力联通;

> 
> 扫描速度太慢,给予**sudo**权限之后添加`-sS`进行扫描,更改连接方式,不需要经过TCP三次握手;
> 
> 或者选择经过TCP三次握手但是修改timeout超时时间,如:`--host-timeout 10`

关于为什么咕咕了那么久就上传了这个

因为实在是太纯阳了。
IMG_20221218_142310

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值