我有一个典型的家庭网络,由运行 DD-WRT 的 ASUS RT-N16 路由器和一些有线和无线客户端组成。网络上新添了一台 Raspberry Pi,我将用它完成一个学校项目。
Pi 设置为运行到面向 Internet 的服务器的反向 SSH 隧道,以便更广泛的 Internet 上的任何人都可以通过 SSH 进入我家庭网络上的设备。
因为 Pi 可以在互联网上使用,也可以在我的家庭网络上使用,所以我想将它与网络上的所有其他设备隔离开来。实际上,我希望 Pi 位于围栏的一侧,而其他所有设备位于围栏的另一侧。所有设备都需要访问互联网。
起初,我尝试在 DD-WRT 路由器上设置两个 VLAN,但没有成功,但经过一天的折腾和论坛浏览,似乎很多人都遇到了固件错误问题。为了让我的生活更轻松(至少我是这么认为的),我买了一台 TP-Link TL-SG108E“简易智能交换机”,它宣传支持 VLAN。但就我而言,我无法让它像我预期的那样工作!
在TP-Link交换机上:
- 端口 1 - 连接至路由器的内置交换机
- 端口 2-7 - 我的各种客户端
- 端口 8 - 需要隔离的 Raspberry Pi
首先,我尝试设置基于端口的 VLAN。似乎无法同时将端口 1(路由器)分配给两个 VLAN。
基于端口的 VLAN 设置:
如果我选择 VLAN 2 也包含端口 1,那么它将被从 VLAN 1 中删除。
我继续尝试设置基于 802.1Q 标签的 VLAN。
802.1Q VLAN
使用 PVID
PVID
当端口 8 的 PVID 与 1 到 7 不同时,此设置似乎有效,Pi 无法从我的 LAN 访问,但也无法从 Internet 访问!如果我将路由器的 PVID 设为 1,将客户端的 PVID 设为 2,将 Pi 的 PVID 设为 3,则根本无法与路由器通信。
此刻,我感到很困惑,准备承认自己的无知。我到底做错了什么?
答案1
你所要求的隔离就是多租户单元 VLAN很有用。引用交换机配置中的帮助文本:
MTU VLAN(多租户单元 VLAN)定义了一个上行端口将与交换机上其他端口建立多个 VLAN。每个 VLAN 包含两个端口,即上行端口和交换机上的其他端口之一,因此上行端口可以与任何其他端口通信,但其他端口之间不能相互通信。
因此您可以使用它并将端口 1 配置为上行链路端口。不幸的是,这也意味着端口 2 到 7 无法相互通信。
如果您需要端口 2 到 7 进行通信,则需要考虑其他选项,因为多租户单元 VLAN 功能似乎不够灵活,无法实现这一点。
正如您所注意到的,基于端口的 VLAN 也无法实现您想要的功能。
标记 VLAN 是您最后的选择。但是让一个端口成为多个 VLAN 的未标记成员是有问题的,因为发送到交换机的未标记帧可能用于其中任何一个 VLAN,而交换机无法知道。
相反,您应该做的是使路由器的上行链路端口成为不超过一个 VLAN 的未标记成员,并成为其余 VLAN 的标记成员。
在路由器本身上,您还需要配置相同的 VLAN 标签,以便路由器知道数据包来自哪个 VLAN,并且路由器可以告诉交换机数据包属于哪个 VLAN。
在路由器上,这看起来像是连接到两个不同 VLAN 的两个虚拟网络接口。建议的配置是让路由器对两个 VLAN 使用不同的 IP 前缀。
答案2
您想要的设置绝对可以在此设备上实现。“基于端口的 VLAN”是不够的,因为它不允许一个端口成为多个 VLAN 的成员。使用“802.1Q”可以实现这一点。我的设置(我正是在此设备上运行的)与您想要实现的设置大致相同。
我的设置:
Portnum Device Member of VLAN VLAN-ID INCOMING FRAMES GET ASSIGNED (PVID)
--------|----------|----------------|-----------------------------------------
Port 1 Router 1,2,3 1
Port 6 Device A 1,2 2
Port 7 Device B 1,3 3
使用此配置,端口 6 和 7 彼此隔离。它们都可以与端口 1 通信,但彼此之间不能通信。
解释:进入端口 6 的以太网帧被推送到 VLAN 2。由于端口 1 是 VLAN 2 的成员,因此它们可以通过此端口离开,从而到达其后面的设备(路由器)。它们不能通过端口 7 离开,因为它不是 VLAN 2 的成员。当路由器想要回复时,通过端口 1 进入的以太网帧将被推送到 VLAN 1。端口 6 是 VLAN 1 的一部分,因此它们可以通过此端口离开。它们可以通过端口 7 离开,但由于这些帧不携带其后面设备的 MAC 地址,因此交换机没有理由让它们这样做。
请参阅下面我的工作设置的屏幕截图。