Lede软路由u盘制作并实现科学上网

Posted by wsxq2 on 2019-03-23
TAGS:  软路由科学上网U盘LEDE

本文最后一次编辑时间:2019-07-11 20:52:07 +0800

2019-07-11 更新:此次更新增加了原理模块,并对用到的东东进行了优化(改成了表格形式,更直观),将网络拓扑图放在了用到的东东后,优化了下载 KoolShare LEDE 镜像部分,对关于 LEDE 文件系统的研究进行了大量修改,新增了缩略语模块

本文主要参考了一个 Youtube 上的视频:一个U盘优盘就翻墙 免费拥有VPN翻墙路由器的两种方法 Openwrt/LEDE软路由U盘优盘的制作 ButterflyVPN评测 - YouTube

本文主要讲解了如何将台式机(笔记本亦可)用作单臂软路由器实现科学上网,且其使用的固件为 LEDE,存放在 U 盘中

有关科学上网的更多信息,请参见我的另一篇博客 科学上网

原理

台式机用作路由器的原理

路由器本就是一台微型计算机,如同普通计算机一样有 CPU,有存储,有网口。而 CPU,存储、网口这三样是路由器的核心,这些核心部件普通计算机都有。所以普通计算机自然可以用作路由器

这里可能有人会问,路由器不是有很多网口吗?路由器不是还能制造 WIFI 吗?路由器不是还能将连到 LAN 口的设备放在同一局域网吗?而普通计算机没有这些啊

在这里,我们首先要区分家用路由器和单纯的路由器。做过网络实验的人都知道,单纯的路由器就只有一个功能——路由,即连接两个网段,最常见的情形是将公网(Internet)和局域网连到一起。

然而家用路由器则不然,家用路由器并不是一个单纯的路由器,它还集成了交换机、无线发射器的功能,分别对应其组建局域网的能力和制造 WIFI 的能力。

好了,对于前面的问题,现在就只剩下一个问题没有解决了——路由器不是有很多网口吗?至少得有两个网口吧?而普通计算机只有一个网口啊

单臂路由器解决了这一问题。单臂路由器,顾名思义,即只有一个网口的路由器。它这个唯一的网口既要实现普通路由器 WAN 口的功能又要实现 LAN 口的功能

为什么可以使用 U 盘

一定会有人震惊于为什么可以使用 U 盘。首先我们需要清楚 U 盘在整个过程中的作用是什么,然后是我们为什么要使用它,最后是我们为什么可以使用它

U 盘的作用是储存操作系统及配置文件。正如机械硬盘和固态硬盘一样,U 盘也可以存放操作系统,最典型的例子是启动 U 盘。其大致原理为:启动时,CPU 从 U 盘读取操作系统并将必要文件放于内存中,然后操作系统在内存中运行,如果需要执行特定程序,CPU 从 U 盘(或其它磁盘)中读取程序机器码,放于内存中,然后执行,执行完后释放内存。

但是,正常 U 盘的读写速度通常远低于固态,所以如果你用来装 Windows,你一定会卡得怀疑人生,因为 Windows 涉及大量读写操作(比如你常常会使用存放于系统盘上的 Word 程序)。

而对于本文中的软路由而言则不然。因为软路由通常只是从存储设备中读取内容而很少写入内容,且一旦运行稳定后几乎不再和存储设备交互。

但是如前所述,计算机中已经有磁盘了,我们为何还要使用 U 盘呢?其实主要是因为计算机的磁盘中通常已经装有操作系统了,如果使用磁盘的话,就会覆盖原有的操作系统,造成数据丢失。为了避免这些问题,我们才选择使用 U 盘。而且 U 盘也具有方便,便于携带等优点。

至于我们为什么可以使用 U 盘制作软路由,在前面已经提过了,即 U 盘可以用来存储操作系统及配置文件。而软路由最重要的是什么?自然是软件部分,即固件部分(操作系统部分)。将 LEDE 这个固件存储于 U 盘中,并进行相应的配置(配置同样保存在 U 盘中),事情就成了。此时,只需要一个可以从 U 盘启动的电脑及和配置时一致的网络环境,那么就可以使用这个软路由了

概念解释

  • LEDE: 路由器固件,实质上是一个适合于嵌入式设备的 Linux 发行版。
  • 软路由: 软件路由器,与真实路由器相对
  • 科学上网: 也叫翻墙,指突破中国最大网络防火墙——GFW 的封锁
  • 单臂路由器: 只有一个网口的路由器。它唯一的网口既要实现普通路由器 WAN 口的功能又要实现 LAN 口的功能
  • 网口: 插网线的端口

智能路由器固件发展历程

以下内容按时间先后顺序排序:

  1. WRT54G 路由器固件
  2. OpenWrt 开源路由器固件: OpenWrt - 维基百科,自由的百科全书
  3. LEDE 开源路由器固件: LEDE - 维基百科,自由的百科全书
  4. KoolShare 论坛 LEDE 固件: LEDE - KoolShare - 源于玩家 服务玩家。本文用的便是这个

用到的东东

名称 数量 用途 价格(元) 备注
U盘 1个 软路由存储器 119 闪迪 CZ73 64GB
台式机 1台 软路由 CPU 、网口 598 用来研究和学习的主机
交换机 1个 让软路由、家用路由器、笔记本位于同一局域网 51 TP-LINK TL-SF1005+ 5口百兆交换机
笔记本电脑 1台 管理软路由 5600 LENOVO
无线路由器 1个 制造 WIFI 116 家用路由器 TP-LINK TL-WR886N 千兆版
PPPoE拨号账号 1个 软路由公网 200/半年 翼讯 20 Mbps

网络拓扑图

网络拓扑图.png

操作步骤

下载 KoolShare LEDE 镜像

下载链接:Index of /LEDE_X64_fw867/ - KoolShare 固件下载服务器

注意选择虚拟机转盘或 PE 下写盘专用文件夹中的*-uefi-gpt-*.img.gz文件下载,因为我们使用的是 U 盘,属于 PE 下写盘的一种,且我的电脑是 UEFI/GPT 的,而非传统的 BIOS/MBR。另外注意该文件夹中的*.vmdk文件是用于虚拟机的,如 Virtual Box

关于 UEFI/GPTBIOS/MBR 的更多信息,可参见我的另一篇博客U盘安装多个操作系统——理论

制作启动U盘

简单起见,我们使用rufus(for Windows)制作启动U盘。这个软件界面简单,操作方便,强烈推荐

Rufus 是一个可以帮助格式化和创建可引导 USB 闪存盘的工具,比如 USB 随身碟,记忆棒等等。

——引用自rufus官网

进入上面给的官网链接下载即可

下载后设置如下图所示:

rufus_lede.png

设置好后点击开始即可

设置从U盘启动

  1. 进入台式机 BIOS
  2. 将安全启动(Secure Boot)关闭
  3. 将 U 盘启动放到启动顺序中的第一位
  4. 设置 UEFI Only
  5. 按 F10 保存并退出

软路由配置

在笔记本的浏览器中输入192.168.1.1访问软路由 Web 配置界面,用户为root,密码为koolshare(以上内容在下载页面处有说明)

网络->接口

  1. 修改 LAN 口->物理设置->接口选择eth0->取消桥接->保存与应用
  2. 修改 WAN 口->物理设置->接口选择eth0->取消桥接->保存与应用
  3. 修改 WAN 口->基本设置->协议->PPPoE->切换协议->填写拨号用户名与密码

验证是否可以正常上网,当然,此时并不能科学上网

实现科学上网

注意此处使用的是 SSR,这一步的前提是你有一个可用的 SSR 账号。关于 SSR 和科学上网的更多信息请参见我的另一篇博客 科学上网

  1. 点击酷软->未安装->安装科学上网插件->安装好后点进去->打开 koolss 开关
  2. 点击节点管理->SSR节点->填写你的 SSR 服务器相关信息->保存并应用后观察 koolss 运行状态->如果失败:检查 DNS 设定->选择国外 DNS ->逐个尝试并注意观察软路由主机上的日志输出->若未报错则应该成功了

关于 LEDE 文件系统的研究

对下载得到的 img 文件进行分析

在 Linux 中挂载 img 文件的方法请参见我的另一篇博客 Linux 磁盘管理#挂载-img-文件

挂载后可知,其分区有四个,如下所示:

1
2
3
4
5
6
7
8
root@master:~# lsblk -ao +FSTYPE,LABEL,PARTUUID,MODEL
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT FSTYPE   LABEL PARTUUID                             MODEL
loop0       7:0    0  703M  0 loop
├─loop0p1 253:0    0  200M  0 part /mnt/sdb1  ext4           85abbb1f-4f15-439b-97ec-ffc53f70c7d1
├─loop0p2 253:1    0    1M  0 part /mnt/sdb2  vfat           6687ac1c-bf56-4368-93b5-0eeff8d84838
├─loop0p3 253:2    0    1M  0 part                           1e7252b8-f816-4988-920f-c573329e388b
└─loop0p4 253:3    0  500M  0 part /mnt/sdb4  squashfs       46eb8232-b75f-4243-84ee-c597c6810002
root@master:~# 

其中第一个分区为 GRUB 分区,第二个分区为 UEFI 分区,第三个分区为保留分区,第四个分区为核心分区。

对于 GRUB 分区,其文件结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
root@master:sdb1# tree
.
├── boot/
│   ├── grub/
│   │   ├── 10fa97f8.cfg
│   │   ├── grub.cfg
│   │   └── grub-early.cfg
│   └── vmlinuz
└── lost+found/

3 directories, 4 files
root@master:sdb1#

对于 UEFI 分区,其文件结构如下:

1
2
3
4
5
6
7
8
9
root@master:sdb2# tree
.
└── efi/
    └── boot/
        ├── bootx64.efi*
        └── grub.cfg*

2 directories, 2 files
root@master:sdb2#

对于核心分区,其包含的文件夹如下:

1
2
3
root@master:sdb4# ls
bin  dev  etc  koolshare  lib  lib64  mnt  overlay  proc  rom  root  sbin  srv  sys  tmp  usr  var  www
root@master:sdb4#

其中 overlay 文件夹对应 jffs2 文件系统,rom 对应 squashfs 文件系统。具体参见 OpenWrt Project: Filesystems

对 squashfs 文件系统内容进行修改

由于我想将多个操作系统安装到 U 盘中,对于普通的操作系统而言这并不难,但是我却不知道怎么把 LEDE 装进去。即让 U 盘中装有多个操作系统,其中包括 LEDE

为了实现这个目标,我意识到可能需要对 LEDE 的文件进行一定的修改,尤其是其中有关启动的那部分。

由于 LEDE 使用的核心文件系统(img文件第四个分区)是 squashfs,它是一个只读压缩文件系统,修改时需要用到squashfs-tools工具:

yum install squashfs-tools #安装 squashfs-tools 工具
unsquashfs filesystem.squashfs #解压文件系统到 squashfs-root 目录(默认)
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot #压缩 squashfs-root 目录到文件系统 filesystem.squashfs

为了实现在已经装有多个操作系统的 U 盘中加入 LEDE,我想到了如下大致步骤:

  1. 在核心分区中创建一个/boot目录,并将 GRUB 分区的内容复制到里面去(注意对相关的文件进行修改),即修改核心分区
  2. 在 U 盘中新建一个分区用于存放 LEDE 核心分区,将修改后的核心分区复制到该分区中
  3. UEFI 分区的内容复制到我那个装有多个操作系统的 U 盘的 UEFI 分区中(同样注意对相关的文件进行修改)
  4. 忽略保留分区
  5. 尝试从 U 盘上的多个操作系统中选择 LEDE 并启动

然而,我好像失败了

后续可行的进一步研究

  1. LEDE 软路由其它功能及酷软中心其它软件的探索
  2. 真实路由器科学上网
  3. Openwrt 的深入研究(LEDE 已经和 Openwrt 合并了,参见LEDE - 维基百科,自由的百科全书
  4. LEDE 加入我那个已经装有多个操作系统的 U 盘中

链接

下面总结了本文中使用的所有链接:

缩略语

  • BIOS: Basic Input Output System
  • CPU: Central Processing Unit
  • DNS: Domain Name System
  • GB: Gigabyte
  • GFW: Great Firewall
  • GPT: GUID Partition Table
  • GRUB: Grand Unified Boot-Loader
  • LAN: Local Area Network
  • LEDE: Linux Embedded Development Environment
  • MBR: Master Boot Record
  • PE: Portable Executable
  • SSR: shadowsocksr
  • UEFI: Unified Extensible Firmware Interface
  • USB: Universal Serial Bus
  • WAN: Wide Area Network