我想推出自己的路由器,因为我的 ISP 提供的路由器很糟糕。
路由器当然在所有 4 个 LAN 端口上提供 DHCP 和路由。
这是否意味着它在每个端口上单独提供 DHCP 和路由?或者这是否意味着它在软件中桥接所有四个端口,然后为该桥接设备提供 DHCP 和路由?
对用户来说,它在功能上看起来是相同的。但是在设置路由器的时候,还是有区别的。我假设一个比另一个更“正确”。最佳做法是什么?
我想推出自己的路由器,因为我的 ISP 提供的路由器很糟糕。
路由器当然在所有 4 个 LAN 端口上提供 DHCP 和路由。
这是否意味着它在每个端口上单独提供 DHCP 和路由?或者这是否意味着它在软件中桥接所有四个端口,然后为该桥接设备提供 DHCP 和路由?
对用户来说,它在功能上看起来是相同的。但是在设置路由器的时候,还是有区别的。我假设一个比另一个更“正确”。最佳做法是什么?
一般来说,4 个 LAN 端口在大多数路由器上都是桥接的。在大多数路由器上,它实际上是一个连接它们的硬件以太网交换机。虽然交换芯片通常支持 VLAN 标记,但您可以单独寻址端口(但通常不使用制造商提供的固件)。
但细节可能因路由器而异。这取决于品牌和型号。
您通常无法进行此设置。
为什么一个比另一个更“正确”?但是假设所有 4 个 LAN 端口都属于单个广播域,桥接更自然(如果硬件支持,则可以减轻 CPU 的负载)。
通常,消费者“路由器”实际上看起来更像这样:
调制解调器可能是通过以太网连接的外部盒子,但通常是内置的。
使用单个 DHCP 服务器,为所有内部设备(包括 WiFi 客户端)分配地址。
在某些情况下,您可能会发现可以将 WiFi 客户端与有线网络隔离,甚至彼此隔离。这种情况也有可能与您自己的家庭网络并行运行 - 例如,英国电信利用他们所有的消费设备在全国范围内提供他们的BT WiFi服务 - 酒吧、餐馆甚至住宅物业都提供连接他们的用户可以使用它在逻辑上与客户的有线和无线网络隔离。
不,内部端口将共享一个路由器(通常在软件中实现,例如:Linux 的iptables)。
这真的取决于你所追求的......如果你想将一些端口与其他端口隔离(例如“家庭办公室”与“家庭”),那么你会想要考虑拥有多个“内部”网络,为每个独立设置路由和防火墙配置。
如果您是家庭用户,那么您很可能只需要一个内部网络。
... 有很多合适的现成产品可以让您停止使用 ISP 的路由器。
如果您想要更实际的方法,那么您可以考虑使用运行类似pfSense的 Linux 机器,或者您可以使用流行的OpenWRT项目支持的现成硬件。
但从根本上说,我建议您不要使用自己的路由器,除非您真的很乐意亲自动手并负责处理这种工作负载和配置。
如果所有端口都属于同一个子网,那么它们必须被桥接。使用单独的接口实际上是行不通的。
当主机联系同一 IP 子网上的另一台设备时,他们根本不使用路由器。相反,他们广播 ARP 查询以了解目标设备的 MAC 地址并直接与该地址对话。如果两者在不同的路由器接口(不同的广播域)上,这将不起作用——ARP 查询不会被转发,如果它们是,主机仍然无法与他们学到的 MAC 地址通信。
(桥接端口的意思是合并广播域并允许在 MAC 层进行通信。)
因此,位于中间的路由器将不得不代表另一端的设备发送“欺骗”的 ARP 回复,但每次都使用自己的 MAC 地址。(如果这样做了,您很容易在计算机的 ARP 缓存中看到它。这称为代理 ARP,偶尔会在公共网络上进行。)现在您的路由器接收到所有发送给收件人的数据包,但它是如何做到的知道通过哪个端口转发它们吗?
以太网桥接会自动了解每个端口后面的 MAC 地址。然而,IP 路由却没有。如果您配置四个具有相同子网前缀的单独接口,则对于同一个整个网络,您只会获得四个相同的路由,并且路由器不知道哪一个是正确的。
理论上这是可行的——路由器现在只需要探测所有端口以了解哪个端口有设备在其后面,例如通过向所有端口发送自己的 ARP 查询并等待响应。(实际上它需要在向原始主机发送欺骗性 ARP 响应之前执行此探测——如果结果证明两台主机都在同一个端口后面,那么它可能会更加混淆它们。)
但实际上这并没有完成,大多数路由器甚至没有实现任何这样的动态代理 ARP。(Linux 有一个“parprouted”守护进程,仅此而已。)
(我看到的唯一其他例外是 Windows 中的 fe80::/64 处理,它使用 NDP 探测所有接口。但它不必实现代理,因为这个前缀无论如何都是不可路由的。)