跳到主要内容

软路由实践

· 阅读需 12 分钟

前言​

2024/06/29​

经过将近一年的使用体验,发现 All In One 模式的软路由,存在很多不足。

  • 使用的猫棒,发热量非常大,手放上去感觉会起水泡。这肯定会给稳定性带来影响。
  • 在折腾 软路由/NAS 的过程中,经常需要断网、重启等操作,这无疑会影响其他使用网络的人。
  • 软路由/NAS 基本就是代表着不稳定,所以网络体验给人带来的感觉就是不好。

这些不足,网上都有人描述。不过自己折腾了一遍,才深有体会。所以后续还是使用光猫 + 2.5G路由器的组合,顶多在 NAS 上根据实际需求,使用 iStroreOS 搭建旁路由。

2023/11/11​

经常折腾PC,所以对软路由了解甚久,这次就来折腾一下吧。

经过大约一周的折腾,最后敲定为 爱快(主路由)+ iStoreOS(旁路由)的双路由模式。主要是因为iStoreOS一直拨号不成功,实在没办法才这样,个人意愿还是能少部署一个则少一个。

软硬件清单​

硬件:

  • 国伟R86S-305的迷你x86主机(这次是下血本了,忍住了这款机型贵,性价比不高的诟病)。

    • CPU:N305,4核4线程,3.40GHz
  • HSGQ SFP千兆猫棒。

系统:

  • Proxmox Virtual Environment,虚拟化平台,后续想着还可以在上面折腾Mac OS。
  • iKuaiOS,试了很久,只有它拨号成功了,且其路由能力很强大,设置DHCP规则很灵活。
  • iStoreOS,基于OpenWRT深度定制的软路由系统。

软件:

  • OpenClash,安装在iStoreOS下,负责科学上网。

iKuaiOS​

在配置好OpenClash时,开开心心的准备上网,在访问 raw.githubusercontent.com 时,发现访问不了,当时第一时间想到的是DNS被污染了,然后就在 iStoreOS 上各种设置瞎折腾,还是不行。最后还是决定查查DNS的获取途径。

在Windows终端键入:nslookup raw.githubusercontent.com,输出如下:

服务器: UnKnown
Address: fe80::1

名称: raw.githubusercontent.com
Addresses:   ::
          0.0.0.0

服务器的地址一度是我困惑,在折腾了许久,才知道Windows是使能了IPv6的协议栈的,且默认是使用的DHCP模式,所以这时分配的网关和DNS都是主路由,主路由上的DNS受到了域名污染,所以无法正确的解析 raw.githubusercontent.com 的真实IP地址。在Windows上设置获取IPv6地址方式为手动,设置网关和DNS为旁路由,问题得到解决。应该有几种解决方式:

  1. 主路由DHCP/DHCPv6支持设置网关,这样就可以将IPv4/IPv6网关设置成旁路由
  2. 直接在Windows以太网属性中,禁用IPv6协议(目前感觉IPv6用的还不多)
  3. 手动配置IPv6地址,将网关和DNS指向旁路由
  4. 想办法弄清Windows为什么先访问IPv6的DNS,而不是IPv4的DNS

在这段折腾的过程中,感觉到了iKuaiOS配置的强大,一般家用路由器,DHCP都不会提供设置选项,都是默认指向自己,而iKuaiOS则提供了很多选项,且大多都是界面操作,感觉比OpenWRT更成熟稳定易用,单在这一方面来说。

直通网卡​

/etc/pve/qemu-server/<iKuaiOS ID>.conf
hostpci0: 0000:05:00 # SFP+ 网卡
hostpci1: 0000:02:00 # 1G网卡,用于连接硬路由

iStoreOS​

在PVE创建虚拟机,暂时不选中系统盘,直接删掉。

下载最新固件,以及img2kvm工具。

将固件和工具拷贝至 /root 目录下,然后在终端输入:

# 例如: ./img2kvm ./istoreos-22.03.5-2023102711-x86-64-squashfs-combined.img.gz 101 local
./img2kvm 固件完整名 虚拟机ID local

然后看 iStoreOS 虚拟机的硬件界面,会出现一个未添加的硬盘,双击添加,且不用修改任何设置。最后面修改引导顺序即可。

安装 QEMU Guest Agent(安装完成后重启):

opkg update
opkg install qemu-ga
/etc/init.d/qemu-ga enable
/etc/init.d/qemu-ga start

搭建内网​

在之前一般都是使用 iStoreOS 作为旁路由使用,有时我们也想将其作为主路由,例如我们想新增一个内网。

那么将能够访问外网的接口设为 WAN 口,将待接入到内网的接口设为 LAN 口。并使能其接口上的DHCP服务。

在设置 LAN 接口时,我们可以将其协议改为 静态地址,IPv4 地址改为类似于 192.168.8.1。

最后在 quickstart 命令中,设置 iStoreOS 能够通过 WAN 地址访问,这样我们就能在搭建的局域网上一级网络中访问到 iStoreOS。

做为旁路由,应关闭 提供 DHCPv4 服务。

局域网DNS解析​

有时我们在内网使用DNS解析。

一般方法可以在 例如Windows的 C:\Windows\System32\drivers\etc\hosts 文件直接新增如下:

172.16.0.50 gerrit.reconova.com
172.16.2.4 oaapp.reconova.com

这样的话每台设备都需要添加。

我们也可以直接在 iStoreOS 中添加,利用 Dnsmasq 进行域名解析。在 网络➡DHCP/DNS➡常规设置➡地址下,添加如下两条:

/gerrit.reconova.com/172.16.0.50
/oaapp.reconova.com/172.16.2.4

即可达到内网下 iStoreOS 为网关的机器能够成功解析以上两个局域网域名。

Windows出现默认网关 0.0.0.0​

在使用软路由时,Windows下执行 ipconfig 经常会发现出现如下情况而不能正常上网:

以太网适配器 以太网 2:

连接特定的 DNS 后缀 . . . . . . . : lan
本地链接 IPv6 地址. . . . . . . . : fe80::8369:60c4:f2d0:2cc6%8
IPv4 地址 . . . . . . . . . . . . : 192.168.110.208
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 0.0.0.0
192.168.110.1

这是以管理器权限执行:

route delete 0.0.0.0

即可,然后再通过插拔网线或者先禁用后使能的方法使网口重新获取一次IP即可解决问题。

网络配置次数过多(例如多次安装iStoreOS)Windows 电脑会显示 网络 2、 ... 、网络 7等显示,将注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles 的子项删除即可。

DNS污染问题​

直至今日(2024/11/04)我才注意到DNS被污染的严重问题。

注意

如果DNS受到污染,有时可能连 www.baidu.com 这类的网址都无法解析到 IP 地址。

当使用浏览器访问某个网页,出现 DNS_PROBE_FINISHED_NXDOMAIN 错误时,就应该警惕:是不是我的DNS域名解析服务出现问题了。

PS C:\Users\amass> nslookup.exe baijiahao.baidu.com
DNS request timed out.
timeout was 2 seconds.
服务器: UnKnown
Address: fe80::1

DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** 请求 UnKnown 超时

一般家里局域网最上级的路由器会将DNS指向它的上级路由器地址,这个时候DNS很容器实现问题(如上就是一直让我懵逼且难受的问题,然后我还一直以为是电脑的问题,希望靠重装电脑系统解决问题......)。

这里我们选用 阿里公共DNS:

IPv4:

  • 223.5.5.5
  • 223.6.6.6

IPv6:

  • 2400:3200::1
  • 2400:3200:baba::1

以上我们可以直接在路由器设置,让使用DHCP服务的设备不需要再手动配置。

获取光猫管理员账号​

电信​

在光猫上插入U盘,访问 http://192.168.1.1:8080 ,以光猫后面写着的普通账号密码先登录进去,登录成功之后,查看网页 main.html 源码,找到 sessionKey:

var sessionKey='1903488609';

然后进行备份页面:http://192.168.1.1:8080/usbbackup.cmd?action=backupeble&enabled=0&sessionKey=1903488609,将 sessionKey 替换为实际值。

进去之后通过 USB备份设置,点击 备份配置,就可以将配置文件备份到U盘中。在U盘中根目录能看到e8_Config_Backup/ctce8_TGCT-526G.cfg文件,使用 RouterPassView 打开该文件,找到:

<X_CT-COM_TeleComAccount>
<Password>6?G3Qw$U</Password>
</X_CT-COM_TeleComAccount>

6?G3Qw$U 即为超级管理员账号的密码,超级管理员为:telecomadmin(每次光猫恢复出厂设置,该密码都会变动)。

猫棒​

在折腾猫棒时,过程很不畅,因为其中还是涉及了很多网络相关的知识,例如 EPON、GPON、PPPoE拨号、VLAN、LOGID等名词。

此前一直使用的移动光猫都肩负着拨号和路由的任务。但是在使用猫棒的时候,需要猫棒只做桥接作用,也就是把光信号转化为电信号,路由交给软路由做。一个原因是猫棒也做路由的话会增加功耗,发热,综合性能下降。另一个原因是多加了一层局域网网络需要做访问转发,理论上网络时延会增加。

在调试猫棒时,需要使用到 telnet:

telnet 192.168.1.1 # 访问猫棒,账号/密码 admin/admin

omcicli mib get 84 # 查看vlan相关信息
flash default cs # 恢复出厂设置
reboot # 重启

在输入omcicli mib get 84后,如果出现如下类似信息,则意味着猫棒已经设置好

BusyBox v1.12.4 (2023-10-21 16:47:13 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
# omcicli mib get 84
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
VlanTagFilterData
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
=================================
EntityID: 0x101
FilterTbl[0]: PRI 0,CFI 0, VID 46
FwdOp: 0x10
NumOfEntries: 1
=================================
=================================
EntityID: 0x102
FilterTbl[0]: PRI 0,CFI 0, VID 41
FwdOp: 0x10
NumOfEntries: 1
=================================
=================================
EntityID: 0xa101
FilterTbl[0]: PRI 0,CFI 0, VID 46
FilterTbl[2]: PRI 0,CFI 0, VID 41
FwdOp: 0x03
NumOfEntries: 2
=================================

如果为空,那么需要还需要在光猫上找参数然后在猫棒上设置。在这段时间的调试过程中,发现移动宽带只需要提供 PLOAM 密码 即可。电信宽带只需要提供 LOID 设定以及LOID 密码即可。等这些参数全部设置完成,在猫棒的GPON状态页面就能看到如下数据

GPON状态
ONU状态O5
ONU编号0
LOID状态认证成功(或者 Initial state)

那么基本上可以正常拨号了。

移动光猫超级管理员账号: CMCCAdmin 密码:aDm8H%MdA

如果LOID 密码这类在超级管理员页面输入框是密码模式,此时我们一定不要修改密码等参数。只需点击保存按钮,然后在浏览器的 检查→网络 处,查看请求即可,例如电信光猫会请求如下url:

http://192.168.1.1:8080/ctloid.cmd?ctLoid=宽带的loid&ctLoidUfxxbtwi=宽带的loid&sessionKey=宽带的loid密码

IEEE 802.1X 身份验证​

参考文章:在 OpenWrt 上实现 8021.X EAP 认证。

选择一个掉电不会消失的目录,创建如下配置文件:

/etc/8021x.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=root
ap_scan=0
network={
key_mgmt=IEEE8021X
eap=PEAP
phase2="auth=MSCHAPV2"
priority=2
identity="your_username"
password="your_password"
}

随后,使用以下命令( eth0 需要替换成需 802.1x 认证的接口)进行登录认证。

wpa_supplicant -D wired -i eth0 -c /etc/8021x.conf -B -s

此时查看日志,过滤 wpa_supplicant,如果出现 Authentication succeeded 字样,则表示认证成功。同时日志也可以帮助检查是什么阶段认证不成功,修正相关的错误:

Wed Mar 11 10:18:59 2026 daemon.notice wpa_supplicant[19868]: Successfully initialized wpa_supplicant
Wed Mar 11 10:18:59 2026 daemon.notice wpa_supplicant[19869]: eth0: Associated with cc:8a:c2:23:00:03
Wed Mar 11 10:18:59 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-STARTED EAP authentication started
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/CN=SZ-LDAP-01.xx.xxx.xx' hash=8ff1dfcc0287727e3a937834a88e4d4ed5e630
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:SZ-LDAP-01.xx.xxx.xx
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/CN=SZ-LDAP-01.xx.xxx.xx' hash=8ff1dfcc0287727e3a937834a88e4d4ed5e630
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:SZ-LDAP-01.xx.xxx.xx
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/CN=SZ-LDAP-01.xx.xxx.xx' hash=8ff1dfcc0287727e3a937834a88e4d4ed5e630
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:SZ-LDAP-01.xx.xxx.xx
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: EAP-MSCHAPV2: Authentication succeeded
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: EAP-TLV: TLV Result - Success - EAP-TLV/Phase2 Completed
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully
Wed Mar 11 10:19:01 2026 daemon.notice wpa_supplicant[19869]: eth0: CTRL-EVENT-CONNECTED - Connection to cc:8a:c2:23:00:03 completed [id=0 id_str=]

认证成功之后也可以通过如下命令查看认证结果:

wpa_cli status

最后通过 udhcpc 重新获取IP地址:

udhcpc -i eth0

评论

欢迎补充上下文、指出问题,或者留下进一步讨论的线索。

邮箱用于回复通知和显示头像,地址不会公开

删除评论

将删除 的这条评论,以及它下面的全部回复。删除后无法恢复。