前言

上回书说到,我闲鱼入手了一台小主机,原本是刷入的FNOS系统加上透明代理的玩法。

但是,最近给我推荐那台小主机的同学,他自己的小主机成功地安装了OpenWrt系统,并且跑通了一系列的测试。

这让我开始思考,是否可以利用这台小主机来实现更灵活的网络管理。(毕竟我在学校暂时用不上NAS)

OpenWrt是什么?

OpenWrt是一个开源的嵌入式Linux系统,专为路由器设计。相比普通路由器的固件,它有以下优势:

  • 高度可定制:可以安装各种软件包,实现广告过滤、内网穿透等功能
  • 性能强大:x86小主机的性能远超普通家用路由器,2GB内存吊打一堆软路由
  • 社区活跃:遇到问题很容易找到解决方案
  • 完全开源:没有厂商的后门和限制

准备工作

硬件准备

  1. x86小主机:我使用的是一台闲鱼淘来的小主机,配置如下:

    • CPU: Intel(R) Celeron(R) CPU N2840 @ 2.16GHz
    • 内存: 2GB DDR3
    • 网口: 双千兆网口
    • 无线网卡: Intel WiFi Link 5100
  2. U盘:需要内置PE环境,用于在小主机上直接写入OpenWrt系统,建议4GB以上

  3. 网线:用于连接电脑和小主机,方便调试

软件准备

  1. OpenWrt镜像:从官网下载x86版本的镜像

  2. physdiskwrite 工具:用于将镜像写入小主机的硬盘

安装OpenWrt

步骤一:启动安装

  1. 将U盘插入小主机
  2. 开机时按 F12Del 进入BIOS
  3. 设置U盘为第一启动项
  4. 保存并重启

步骤二:安装系统

  1. 进入PE环境
  2. 执行 physdiskwrite 工具
    bash
    physdiskwrite -u xxxx.img
  3. 按照提示完成安装

步骤三:初始配置

启动后,OpenWrt默认的LAN口IP是 192.168.1.1

  1. 用网线连接电脑和小主机的LAN口
  2. 将电脑IP设置为 192.168.1.x 网段
  3. 浏览器访问 http://192.168.1.1
  4. 默认用户名 root,无密码

注意:

  • 确保小主机要打开DHCP服务,否则无法获取IP地址。
  • 最好先在有线网络下配置,不然后续安装无线网卡驱动比较麻烦。

首次登录后建议设置密码:

bash
passwd

现在,你可以通过浏览器访问来配置OpenWrt系统了。 openwrt

步骤四:安装中文支持

  1. 进入 SystemSoftware
  2. 点击 Update 按钮,等待更新完成
  3. 搜索 i18n,查找 zh-cn 字样的软件包
  4. 点击 Install 按钮,等待安装完成

zh-cn

无线网卡配置

我的小主机带有一张Intel WiFi Link 5100的无线网卡,我这次的目标就是让OpenWRT通过这个无线网卡连接到WiFi网络,然后转发给我的路由器。

安装无线驱动

  1. 进入 系统软件包
  2. 点击 更新列表 按钮,等待更新完成
  3. 搜索 iwlwifi,查找 kmod-iwlwifiiwlwifi-5100
  4. 点击 Install 按钮,等待安装完成 iwlwifi
  5. 进入 网络无线,在你的无线网卡下,点击 扫描 按钮,扫描可用WiFi网络。 network scan
  6. 选择要连接的WiFi,输入密码,点击 连接 按钮。 connect
  7. 等待连接成功,确认网络连接正常。 connect-success

不过,由于我这张网卡有点老了,所以我遇到了一些问题。

问题:扫描不到WiFi

安装好驱动后,我进入 网络无线 页面,点击扫描按钮,却发现扫描不到任何WiFi信号。

这让我有点困惑,明明驱动已经安装成功了,为什么还是扫描不到呢?

排查过程

首先,我通过SSH连接到OpenWrt,检查网卡是否被正确识别:

bash
ifconfig -a

结果发现输出中只有 eth0eth1br-lan 等有线网络接口,完全没有 phy0-sta0radio0 这样的无线接口。

这说明虽然驱动安装了,但系统并没有创建无线网络接口。

接下来检查内核是否识别到了无线网卡:

bash
dmesg | grep -i 'wireless\|wlan\|firmware'

输出显示:

iwlwifi 0000:03:00.0: loaded firmware version 8.83.5.1 build 33692 5000-5.ucode op_mode iwldvm

好消息!驱动和固件已经成功加载了。那为什么没有无线接口呢?

继续检查物理无线设备:

bash
ls /sys/class/ieee80211/

输出 phy0,说明物理设备确实被识别了,只是没有自动创建网络接口。

解决方案:手动创建无线接口

既然系统没有自动创建接口,那就手动创建一个:

bash
# 创建无线接口
iw phy phy0 interface add phy0-sta0 type managed
# 启用接口
ip link set phy0-sta0 up
# 确认创建成功
ifconfig -a | grep phy0

执行后,phy0-sta0 接口终于出现了!

开机自动创建接口

每次重启都要手动创建接口太麻烦了,于是我在 /etc/rc.local 中添加了自动创建脚本:

bash
cat > /etc/rc.local << 'EOF'
sleep 2
if ! iw dev | grep -q phy0-sta0; then
iw phy phy0 interface add phy0-sta0 type managed
ip link set phy0-sta0 up
fi
exit 0
EOF
chmod +x /etc/rc.local

这样每次开机就会自动检查并创建无线接口了。

WireGuard 配置

由于我的校园网需要通过 WireGuard 进行认证才能正常上网,所以还需要配置 WireGuard 客户端。

安装 WireGuard

  1. 进入 系统软件包
  2. 点击 更新列表 按钮
  3. 搜索并安装以下软件包:
    • wireguard-tools
    • luci-proto-wireguard
    • kmod-wireguard
  4. 安装完成后重启系统

通过 LuCI 界面配置

重启后,在 LuCI 界面配置 WireGuard:

  1. 进入 网络接口
  2. 点击 添加新接口
  3. 名称填写 wgclient,协议选择 WireGuard VPN
  4. 点击 创建接口
  5. 直接导入配置文件
  6. 切换到 防火墙设置 标签页,选择 WAN 区域
  7. 点击 保存,然后 保存并应用

验证连接

进入 状态WireGuard,查看是否有握手信息。如果有,说明连接成功。

踩坑:路由没有经过 WireGuard

配置好 WireGuard 后,我发现虽然 wg show 显示连接正常,但实际流量并没有经过 WireGuard 隧道。

通过 ip route 查看路由表,发现问题所在:WireGuard 的路由优先级不够高

解决方案

需要在 LuCI 中调整路由设置:

  1. 进入 网络接口,编辑 wgclient 接口
  2. 切换到 高级设置 标签页
  3. 找到 路由表 选项,设置为 main(或者不填,使用默认)
  4. 找到 跃点数 选项,设置一个较小的值(如 100),确保优先级高于其他 WAN 接口
  5. 保存并应用

或者通过命令行手动添加路由:

bash
# 查看当前路由
ip route
# 确保默认路由经过 WireGuard
# 如果发现默认路由指向其他接口,需要调整

另外,如果你的 OpenWrt 有多个 WAN 接口(比如同时有无线 WAN 和 WireGuard),还需要检查 多线负载均衡 设置,确保流量正确分流。

网络转发配置

既然OpenWrt已经通过无线网卡连上了网络,接下来就是配置网络转发,让连接到路由器的设备也能上网。

配置网络接口

  1. 进入 网络接口
  2. 找到无线网络接口(通常是 wwan
  3. 将其防火墙区域设置为 WAN

配置防火墙

进入 网络防火墙,确保:

  • 无线接口属于 WAN 区域
  • LAN 到 WAN 的转发已启用

测试转发

用网线连接路由器的WAN口到OpenWrt的LAN口,然后从连接路由器的设备测试网络:

bash
ping baidu.com

成功!现在所有连接路由器的设备都可以通过OpenWrt上网了。

常见问题

Q: 无线网卡驱动缺失怎么办?

首先确认网卡型号:

bash
# PCIe网卡
lspci -nn | grep -i network
# USB网卡
lsusb

然后安装对应驱动:

bash
apk update
# Intel网卡
apk add kmod-iwlwifi iwlwifi-firmware
# Realtek网卡
apk add kmod-rtl8xxxu
# MediaTek网卡
apk add kmod-mt7921e mt7921-firmware

Q: 连接WiFi后无法上网?

检查防火墙设置,确保无线接口属于 WAN 区域:

  1. 进入 网络接口
  2. 找到无线接口,点击 编辑
  3. 切换到 防火墙设置 标签
  4. 选择 WAN 区域

Q: 5GHz WiFi连接不上?

Intel 5000系列老网卡对5GHz支持有限。建议:

  1. 设置正确的国家代码为 CN
  2. 尝试连接2.4GHz频段
  3. 检查信道是否支持
bash
# 查看支持的信道
iw phy

Q: OpenWrt版本过旧怎么办?

查看当前版本:

bash
cat /etc/openwrt_release

新网卡(如Intel AX200、MT7922等)需要OpenWrt 23.05或更高版本。建议从官网下载最新稳定版固件。

总结

这次在x86小主机上安装OpenWrt的经历,让我踩了不少坑,但也学到了很多:

  1. 老网卡兼容性问题:Intel 5000系列这种老网卡可能需要手动创建无线接口
  2. 驱动和固件要配套:安装驱动时记得同时安装对应的固件包
  3. 防火墙区域很重要:无线接口作为WAN口使用时,必须正确设置防火墙区域

相比之前在FNOS上折腾透明代理,OpenWrt的方案确实更加稳定和方便管理。虽然配置过程中遇到了一些问题,但最终都解决了。

希望这篇文章能帮助到同样想在小主机上折腾OpenWrt的朋友们!

参考资料

喜欢这篇文章?打赏一下作者吧

爱发电
支付宝
微信
搜索