软路由实践
前言
2024/06/29
经过将近一年的使用体验,发现 All In One 模式的软路由,存在很多不足。
- 使用的猫棒,发热量非常大,手放上去感觉会起水泡。这肯定会给稳定性带来影响。
- 在折腾 软路由/NAS 的过程中,经常需要断网、重启等操作,这无疑会影响其他使用网络的人。
- 软路由/NAS 基本就是代表着不稳定,所以网络体验给人带来的感觉就是不好。
这些不足,网上都有人描述。不过自己折腾了一遍,才深有体会。所以后续还是使用光猫 + 2.5G路由器的组合,顶多在 NAS 上根据实际需求,使用 iStroreOS 搭建旁路由。
2023/11/11
经常折腾PC,所以对软路由了解甚久,这次就来折腾一下吧。
经过大约一周的折腾,最后敲定为 爱快(主路由)+ iStoreOS(旁路由)的双路由模式。主要是因为iStoreOS一直拨号不成功,实在没办法才这样,个人意愿还是能少部署一个则少一个。
软硬件清单
硬件:
系统:
- 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为旁路由,问题得到解决。应该有几种解决方式:
- 主路由DHCP/DHCPv6支持设置网关,这样就可以将IPv4/IPv6网关设置成旁路由
- 直接在Windows以太网属性中,禁用IPv6协议(目前感觉IPv6用的还不多)
- 手动配置IPv6地址,将网关和DNS指向旁路由
- 想办法弄清Windows为什么先访问IPv6的DNS,而不是IPv4的DNS
在这段折腾的过程中,感觉到了iKuaiOS配置的强大,一般家用路由器,DHCP都不会提供设置选项,都是默认指向自己,而iKuaiOS则提供了很多选项,且大多都是界面操作,感觉比OpenWRT更成熟稳定易用,单在这一方面来说。
直通网卡
hostpci0: 0000:05:00 # SFP+ 网卡
hostpci1: 0000:02:00 # 1G网卡,用于连接硬路由
iStoreOS
在PVE创建虚拟机,暂时不选中系统盘,直接删掉。

将固件和工具拷贝至 /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 服务。
使用frpc
我们可以在 iStrore 中安装 Frpc,使得可以远程访问 iStoreOS。有时使用 OpenClash 时,经常遇到无法访问外网,需要更新配置订阅的情况。另外使用前一定要记得更改 iStoreOS 的密码。
局域网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服务的设备不需要再手动配置。
v2raya-openwrt
v2raya-openwrt 支持在 OpenWRT 上使用 V2Ray。
wget https://downloads.sourceforge.net/project/v2raya/openwrt/v2raya.pub -O /etc/opkg/keys/94cc2a834fb0aa03
echo "src/gz v2raya https://downloads.sourceforge.net/project/v2raya/openwrt/$(. /etc/openwrt_release && echo "$DISTRIB_ARCH")" | tee -a "/etc/opkg/customfeeds.conf"
opkg update
opkg install v2raya
opkg install kmod-nft-tproxy
opkg install xray-core
uci set v2raya.config.enabled='1'
uci commit v2raya
/etc/init.d/v2raya start
提示:downloading missing geoip.dat and geosite.dat; refresh the page later.
去 v2ray-rules-dat 下载 geoip.dat 和 geosite.dat 文件并复制到以下目录,如果使用的 v2ray 内核,则应复制文件到
/usr/share/v2ray/。
透明代理/系统代理实现方式 设置为 tproxy。tproxy 是透明代理的意思。
获取光猫管理员账号
电信
在光猫上插入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 认证。
选择一个掉电不会消失的目录,创建如下配置文件:
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