Raspberry Pi 作为使用单一网络接口的路由器
介绍
免责声明:本文面向消费者和爱好者。
如果您想在家中运行自己的路由器,Raspberry Pi 4 Model B 1可能是一个很好的硬件选择:
- 它相当便宜
- 它足够快
- 它可以饱和它的千兆网络端口
- 它是省电的
关键问题似乎是它只有一个单一的网络接口。如果你构建一个路由器,你至少需要两个:
- 第一个连接到您的互联网调制解调器/路由器的接口(理想情况下是桥接模式)
- 连接到家庭网络的第二个接口(可能是交换机)
因此,如果您使用 Raspberry Pi,您可能会以 20 美元左右的价格购买一个千兆位 USB3 NIC 并完成它。
现在,如果我告诉您,您可以通过仅使用Raspberry Pi 4 的单个板载网络接口来构建完全相同的设置,该怎么办?
这怎么可能?
介绍 VLAN
是的,我正在向读者介绍一种自 90 年代以来就存在的技术。它在企业和其他组织中广泛使用。
因为我有一种感觉,这项技术在 IT 运营之外的圈子里鲜为人知,我认为这可能是一个有趣的话题。
了解 VLAN
VLAN 技术允许您在同一条物理线路和同一台交换机上运行不同的、独立的网络。如果您想操作彼此分离的网络,这可以节省大量网络布线和所需的物理交换机数量。
如果您想在同一条物理线路或交换机上运行来自不同网络的流量,您如何识别这些不同的流量?
启用 VLAN 技术后,此类网络“数据包”将带有标签。由于 VLAN 技术在以太网级别运行,我们不应该谈论“数据包”,而应该谈论“以太网帧”。我认为,术语对于理解这个概念并不重要。
了解以太网帧前面有一个标签就足够了,它告诉任何支持 VLAN 的设备一个帧和一个数据包属于哪个网络。
这样,可以将网络流量流彼此区分开来。这些标签并不花哨,它们被称为 VLAN ID,它只是一个介于 1 和 4096 2之间的数字。
管理型交换机
既然我们了解了 VLAN 的概念,那么我们如何使用它呢?
首先,您需要一个支持 VLAN的托管网络交换机。
我能找到的最便宜的支持 VLAN 的交换机是 TP-LINK TL-SG105E,大约 25 欧元或美元。这是一个 5 端口交换机,但 8 端口版本通常只多几欧元/美元。
Juan Pedro Paredes 在评论中指出,这个 TP-LINK 交换机可能无法处理可能到达连接到 Internet 调制解调器的端口的大量 ARP 请求。其他人在 Hacker News 讨论中对这种转变持否定态度(链接如下)。我不确定价格接近相同的 Netgear 交换机是否会更好。
像这样的交换机有一个基于 Web 的管理界面,允许您在设备上配置 VLAN。
标记与未标记
在 VLANS 的上下文中,网络交换机端口可以处于两种状态:
- 特定网络 (VLAN) 的成员(未标记)
- 传输多个网络 (VLAN)(已标记)
如果一个端口只是 VLAN 的一个成员,它的行为就像任何其他交换机端口一样。在这种模式下,它显然只能是一个网络/VLAN的成员。VLAN 标记将从该端口传出的所有网络流量中剥离。
但是,分配了“标记”VLAN 流量的端口,只是按原样转发流量,包括它们的 VLAN 标记。
这是我们用来通过单个端口/线路将来自不同网络 (VLANS) 的网络数据包发送到我们的 Raspberry Pi 路由器的技巧。
那么让我们一起来拆开这张图,一步一步来。
让我们想象一个来自 Internet 的(返回)数据包到达调制解调器并发送到交换机端口 1。
交换机知道该交换机端口上的任何流量都属于 VLAN 10。由于该流量需要发送到 Pi 路由器,因此它将在数据包上放置一个标签并转发数据包,包括在交换机端口 2 上发往 Pi 的标签.
Pi - 反过来 - 被配置为与 VLAN 一起工作,就像交换机一样。数据包上的标签告诉 Pi必须发送数据包的虚拟接口。
说明此设置的网络计划配置示例:
network:
version: 2
ethernets:
enp2s0f0:
dhcp4: no
vlans:
enp2s0f0.10:
id: 10
link: enp2s0f0
addresses:
- 68.69.70.71/24 (fake internet address)
gateway4: 68.69.70.1 (fake upstream ISP router)
enp2s0f0.20:
id: 20
link: enp2s0f0
addresses:
- 192.168.0.1/24 (internal network address, acting as gateway)
如您所见,作为标记数据包到达的 VLAN 数据包(不带标记)被发送到属于该特定网络的虚拟网络接口。这些虚拟网络接口都共享相同的物理接口 (enp2s0f0)。虚拟网络接口只是添加了“.(VLAN ID)”的物理接口名称。
从这里开始,您可能会明白这是怎么回事:这两个虚拟网络接口基本上类似于具有两个物理网络接口的设置。因此,所有需要发生的路由和 NAT 只发生在这两个虚拟接口上。
如何使用 VLAN
要使用 VLAN,您需要支持 VLAN 的托管交换机。托管交换机具有管理界面,通常是基于 Web 的管理界面。
在本例中,我以 TP-LINK TL-SG105E 开关为例。要访问此页面,请在 Web 界面中转到 VLAN --> 802.1Q VLAN。
所以从这张表我们可以得出:
- 端口 1 是 VLAN 10 的未标记成员
- 端口 2 是 VLAN 10 和 VLAN 20 的标记成员
- 端口 3 是 VLAN 20 的未标记成员
请注意,还建议从他们不使用的 VLAN 中删除端口。所以我从默认的 VLAN 1 中删除了端口 1、2 和 3。
现在,如果您有更多设备要连接到此交换机上的内部 LAN,则需要将端口配置为 VLAN 20 的未标记成员。
注意事项
带宽影响
显然,如果您使用单个接口,则只能使用该单个接口的带宽。在大多数情况下,这不是问题,因为千兆以太网是全双工的:上行流量和下行流量有物理专用布线。
因此,您可能会说全双工千兆以太网的原始吞吐能力为 2 Gb/s,尽管我们大多不这样谈论它。
因此,当您以 200 Mbit/s 的速度下载时,该流量通过 VLAN 10 在传入流量路径上被摄取。然后使用传出路径通过 VLAN 20 通过 VLAN 20 将其发送到您的计算机。那里没问题。
如果您还使用 Raspberry Pi 作为备份服务器(带有连接的外部硬盘驱动器),则备份流量和互联网流量都可以在同一个千兆链路上“争夺”带宽。
对千兆互联网的影响
如果您构建此设置,您将永远无法获得完整的千兆互联网网络速度。它可能会达到约 900 Mbit。(我在这里假设您将使用 x86 硬件,因为 Pi 无论如何都无法处理此流量的防火墙。)
这是因为大多数流量是基于 TCP 连接的,当您下载时,双向都有流量!。下载流量是大部分流量,但有相当稳定的返回数据包流向发送者确认已收到流量(如果没有,它将触发重传)。
请记住,在这个单端口设置中,树莓派使用相同的千兆端口通过 VLAN 10 将返回流量发送到互联网,并通过 VLAN 20 将下载数据发送到您的家庭计算机。因此上行流量的大小将限制您的最大流量下载性能。
Raspberry Pi 4 Model B 作为路由器
最大的限制 - 成为越来越多的人的问题 - 是性能。如果您在 Linux 上使用 IPTABLES 进行防火墙,根据我的经验,网络吞吐量会下降到最大 650 Mbit/s。
如果您有千兆互联网或互联网速度超出 Pi 可以处理的速度,那只是一个问题(第一世界问题)。
如果您的互联网速度甚至没有接近,这根本不是问题。
也许 Raspberry Pi 400 或计算模块在这方面表现更好,因为它们的 CPU 时钟频率更高。
结束语
如果实施此设置对您有意义,则仅由您决定。我运行这种设置(使用 x86 服务器)已有 10 年了,因为我无法将第二根电缆从调制解调器连接到路由器所在的房间。有关我的家庭网络设置的更详细图片,请查看此处。
随时在下面留下任何评论问题。
关于这篇文章的黑客新闻讨论可以在这里找到。
棒上路线
我从黑客新闻的讨论中了解到,只有一个网络接口的路由器被称为棒上路由器。
注释
文章链接:
https://louwrentius.com/raspberry-pi-as-a-router-using-a-single-network-interface.html