OpenWrt资源整合
OpenWrt 可以理解是一个毛胚房,默认只包含核心功能,其他的需要自己去添加,这对普通用户来说上手难度还是有的,尤其是国内复杂的网络环境下;
OpenWrt 的故事始于 2004 年。当时,Linksys(当时属于 Cisco)发布了他们的 WRT54G 路由器,这是一款非常受欢迎的设备。与其他厂商不同,Linksys 在这款路由器上使用了基于 GPL(GNU General Public License)协议的 Linux 内核。根据 GPL 协议,他们必须公开相应的源代码。
Linksys 遵守了这一协议,公开了源代码。这一举动激发了开发者社区的兴趣。开发者们很快发现,通过修改这些源代码,他们可以解锁路由器隐藏的功能,并为它增加新的特性。最初的 OpenWrt 项目就是基于这些社区的努力而诞生的,旨在为用户提供一个比原厂固件更强大、更灵活的操作系统。
相比之下,ImmortalWrt 一个针对中文用户优化和定制化的分支,集成了许多国内用户常用的功能和软件包,但是又不会塞过多的东西,并且更新挺快的;
一般使用 ImmortalWrt 就可以了,我在 一台小主机的 AIO 之旅 中选用的就是这个版本。
版本选择
ImmortalWrt 对于小白用户实际可能还是有点难上手,毕竟它缺少完善的向导功能,了解了一下,有下面几个流行的固件分支版本:
简单省心,干净
Lean
国内知名大佬,更新快,用户基数大,需要自己编译
iStoreOS
界面友好,拥有软件中心,基于 OpenWRT,性能不如爱快,集成很多东西,适合的是轻 NAS 场景。
爱快
可商用,专业但是好上手,封闭但功能挺丰富的,不可以安装扩展,适合前置用
论坛大佬:
目前发生了一些事情,存在较大争议,作者已经停止维护,不推荐
上面基本都是软路由玩的,硬路由推荐:
- Padavan (老毛子固件)
- 华硕路由器固件 (Asuswrt-Merlin)
- PandoraBox (潘多拉固件)
- 梅林固件 (Merlin/Asuswrt-Merlin)
目前我是 PVE 里跑了个 ImmortalWrt 做旁路由,给我 PVE 下的 Linux 和 Docker 用,家里的主路由还是自带的固件,但是我现在对小米的路由器非常不满,后面可能会换一批中兴的,然后到时候小米的可能会刷成第三方来玩玩。
SquashFS (固件镜像格式)
是一种极高压缩率的只读文件系统。 在嵌入式设备中,系统核心文件存储在 SquashFS 分区中。因为它是只读的,所以无论你怎么修改系统配置,核心文件都不会被破坏。
当你修改设置或安装软件时,系统并不会直接改动 SquashFS,而是将改动记录在另一个可读写的分区。
这就是所谓的 OverlayFS(叠加文件系统)。系统运行时会将这两个分区 “叠” 在一起,用户看到的是合并后的结果。
优点:支持 “恢复出厂设置”。只要清空掉那个可读写的分区,系统立刻回滚到最原始的 SquashFS 状态。
副作用就是有的插件的升级功能可能会失效,因为只读。
combined (镜像类型)
Combined 镜像是一个 “全家桶” 文件,包含了系统运行所需的所有部分。
它不仅包含文件系统(如上述的 SquashFS),还包含了 引导加载程序(Bootloader) 和 分区表。
通常用于 x86 架构(普通的 PC、软路由)或通过写盘工具(如 Etcher、dd)直接写入硬盘、SD 卡、U 盘。
它会自动把磁盘分成两个分区:
引导分区(Boot Partition):存放内核(Kernel)等启动引导文件。
数据分区(Rootfs):存放操作系统和你的配置。
combined-efi (镜像类型)
这是 Combined 镜像的升级版,专门为现代硬件设计。
传统的 combined 镜像通常采用传统的 BIOS (Legacy/MBR) 引导方式。而 combined-efi 支持 UEFI 引导。
如果你要在较新的虚拟机(如 Proxmox、VMware 的 UEFI 模式)或者近几年的主流电脑硬件上安装,必须选 combined-efi。
它采用了 GPT 分区表,能够识别大于 2TB 的硬盘(虽然软路由很少用到这么大)。
PVE 下安装
PVE 下安装非常简单,网卡优先半虚拟化不行的话就切回 E1000,CPU 能 Host 就 Host。
关于镜像的选择,PVE 直接选 COMBINED-EFI (SQUASHFS-COMBINED-EFI.IMG.GZ) 版本就行。
上传镜像,然后使用命令: qm importdisk 100 /var/lib/vz/template/iso/openwrt.img local-lvm 导入到虚拟机。
固件导入后调整下引导顺序,直接启动就可以了。
经过测速,起码 PVE8 是不需要 img2kvm 这个工具了,直接 qm 命令导入即可,一般情况下 2 核 1G 的配置够用了。
安装 DDNS-Go 配合路由器的端口转发可以实现外网访问,前提是有公网 IP。
初始化
固件默认的 IP 可能是无法连接的,因为一般是不在一个子域下,下面是可能会用到的一些查看修改 IP 的命令。
ifconfig -a
ip a
# 修改 IP 配置
vi /etc/config/network
# 使用 uci 快速修改 IP
uci set network.lan.ipaddr='192.168.123.1'
uci commit network
/etc/init.d/network restart如果通过修改配置文件的方式来修改 IP,配置文件大概是这样的:
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '新的IP地址'
option netmask '255.255.255.0'
option ip6assign '60'之后就可以根据配置的 IP 登录 OpenWrt 的后台了,先去网络 - 接口里把网关给改下,DNS 也可以配置网关 IP,这样应该就可以正常上网了;
因为我这里是做旁路网关,所以要把 DHCP 给关掉,禁用所有 IPv6 服务,防火墙关闭 “SYN-flood 防御”。
主题推荐一个 luci-theme-kucat
升级
以我使用的 ImmortalWrt 为例,由于想安装 Nikki,发现版本太低,所以需要升级,操作之前先一定要备份。
如果是 PVE 我这种,其实可以直接去下一个最新的镜像,直接导入进去;
这里再介绍另外一种自带的 值守式系统更新;它会请求一个包含当前软件包的新固件并进行刷写。只需勾选 “保留当前配置”,无需任何额外配置即可直接升级到新固件。
这种方式虽然简单,但是可能存在一些 bug,我是 23.05.4 版本,想要升 24.x,但是搜索到的只有 23.x,无奈,就不用这个了。
最后我直接在官方下了新的 img.gz 包,通过 WebUI 的刷写操作直接刷入,选择保留当前配置。
升级完后正常进入,可能是因为大版本升级,或者重新刷写的原因,主题和插件都丢了,更悲催的是网络不通,ping ip 可以,但是域名不行,应该是 DNS 有问题,折腾了好一会都不行,最终成功的死在了防火墙的瞎改,搞的彻底打不开了。。。。
pve 还原后重新升级了一次,这次直接选择不保留配置,要不然还是报错,就是需要重新修改下 IP 要不然连不上,本来也没几个插件就不走还原配置了,重新配一下;
因为是旁路由,这一次直接把 br-lan 禁用,只打开 eth0 这一个网口,配置好静态 IP 和网关,这次正常了。
重新安装 luci-i18n-ddns-go-zh-cn、argon、ttyd 基础插件,以及魔法上网的插件,基本就算完事了。
WireGuard
博主目前还用不到 WireGuard,但是后续也许会?先存着个大纲,后续真用到了再来补充,已经是找到的比较详细的版本,但是感觉还是不太好懂,配置比较多,一些配置间的关系没有说明白需要验证。
WireGuard 是一种现代、快速且安全的虚拟专用网络 (VPN) 通信协议和免费开源软件。旨在获得比 IPsec 和 OpenVPN 更好的性能,WireGuard 协议的流量经由 UDP 传输。
在包管理中安装 luci-proto-wireguard 和 qrencode 两个包。装完重启一次生效。
在 网络 的 接口 界面,点击 添加新接口 创建。协议选择 WireGuard VPN。
首次创建可以通过点击生成新的密钥对进行生成密钥对;
监听端口: 建议配置特定高位端口,即 1024 以上端口,避免 Qos 和端口扫描,可以使用默认的51820 端口。
防火墙设置: 选择 LAN 防火墙区域,允许主机间通讯。不要使用 WAN 区域,否则会导致无法连接家里主机。
IP 地址:WireGuard 接口所处于的 IP 地址,建议使用和 LAN 局域网不同的网段。
对端 (Peer) 设置的意思就是配置客户端接入点。
已禁用对端: 取消勾选表示启用。
描述: 随便填写,主要用于记住当前对端配置是给哪些设备或者地址使用。
公钥、私钥: 点击下面的生成新的密钥对自动生成和填充。
预共享密钥: 可选,如果需要可点击生成预共享密钥按钮自动填充。
允许的 IP: 填写 IP 地址,如果你的设备处于固定网段内或具有固定 IP 地址,可以填写,相当于 IP 地址白名单,不在 IP 地址范围内的则无法连接。
路由允许的 IP: 可选,勾选后允许连接到 WireGuard 的客户端访问所在设备的其他网段。
端点主机: 作为 WireGuard 服务器使用时不用填写
端点端口: 作为 WireGuard 服务器使用时不用填写
持续 Keep-Alive:作为 WireGuard 服务器使用时不用填写
配置文件导出:点击后完善对端信息,并生成配置文件及对应二维码,二维码需要安装qrencode才可以显示。
继续点击生成配置:
连接端点: 填写 DDNS 域名
允许的 IP: 如果无特殊白名单需求,可不用更改。
DNS 服务器: 为对端客户端下发的 DNS 服务器,作为解析 DDNS 域名使用,可以选择国内的223.5.5.5或者119.29.29.29 ,需要注意的是此处不支持使用 DOH 或者 DOT 的加密 DNS 服务,仅支持 UDP 协议的 DNS 服务器。
地址: 为客户端所分配的 WireGuard 局域网 IPv4 地址,需与上面 WireGuard 基本配置中的 IP 地址处于同一网段。
以上信息完善后,会自动更新下面的配置文件代码,可复制到 WireGuard 客户端内使用。或者对于 Android 与 iOS 等移动设备,也可以直接进行扫码添加配置文件。
配置防火墙来允许连接:
在 OpenWRT 中,在网络 → 防火墙 → 通信规则 中新建一条 WireGuard 通信规则:
源区域: WAN
源 IP 地址: 不用填写
源端口: 默认 51820
目标区域: 如果 WireGuard 部署在当前路由上,则选择输入,如果 WireGuard 部署在局域网内其他设备上,例如旁路由上,则选择任意区域(转发)
目标地址: 选择 WireGuard 设备的 IP 地址,如果使用 IPv6,则需要选择对应 IPv6 的地址。IPv6 地址放行可参考: OpenWRT IPv6 防火墙规则:如何放行客户端地址及端口
目标端口: 默认 51820
操作: 接收
主要配置为协议、源区域、目标端口,其他不在意可以保持放行全部。
参考:OpenWRT 安装 WireGuard 实现内网穿透
VPN
在某些简单的场景下,只需要连接上家里的环境,那么手机、Windows 上可以直接使用系统自有的功能连接 VPN 是个省心的选择。
PPTP、L2TP、SSTP 和 IKEv2 是四种不同的 VPN 协议,它们在安全性、性能、支持度和连接稳定性方面存在显著差异。 PPTP 安全性最低但支持广泛,L2TP 需要 IPsec 配合使用才能提供安全性。SSTP 使用 SSL / TLS 加密,在穿透防火墙方面表现优异。IKEv2 现代协议,以其在移动设备上的稳定性和快速重连能力而著称。
| 协议 | 安全性 | 性能 | 穿透防火墙能力 | 移动设备支持 |
|---|---|---|---|---|
| PPTP | 低 | 最佳 | 差 | 较好 |
| L2TP/IPsec | 高 | 较慢 | 差 | 一般 |
| SSTP | 高 | 适中 | 优异 | 一般 |
| IKEv2 | 非常高 | 优异 | 优异 | 最佳 |
不安全的 PPTP、L2TP / IPSec 基本已被主流平台抛弃移除,IKEv2/IPSec 成了当下最佳的选择。
IPSecVPN 作为传统 VPN,并不适合用来穿透国境和高规格的省界,仅适合用来跨越低规格的省界和市内组网,方便省市内远程(居家)办公而已。别想着拿它鱼目混珠,也不适合。
IKEv2 是一种 VPN 隧道协议,可确保两台设备之间的在线通信安全。IKEv2 与 IPsec 协议相结合,组成一种名为 IKEv2 / IPSec 的 VPN 协议。IKEv2 帮助设备相互识别,而 IPsec 协议则用于保障数据传输时的安全性。
IPSec 分为隧道模式与传输模式。隧道模式在外层 IP 包中包裹需要传输的内层 IP 包,可用于桥接两个子网。而传输模式只会封装内部数据,没有额外的 IP 包头,只能用于保护两个主机之间的直接通信。传输模式过去曾被计划用于 IPv6 的加密,目前多用于封装 L2TP 协议。
当然也可以使用开源的 OpenVPN,不过需要先下载安装其客户端程序。
最开始计划是把 IKEv2 安装到 OpenWrt 上,研究了下基本不太可能,或者说非常复杂,小白大概率搞不定,而对于一般的 Linux 系统则就简单的多,有很多一键脚本,所以如果真的需要还是搞个 Ubuntu / Debian 之类的系统部署吧。