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 口的功能
- 网口: 插网线的端口
智能路由器固件发展历程
以下内容按时间先后顺序排序:
- WRT54G 路由器固件
- OpenWrt 开源路由器固件: OpenWrt - 维基百科,自由的百科全书
- LEDE 开源路由器固件: LEDE - 维基百科,自由的百科全书
- 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 |
网络拓扑图
操作步骤
下载 KoolShare LEDE 镜像
下载链接:Index of /LEDE_X64_fw867/ - KoolShare 固件下载服务器
注意选择虚拟机转盘或 PE 下写盘专用文件夹中的*-uefi-gpt-*.img.gz
文件下载,因为我们使用的是 U 盘,属于 PE 下写盘的一种,且我的电脑是 UEFI/GPT 的,而非传统的 BIOS/MBR。另外注意该文件夹中的*.vmdk
文件是用于虚拟机的,如 Virtual Box
关于 UEFI/GPT 和 BIOS/MBR 的更多信息,可参见我的另一篇博客U盘安装多个操作系统——理论
制作启动U盘
简单起见,我们使用rufus(for Windows)制作启动U盘。这个软件界面简单,操作方便,强烈推荐
Rufus 是一个可以帮助格式化和创建可引导 USB 闪存盘的工具,比如 USB 随身碟,记忆棒等等。
——引用自rufus官网
进入上面给的官网链接下载即可
下载后设置如下图所示:
设置好后点击开始即可
设置从U盘启动
- 进入台式机 BIOS
- 将安全启动(Secure Boot)关闭
- 将 U 盘启动放到启动顺序中的第一位
- 设置 UEFI Only
- 按 F10 保存并退出
软路由配置
在笔记本的浏览器中输入192.168.1.1
访问软路由 Web 配置界面,用户为root
,密码为koolshare
(以上内容在下载页面处有说明)
网络->接口
- 修改 LAN 口->物理设置->接口选择
eth0
->取消桥接->保存与应用 - 修改 WAN 口->物理设置->接口选择
eth0
->取消桥接->保存与应用 - 修改 WAN 口->基本设置->协议->PPPoE->切换协议->填写拨号用户名与密码
验证是否可以正常上网,当然,此时并不能科学上网
实现科学上网
注意此处使用的是 SSR,这一步的前提是你有一个可用的 SSR 账号。关于 SSR 和科学上网的更多信息请参见我的另一篇博客 科学上网
- 点击酷软->未安装->安装科学上网插件->安装好后点进去->打开 koolss 开关
- 点击节点管理->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,我想到了如下大致步骤:
- 在核心分区中创建一个
/boot
目录,并将 GRUB 分区的内容复制到里面去(注意对相关的文件进行修改),即修改核心分区 - 在 U 盘中新建一个分区用于存放 LEDE 核心分区,将修改后的核心分区复制到该分区中
- 将 UEFI 分区的内容复制到我那个装有多个操作系统的 U 盘的 UEFI 分区中(同样注意对相关的文件进行修改)
- 忽略保留分区
- 尝试从 U 盘上的多个操作系统中选择 LEDE 并启动
然而,我好像失败了
后续可行的进一步研究
- LEDE 软路由其它功能及酷软中心其它软件的探索
- 真实路由器科学上网
- Openwrt 的深入研究(LEDE 已经和 Openwrt 合并了,参见LEDE - 维基百科,自由的百科全书)
- 将 LEDE 加入我那个已经装有多个操作系统的 U 盘中
链接
下面总结了本文中使用的所有链接:
- Index of /LEDE_X64_fw867/ - KoolShare 固件下载服务器
- LEDE - KoolShare - 源于玩家 服务玩家
- LEDE - 维基百科,自由的百科全书
- Linux 磁盘管理#挂载-img-文件
- OpenWrt - 维基百科,自由的百科全书
- OpenWrt Project: Filesystems
- U盘安装多个操作系统——理论
- rufus官网
- 一个U盘优盘就翻墙 免费拥有VPN翻墙路由器的两种方法 Openwrt/LEDE软路由U盘优盘的制作 ButterflyVPN评测 - YouTube
- 科学上网
缩略语
- 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