GS108PEv3 实现单线复用

更新

打电话给电信把光猫改成桥接模式,在路由器输入宽带账号和密码始终连接不上,摸索了一阵发现,原来使用 PPPoE 模式时,路由器 CPU 的口子不再是 8 口,而是 5 口。同时,从光猫来的数据送到 5 口时需要是 Untagged 的。另外就是在给 CPU 的口子配 Untagged 时必须强制指定 U,否则就是 T 的。


原文

家里网络很早之前就改造好了, 今天忽然想要改下交换机的配置, 但是因为时间太长, 一下次想不起来怎么连上交换机了. 折腾了好一会才连上, 所以决定把家里网络的相关改造记录下, 做个备份.

为什么需要单线复用?

现在我们上网通常只需要一个电信猫, 这个猫一般是具备直接拨号的和 WIFI 连入的, 只是性能和可玩性比较差, 所以我们还是会再接一个路由器, 我用的是淘宝淘的二手 NETGEAR R6300v2. 这样一来, 我们就需要把电信猫和路由器同时放到网络设备箱里, 如果你像我一样用的是 R6300v2 这种比较大的路由器可能就放不下了, 另外无线路由器放在网络设备箱里也会影响无线信号. 最好的办法就是, 无线路由器可以放到任意有有线的位置, 比如客厅. 但是像客厅这些地方, 一般只有一根网线用于连接路由器的 WAN 口, 这样其他地方的网线就无法直接与路由器相连了. 怎么办呢? 这时候就需要我们进行单线复用了, 也就是通过 WAN 口既可以与电信猫传输数据, 又可以与本地 LAN 的设备通信.

前置知识点

实现单线复用用到的关键手段是 VLAN.

VLAN

当我们本地网络有 N 个设备, 这些设备需要相互通信的话, 就需要借助于交换机. 有时候出于安全考虑, 我们希望本地网络中可以手动划分设备分组, 只有被划到一个分组中的设备可以相互通信, 不同组之间的设备相互隔离. 要实现这个功能, 就需要用到 VLAN. 现在通常用的 VLAN 协议是 802.1Q, 协议会在数据链路层的数据包中插入 VID (VLAN ID), 交换机根据 VID 进行相应的数据处理转发. 在 802.1Q 协议之前, 还有 Port-based VLAN, 使用这种 VLAN 协议, 数据包只在交换机内部有 VLAN 的概念, 出了交换机, 数据包就和普通的数据包没有区别了, 所以 Port-based VLAN 无法进行交换机的级联. 我们主要介绍 802.1Q 的 VLAN 协议. 对于交换机上的端口来说有三种类型:


这几种类型有什么区别呢? 我们从端口收到数据的处理方式来看. 对于一个端口来说, 它可以从交换机外部接收到数据, 也可以从交换机内部接收到数据. 对于前面一种我们暂时把它叫做 input, 后一种叫做 receive. 对于 input 来说, 有可能接收到不带 VID 数据, 也可能接收到带 VID 的数据. 对于 receive 来说接收到的都是带 VID 数据. 顺便再说下, 每个端口还有一个 PVID (Port VLAN ID) 的属性, 一个端口可以属于多个 VLAN, 但是只能有一个 PVID. 下面我们就从前面说的几个方面来看几种端口类型的区别:

WAN

之所以单线复用可以成功的另一个因素是, 路由器区分 WAN 口与 LAN 的底层是基于 VLAN 实现的. WAN 口与 LAN 口属于不同的 VLAN , CPU 根据 VID 来决定是按照 WAN 还是 LAN 来处理. 所以只要我们交换机将从电信猫过来的数据打上和 WAN 相同的 VID, 从本地网络的过来数据打上与 LAN 相同的 VID, 路由器就可以正常工作了.

实操

知道了原理, 剩下的就好办了.

交换机配置

先连上交换机, GS108PEv3 是可网管的交换机 (v2 是不行的, 只能用专用的工具连接). 如果不知道交换机的 IP 可以用 Netgear 提供的工具来设备发现 (需要与交换机直连, 中间不能有路由器) [1, 2, 3].

网件的端口都是 Hybird 类型的. 我这边是将 5 号口与路由器 WAN 口相连, 8 号口与电信光猫相连, 其余的口用于 LAN 设备连接.

VLAN ID Port Members
1 1U 2U 3U 4U 5T 6U 7U
2 5T 8U

VLAN 1 中的 5 号口设置成 T, 其余口设置成 U. VLAN 2 中 5 号口也设置成 T, 8 号口设置成 U. 最后把 8 号口的 PVID 设置成 2, 其余口设置成 1.

顺便说下, 网件交换机里, T 表示 Tagged, U 表示 Untagged, 没有标记表示这个端口不属于这个 VLAN [4].

路由器配置


我们先 SSH 到路由器, 对于 R6300v2 使用 robocfg show 查看 VLAN 设置:

# robocfg show
Switch: enabled 
Port 0:   DOWN enabled stp: none vlan: 1 jumbo: off mac: 00:00:00:00:00:00
Port 1:   DOWN enabled stp: none vlan: 1 jumbo: off mac: 00:00:00:00:00:00
Port 2: 1000FD enabled stp: none vlan: 1 jumbo: off mac: 00:11:32:bb:c3:45
Port 3:   DOWN enabled stp: none vlan: 1 jumbo: off mac: 00:00:00:00:00:00
Port 4: 1000FD enabled stp: none vlan: 2 jumbo: off mac: 38:f9:d3:19:0a:6b
Port 5: 1000FD enabled stp: none vlan: 1 jumbo: off mac: dc:ef:09:94:2d:f7
Port 7:   DOWN enabled stp: none vlan: 1 jumbo: off mac: 00:00:00:00:00:00
Port 8: 1000FD enabled stp: none vlan: 1 jumbo: off mac: dc:ef:09:94:2d:f7
VLANs: BCM5301x enabled mac_check mac_hash
   1: vlan1: 0 1 2 3 4t 8t
   2: vlan2: 4t 8t
  56: vlan56: 8u
  57: vlan57: 2t 4t 5t 8t
  58: vlan58: 4 7 8t
  59: vlan59: 0 1t 2 3t 5
  60: vlan60: 0 4t
  61: vlan61: 0 2t 3 5 8u
  62: vlan62: 0t 1t 2t 3t

上面是我现在的配置, 很多是路由器默认的, 和我们这次相关的就是 vlan1 与 vlan2 的配置. (这里带 t 的表示 Tagged, 没有 t 的表示 Untagged, 与交换机有区别). 对于我的路由器来说, 4 口是 WAN 口, 8 口是什么呢? 8 口代表的是 CPU, 路由器把 CPU 也抽象成了一个端口.

Port 4: 1000FD enabled stp: none vlan: 2 jumbo: off mac: 38:f9:d3:19:0a:6b 中的 vlan: 2 代表的是端口的 PVID, 我们可以用 robocfg port 4 tag 2 来配置 [5].

为了路由器每次重启都能自动配置 VLAN, 我们需要在 /jffs/scripts/services-start 中配置启动命令 [6]:

#!/bin/sh
robocfg vlan 2 ports "4t 8t"
robocfg vlan 1 ports "0 1 2 3 4t 8t"

这样, 单线复用就配置好了.

备注

家里各设备的网管地址 (年纪大了, 记性不好):


[1] GS108PEv3 — 8 Port Gigabit Ethernet PoE Smart Managed Plus Switch with 4-Ports PoE
[2] What is the default IP address of my NETGEAR Smart Managed Plus, Smart Managed Pro, or Insight Managed Smart Cloud switch?
[3] How do I access the admin page of my ProSAFE Web Managed Plus or Click Switch?
[4] 简单网管交换机的 VLAN 功能设置及应用
[5] 单线复用实践篇 #74
[6] 网件GS108PE交换机,搭配R8500梅林固件,实现单线复用