Leohearts

拥有一颗坚强而又温柔的心 *version 1.1

cover

用便宜的 k662c 开额外 SSID 并配置 vlan 实现单线多网

因为最近换了光猫且改了桥接,原本用光猫开一个直连 SSID 的思路无法继续使用了。鉴于之前已经日穿了 k662c, 且发现它其实功能强大而且非常便宜(因为是运营商送的,二手全新大概也就¥200),遂有了用它开额外的 SSID 然后使用 VLAN 的方式,用一条线连接 AP 和软路由,实现同时承载一个直连网络和一个代理网络的目的。

前置条件

你需要有一个 k662c, 且已经开了 telnet 权限。同时,你需要有一个支持 vlan 的上层交换机/软路由,我用的是 openwrt .

在开始之前,请确保你的 AP 使用 WAN 口和路由连接,如果用 LAN 口连接的话,能用,但是 VLAN 功能会出问题。k662c 需要工作在 “路由模式” (只是叫做路由模式,实际上我们用它桥接。当然,你想路由也可以。)

为方便调试,你的 k662c 最好有一个和上层路由器不同的ip地址,比如我的 openwrt 在 192.168.1.1, k662c 就在 192.168.101.1 .

开一个额外的 SSID

如果你在 telnet 中输入 display wifi information, 它会输出目前的所有已配置网络:

它其实有 6 个已配置网络,三个2.4g和三个5g,其中除了web上可以配置的两个主 SSID 外,还有两个 QLINK 和两个访客 SSID . 我们要利用的就是这个访客 SSID, 虽然 web 上没办法修改,但是我们可以用 telnet 把它改成我们需要的样子!

进入 telnet, 输入 su,提示符会变成 SU_WAP>.

依次输入以下命令,设置你的新 SSID :
(记得改成你的 SSID 名字)

set wlan basic laninst 1 wlaninst 7 ssid emoH-straehoeL
set wlan basic laninst 1 wlaninst 7 enable 1
set wlan basic laninst 1 wlaninst 7 beaconType WPA2/WPA3
set wlan basic laninst 1 wlaninst 7 wpaandieee11iencryptionmodes AESEncryption
set wlan basic laninst 1 wlaninst 7 wpaandieee11iauthenticationmode PSKandSAEAuthentication
set wlan basic laninst 1 wlaninst 7 wmmenable 1

没有意外的话,所有命令都应该输出 success .

接下来,去 Web UI 给你的新 AP 设置密码。这一步比较 tricky, 需要我们在 F12 中抓包修改。

首先,导航到 “我的wifi” 这一页,按下键盘上的 F12, 点击 “网络” 选项卡,然后点击页面上的 “保存” 按钮。

你的网络选项卡中会出现一个 set.cgi 的项目,右键它,选择 Copy Value, 然后选择 Copy as Fetch .

(图片:firefox network)

接下来,进入 Console 选项卡,粘贴剪贴板中的内容到终端(如果提示禁止粘贴,根据屏幕提示输入 allow pasting

找到其中的 psk1=InternetGatewayDevice.LANDevice.1.WLANConfiguration.5.PreSharedKey.1,将其改为 psk1=InternetGatewayDevice.LANDevice.1.WLANConfiguration.7.PreSharedKey.1 。然后鼠标点击代码的末尾,按下空格。

(图片:firefox console)

这样一来,你的新 SSID 就配置好啦!但是先别急着连接,我们还要去配置 VLAN.

配置 VLAN

导航到更多功能-网络配置-WAN配置,点击 “新建”,根据自己的需要选择 “路由wan” 还是 “桥接wan”,选中 “使能vlan”,填写一个 vlan 号码。我填写的是 8 ,随便一个数字都可以,但是记住,之后还要用。

接下来,绑定项处选择我们刚刚设置的 SSID 7. 为了不出问题,请将你原本的 WAN 配置项手动勾选 SSID 7 之外的所有可以点的绑定项。

(图片:k662c vlan)

一切设置好后,点击 “应用”。这个时候,也别着急去连接你的新 SSID 7 ,还要配置上层路由呢。

在你的上层路由中配置一个新的 vlan 设备:我使用的是 openwrt, 在 Interfaces-Devices 中点击添加,选择 VLAN(802.1q), 设备选择你的 LAN 设备 (我这里是eth0),VLAN ID 写你刚刚设置的那个。

图片:openwrt vlan

接下来导航到 interfaces, 添加一个新的 interface, 绑定到刚创建的 vlan 设备,配置如图:

创建新 interface

我们还要点进创建好的新interface,设置好 ipv4 地址和 netmask (gateway 和 broadcast 无需填写), 点击 DHCP server 并启用 DHCP, 还有 ipv6 (如有). 这一步你可以直接参考你的现有lan接口的配置,记得改一下 ipv4 网段就好。

全部保存并应用后,就可以连接进你前几步在 AP 上创建的新 SSID 了。如果一切正确,它应当获取一个你在上层路由中 lan8 接口分配的 DHCP 地址。

Screenshot_20240319_184849.png.webp
Screenshot_20240319_184859.png.webp

修复 ipv6

但是你可能会注意到,即使配置一切正确,新的SSID就是获取不到 ipv6 地址,即使我们把它和原本的lan桥接在一起也一样。这是为什么呢?

因为我们使用的是原本的访客网络,访客网络的配置较为严格。所以,我们需要用修改配置文件的方式把它的 access 等级改为正常。

在 k662c 中导出配置 xml,在导出的文件中搜索 5G-3, 把后面的 AccessRule 的值改为 0 。

(图片:设置xml)

导入新的配置文件,这样一来,你的 ipv6 在其他配置正确的情况下就可以用了。

如果你不确定是不是 ipv6 的问题,可以用这种方式验证是否依然是访客网络:

访客网络无法访问 k662c 的管理面板,即使你加上它的网段也不行。所以如果修改 AccessRule 之后, k662c 的管理ip可以ping通,就是修改好了。(注意你的本地计算机是否和k662c在同一个网段,你可能需要手动给自己的电脑加一个/24的ip)

(可选)让 OpenClash 不代理新的 vlan 接口

默认情况下,OpenClash 会代理所有下层接口,且没有设置项可以直接排除一个接口。鉴于我的目的是 “开一个直连网络”,我们要排除所有 OpenClash 可能导致的问题,就要把它完全绕过,让流量不进代理内核。

方法1:路由模式

如果你的 AP 中新建的带 vlan 的 WAN 是路由模式,你可以直接在 OpenClash 中选择黑名单掉 k662c 的 MAC 地址,这是最简单的方法。

方法2:修改 iptables/nft 规则

研究了一番 OpenClash 生成的流量规则后,参考其黑名单的实现方式,我们只需要在 prerouting 的时候判断流量是否来自我们的 VLAN 接口,如果是则不进入 OpenClash 即可。

我使用的是 nftables, 在 Plugin Setting - Developer Setting 中加入以下代码即可:

bypass_iifname="eth0.8"
nft insert rule inet fw4 openclash iifname $bypass_iifname counter return
nft insert rule inet fw4 openclash_mangle iifname $bypass_iifname counter return
nft insert rule inet fw4 openclash_mangle_v6 iifname $bypass_iifname counter return

应用配置后,你可以在 “Status - Firewall” 页面中查看 openclash 链是否加上了我们的新规则。

图片:规则设置

这样一来,所有的东西都设置好了!我们成功地实现了一个 AP 发多个 SSID, 不同 SSID 走单线多 VLAN 。