Chancel's blog

2466 字 9 分钟阅读

单线复用改造家庭网络弱电箱布线

  • Network

在装修时,只从弱电箱往客厅或各个房间预埋了单根网线,没有额外的回程线。这样一来,如果希望由软路由负责拨号、分流或透明代理,往往只能把设备塞进弱电箱。

问题也随之而来:弱电箱空间狭小、散热差、维护不便,而且软路由、交换机、光猫堆在一起之后,后期排障会非常痛苦。

单线复用的价值,就在于把一根物理网线同时承载 WANLAN 两类流量。做法并不复杂,本质上就是把这根线改造成 Trunk 干线,再借助 VLAN 将不同用途的流量隔离开。

1. 场景与目标

1.1. 原始问题

一个典型的场景:

  • 弱电箱里有光猫;
  • 弱电箱到客厅、房间 A、B、C 各只有一根网线;
  • 希望软路由放在客厅,而不是继续闷在弱电箱里;
  • 其他房间继续接 AP 或普通有线终端。

改造之前,网络是下面这样:

PlantUML diagram

1.2. 改造目标

改造目标如下:

  1. 让光猫继续留在弱电箱;
  2. 让软路由移动到客厅或书房等更易维护的位置;
  3. 只使用原来那一根到客厅的网线,同时传递 WAN 与 LAN;
  4. 保持其他房间仍然是普通 LAN 接入口。

1.3. 方案本质

所谓“单线复用”,本质上是:

  • VLAN 10 承载 WAN;
  • VLAN 20 承载 LAN;
  • 弱电箱到软路由之间的这根线工作在 Trunk 模式;
  • 光猫口与各房间口继续使用 Untagged / Access 方式,不需要感知 VLAN。

即普通终端依旧像以前一样插网线就能用,而只有“中间那根关键干线”需要同时带多个 VLAN 标签,做到 WAN/LAN 复用一根线。

2. 网络拓扑设计

2.1. 使用管理交换机后的拓扑

这里以磊科 GS6 为例,思路如下:

  • P1 接光猫;
  • P2 接客厅里的软路由上联口;
  • P3P4P5 接房间 A、B、C;
  • P2 为 Trunk 口,同时承载 VLAN 10 与 VLAN 20;
  • P1 只属于 WAN;
  • P3 ~ P5 只属于 LAN。

对应拓扑如下:

PlantUML diagram

2.2. 客厅软路由网关

我客厅里放的是一台多网口 Debian 12 软路由,例如 N100 小主机,那么可以直接在 Linux 侧拆分 VLAN。

Linux 系统配置思路如下(OpenWRT 实测相同也没问题):

  • enp1s0:接弱电箱交换机的 Trunk 口;
  • enp1s0.10:WAN 子接口;
  • enp1s0.20:LAN 子接口;
  • br0:把 enp1s0.20 与本地 LAN 口桥接在一起;
  • 10.199.199.2/24:用于访问交换机管理地址 10.199.199.199

逻辑图如下:

PlantUML diagram

3. VLAN 基础概念

3.1. VLAN、Untagged、Tagged、PVID 分别是什么

概念 含义 典型场景 本文作用
VLAN 二层隔离广播域 在同一交换机上分离 WAN 与 LAN 用 VLAN 10 承载 WAN,用 VLAN 20 承载 LAN
Untagged 出口不带 802.1Q 标签 接普通终端、光猫、家用 AP P1 接光猫,P3 ~ P5 接房间设备
Tagged 出口保留 802.1Q 标签 接交换机、软路由、支持 VLAN 的网卡 P2 作为 Trunk 干线
PVID 端口收到“未打标签”帧时,默认归入哪个 VLAN Access 口入口分类 P1=10P3 ~ P5=20
Not Member 端口不属于该 VLAN 隔离无关流量 避免 WAN 流量泄漏到 LAN 端口

这里要特别注意一点:

PVID 作用于 入口方向 的“未打标签帧归类”,而 出口是否剥离 VLAN 标签,则取决于该端口在该 VLAN 中是 Tagged 还是 Untagged

3.2. 数据走向

WAN 流量

  1. 光猫发出的报文通常不带 VLAN 标签;
  2. 报文进入交换机 P1 后,由于 P1PVID=10,因此被归入 VLAN 10;
  3. 报文从 P2 发往 Debian / 软路由时,因为 P2 在 VLAN 10 中是 Tagged,所以报文会带上 VLAN 10 标签;
  4. Debian 侧由 enp1s0.10 接收并交给 WAN 侧逻辑处理。

LAN 流量

  1. 局域网流量由 Debian 的 br0 发出;
  2. 因为 br0 里挂的是 enp1s0.20,所以从上联发出去时天然属于 VLAN 20;
  3. 交换机收到后,转发给 P3 ~ P5 时会剥离标签;
  4. 房间里的 AP、PC、NAS 等终端看到的仍然是普通以太网口。

3.3. 保留交换机管理

我的交换机管理地址是 10.199.199.199,因此在 Debian 的 br0 上额外挂了一个 10.199.199.2/24

这样做的好处是:

  • 不需要单独再找一根管理线;
  • 在 Debian 主机上就能直接访问交换机管理页面;
  • 不影响原有 192.168.11.0/24 的 LAN 使用。

4. GS6 的 VLAN 与 PVID 配置

4.1. VLAN 成员关系

如果仅考虑“光猫 + 客厅干线 + 三个房间”这一组端口,那么交换机上的 VLAN 配置可以整理成下面这样:

VLAN ID Member Ports Tagged Ports Untagged Ports 用途
10 1, 2 2 1 光猫到软路由的 WAN 通道
20 2, 3, 4, 5 2 3, 4, 5 客厅与各房间共享的 LAN 通道

如果你的 GS6 还有其他空闲端口,需要加入局域网,通常直接把它们也加入 VLAN 20 的 Untagged 即可。

4.2. PVID 配置

对应的 PVID 可以参考下面的设置:

Port PVID Accepted Frame Type 说明
1 10 all 光猫口,未打标签流量默认归入 VLAN 10
2 1 all Trunk 口,主要依赖已打标签流量转发
3 20 all 房间 A,未打标签流量归入 VLAN 20
4 20 all 房间 B,未打标签流量归入 VLAN 20
5 20 all 房间 C,未打标签流量归入 VLAN 20

这里 P2 保留默认 PVID=1 是一种比较稳妥的做法:

  • 对已经打了标签的 Trunk 流量没有影响;
  • 可以避免误把未标记流量直接吞进 VLAN 20;
  • 便于后期排查“到底是哪一端忘记打标签”这种问题。

5. Debian 12 Netplan 参考配置

下面是我当前 Debian 12 主机上的 Netplan 配置,作为完整参考:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      dhcp4: no
      dhcp6: no
    enp2s0:
      dhcp4: no
      dhcp6: no
    enp3s0:
      dhcp4: no
      dhcp6: no
    enp4s0:
      dhcp4: no
      dhcp6: no
  vlans:
    enp1s0.10:
      id: 10
      link: enp1s0
      dhcp4: no
      dhcp6: no
    enp1s0.20:
      id: 20
      link: enp1s0
      dhcp4: no
      dhcp6: no
  bridges:
    br0:
      interfaces:
        - enp1s0.20
        - enp2s0
        - enp3s0
        - enp4s0
      addresses:
        - 192.168.11.99/24
        - 10.199.199.2/24 
      dhcp4: no
      dhcp6: no

这份配置可以拆成三个关键点来看:

enp1s0 只作为 Trunk 母接口存在,物理口 enp1s0 本身不拿地址,而是作为 VLAN 的下层链路:

  • enp1s0.10 对应 WAN;
  • enp1s0.20 对应 LAN。

这种写法和 Netplan 官方示例里的 “Create VLANs” 与 “Create a bridge with a VLAN” 是一致的:先定义 VLAN 子接口,再把需要的那个 VLAN 放进桥里。

br0 负责扩展 LAN 广播域,br0 把以下接口桥接在一起:

  • enp1s0.20:来自弱电箱 Trunk 的 LAN VLAN;
  • enp2s0enp3s0enp4s0:Debian 主机本地的 LAN 物理口,此时可以理解为 LAN 口,也可以外接 ap 路由;

实现了以下设备处在同一个二层广播域中:

  • 客厅或房间里的本地有线设备可接入;
  • 其他房间通过交换机接入的 AP;
  • 交换机管理地址;

10.199.199.2/24 是挂在现有 LAN 二层上的一个附加管理地址,用于方便各客户端访问交换机的管理 SVI 10.199.199.199

这样设计的优点是简单、直接,缺点则是管理面没有再单独做一层 VLAN 隔离。如果后续设备规模扩大,或者希望把管理面与业务面彻底分离,再单独引入专门的管理 VLAN 会更清晰。

6. DHCP 与 DNS 服务

在软路由上,dnsmasq 承担了 DHCP 和 DNS 的角色。它监听在 br0 接口上,为局域网客户端分配 IP 地址并提供 DNS 解析缓存。

下面是 /etc/dnsmasq.conf 中的有效配置(省略注释):

interface=br0
dhcp-range=192.168.11.100,192.168.11.200,12h
dhcp-host=10:66:6a:d9:65:21,192.168.11.254,mihomo
dhcp-host=10:9f:4f:e6:6a:c7,192.168.11.10,AP-10,infinite
dhcp-host=10:9f:4f:c4:97:a5,192.168.11.11,AP-11,infinite
dhcp-host=dc:65:55:f5:ee:a5,192.168.11.12,AP-12,infinite
dhcp-option=3,192.168.11.99
dhcp-option=6,192.168.11.99
  • interface=br0 表示 dnsmasq 只监听在桥接接口 br0 上,不会干扰 WAN 侧可能出现的 DHCP 请求。
  • dhcp-range 定义了动态分配范围:192.168.11.100 ~ 200,租约 12 小时。
  • dhcp-host 用于静态绑定:
    • mihomo 网关(10:66:6a:d9:65:21)固定为 192.168.11.254
    • 三台 AP(AP-10 / AP-11 / AP-12)使用 infinite 租约,避免无线客户端因 AP 重启而感知 IP 变化。
  • dhcp-option 通知客户端:
    • option 3(网关)为 192.168.11.99(即软路由的 br0 地址);
    • option 6(DNS)也为 192.168.11.99,由 dnsmasq 本身提供 DNS 解析和缓存。

这样,局域网内的任意设备接入后就能自动获得 IP、网关和 DNS 信息,无需手动配置。

7. Q & A

7.1. 一根线解决 WAN / LAN?那在弱电箱和客厅各搭一个交换机一样?

不一样。关键在于普通交换机不具备 VLAN 隔离能力。

如果弱电箱和客厅各放一个普通交换机,那么从光猫进入的流量会与房间的 LAN 流量处于同一个广播域——WAN 和 LAN 就混在一起了,软路由无法通过单根线区分它们。

而本文的方案本质上是:

  1. 弱电箱端放的是管理交换机,通过 VLAN 10 / 20 把光猫和房间流量在二层隔离开;
  2. 客厅端由软路由的网卡直接识别 802.1Q 标签,通过子接口拆出 WAN 和 LAN;
  3. 中间的物理线只是一个 Trunk 载体,真正的隔离发生在两端的 VLAN 处理逻辑里。

所以不是"两端各一个交换机",而是"一端是管理交换机做端口分类,另一端是 VLAN 感知设备做标签拆解"。

7.2. 软路由必须具备 VLAN 处理能力吗?

是的,如果你的软路由、主机网卡、虚拟交换或上层系统根本不会识别 802.1Q 标签,那么弱电箱这端即便把 Trunk 配好了,客厅那端也接不住。

7.3. 带宽会共享同一根上联吗?

单线复用的代价是:WAN 和 LAN 会共同占用同一条物理上联带宽,所以我买的是 2.5G 网口的交换机和软路由。

互动

留言

发表留言

暂无留言,来做第一个吧。