Raspberry Pi 作为使用单一网络接口的路由器

介绍

免责声明:本文面向消费者和爱好者。


如果您想在家中运行自己的路由器,Raspberry Pi 4 Model B 1可能是一个很好的硬件选择:

  1. 它相当便宜
  2. 它足够快
  3. 它可以饱和它的千兆网络端口
  4. 它是省电的

关键问题似乎是它只有一个单一的网络接口。如果你构建一个路由器,你至少需要两个:

  1. 第一个连接到您的互联网调制解调器/路由器的接口(理想情况下是桥接模式)
  2. 连接到家庭网络的第二个接口(可能是交换机)

因此,如果您使用 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 的上下文中,网络交换机端口可以处于两种状态:

  1. 特定网络 (VLAN) 的成员(未标记)
  2. 传输多个网络 (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。

vlanconfig

所以从这张表我们可以得出:

  • 端口 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 年了,因为我无法将第二根电缆从调制解调器连接到路由器所在的房间。有关我的家庭网络设置的更详细图片,请查看此处

随时在下面留下任何评论问题。

关于这篇文章的黑客新闻讨论可以在这里找到

棒上路线

我从黑客新闻的讨论中了解到,只有一个网络接口的路由器被称为棒上路由器


  1. 较旧的 Raspberry Pi 型号严重受限于网络带宽。如此之多,如果您的互联网速度高于 100Mbit,它们将不适合用作互联网路由器。 

  2. 大多数便宜的交换机最多只能运行 32 ~ 64 个 VLAN。只有更昂贵的企业设备才能同时使用完整的 4096 VLAN。但是,这可能与消费者无关。 

注释

文章链接:

https://louwrentius.com/raspberry-pi-as-a-router-using-a-single-network-interface.html

posted @ 2022-03-26 04:21  十支穿云箭  阅读(434)  评论(0编辑  收藏  举报