外观
VLAN
做完这一篇,NAS 的一块网卡上多出一个 VLAN 子接口,例如 enp3s0.30。NAS 可以同时在主网和另一个 VLAN(IoT、摄像头、存储专网、访客网)里有地址,而不用多插一根线。
VLAN 要三方配合:交换机、路由器(或三层交换机)和 NAS。OMV 这一端只做一件事:在父接口上加一个带 VLAN 标签(802.1Q)的子接口。
配错 VLAN 会让 NAS 失联
- 影响范围:新建 VLAN 接口只是多一个接口,一般不影响原有连接;但如果你把当前用来管理 NAS 的接口挪进 VLAN,或者删除、修改了它的父接口,Web、SSH、SMB 都会在应用后断开。
- 前置条件:交换机上连接 NAS 的端口已经放行了这个 VLAN 的打标签流量(trunk 或混合口);这个 VLAN 里有可用的网关和 DHCP(或你已规划好静态地址);有本机控制台。
- 回退:点 应用 之前,用黄色提示条上的 撤销;已应用并失联,用控制台的
omv-firstaid重置网卡,见改坏网络后怎么救。注意它会删除所有接口配置,包括 VLAN。
两种常见用法
| 用法 | 父接口 | VLAN 接口 | 注意 |
|---|---|---|---|
| NAS 同时在主网和另一个 VLAN | 保留原来的地址和网关 | 填这个 VLAN 里的地址和掩码,网关留空 | 交换机端口要同时承载原来的不打标签流量和该 VLAN 的打标签流量 |
| NAS 整个搬进某个 VLAN | IPv4 和 IPv6 的方式都选 禁用,不配地址 | 配地址、网关、DNS | 交换机端口必须是 trunk 并放行该 VLAN;改错就失联,务必在控制台旁操作 |
如果交换机端口本来就是该 VLAN 的 access 口(不打标签),NAS 不需要建 VLAN 接口,直接给网卡配这个网段的地址即可。
第二种用法是按配置逻辑写出的,没有在 OMV 8 上实测。拿不准时用第一种。
创建 VLAN 接口
网络 → 接口 → 创建 → VLAN(Network → Interfaces → Create → VLAN):
| 字段 | 默认值 | 说明 |
|---|---|---|
| 设备 | 自动 | 编辑时显示,名字是 <父设备>.<VLAN id>,例如 enp3s0.30 |
| 父设备(Parent device) | 空 | 候选是所有已配置的非 VLAN 接口:以太网口、Bond、桥接、Wi-Fi。创建后不能改 |
| VLAN id | 1 | 界面接受 1 到 4095,创建后不能改。填你在交换机和路由器上规划好的编号;4095 在 802.1Q 里是保留值,别用 |
| IPv4、IPv6、高级设置 | 同以太网口 | 见网络接口。没有 WOL 字段 |
- 先在交换机上放行 VLAN,路由器上准备好该网段的网关。
- 打开
网络 → 接口,点 创建 → VLAN。 - 父设备选网卡(它必须已经出现在接口列表里,也就是在 OMV 里配置过);VLAN id 填编号。
- IPv4 方式选 静态,填地址和子网掩码。只想让 NAS 在这个 VLAN 里被访问时,网关留空;这个 VLAN 里没有 DHCP 就不要选 DHCP,否则会一直拿不到地址。
- 点 保存,再点黄色提示条上的 应用。
改 VLAN id 或父设备要删除后重建。
示例:给摄像头 VLAN 一个地址
主网是 192.168.1.0/24(不打标签),NAS 的网卡 enp3s0 地址是 192.168.1.20,网关 192.168.1.1。摄像头在 VLAN 30,网段 192.168.30.0/24,路由器上该网段的网关是 192.168.30.1。要让摄像头直接把录像存到 NAS:
| 字段 | 填什么 |
|---|---|
| 父设备 | enp3s0 |
| VLAN id | 30 |
| IPv4 方式 | 静态 |
| 地址 | 192.168.30.20 |
| 子网掩码 | 255.255.255.0 |
| 网关 | 留空(默认出口仍然是主网的 192.168.1.1) |
应用后,摄像头往 192.168.30.20 存数据,NAS 回应摄像头的流量会直接从 enp3s0.30 出去。主网的地址和网关都没有变。
只有一条默认路由
一台机器通常只应有一条默认路由。两个接口都填了网关时,都会写进路由表;这时给不想当默认出口的接口把指标(Metric)调大(例如 100),数字小的优先。新手更简单的做法是:只在一个接口上填网关。
和 Bond 组合
NAS 用了 Bond 时,父设备选 bond0 即可,VLAN 接口会叫 bond0.30。要保证交换机上承载 Bond 的那组端口放行了该 VLAN。
服务会在新 VLAN 里同样可见
OMV 的服务默认不限制监听的接口。Web 界面的 nginx 站点默认监听所有 IPv4 地址(模板里的 OMV_NGINX_SITE_WEBGUI_LISTEN_IPV4_ADDRESS 默认值是 *),SMB 配置里也没有限定接口。所以加了 VLAN 接口之后,该 VLAN 里的设备同样能访问 Web 界面、SSH、SMB 等。要隔离,先在路由器或三层交换机上做 VLAN 间的访问控制;单个 SMB 共享可以在 允许主机(Hosts allow)里限制来源;限制 Web 界面入口见Web 界面安全。OMV 自带的防火墙也可以按来源地址限制。
检查结果
网络 → 接口里出现<父设备>.<VLAN id>这一行,方式和地址正确;选中它点 显示详情,状态正常。在 OMV 的 shell(root)里确认:
sh# 在 OMV 的 shell 里执行,只读 ip -br addr # VLAN 接口有地址 ip -d link show enp3s0.30 # 把 enp3s0.30 换成你的接口名,应看到 vlan protocol 802.1Q id 30 ping -c 3 <该 VLAN 的网关>从这个 VLAN 里的另一台设备
ping <NAS 在该 VLAN 的地址>。原来的主网地址仍然可以访问 NAS(用第一种用法时)。
常见问题
创建后没有地址或 ping 不通。 先怀疑交换机:端口是否放行了这个 VLAN 的打标签流量,两端的 VLAN id 是否一致。再看 ip -d link show <接口名> 里的 id 是否是你要的。
父设备下拉框是空的。 候选只列出已在 OMV 里配置过的接口。先给网卡创建一条以太网配置(即使地址方式暂时都选「禁用」也算配置过)。
修改父接口之后 VLAN 也不通了。 VLAN 依赖父接口。父接口的配置被删除、网卡被并入 Bond 或桥接,VLAN 都会受影响。要把 VLAN 放在 Bond 上,就以 Bond 作为父设备创建。
想让容器直接拿到这个 VLAN 的地址。 可以用 Docker 的 macvlan 网络,父接口写 VLAN 子接口名(Docker 官方文档的 802.1Q 示例就是这样写的)。宿主机默认访问不到自己的 macvlan 容器,是内核的限制,详见 Docker 文档。容器的整体用法见为什么在 NAS 上用容器。
MTU 要不要改。 一般不用。要改时,VLAN 接口的 MTU 不能超过父接口,整条链路上的设备也要支持。