第 18 章. 其他可能性

本章列出了一些与高级 Linux 路由和流量整形相关的项目。其中一些链接可能值得单独成章,有些项目本身文档非常完善,不需要更多的 HOWTO 说明。

Linux 的 802.1Q VLAN 实现 (站点)

VLAN 是一种非常酷的方式,可以以虚拟而非物理的方式隔离您的网络。关于 VLAN 的更多信息可以在这里找到。通过此实现,您的 Linux 机器可以与 Cisco Catalyst、3Com:{Corebuilder, Netbuilder II, SuperStack II switch 630}、Extreme Ntwks Summit 48、Foundry:{ServerIronXL, FastIron} 等机器进行 VLAN 通信。

关于 VLAN 的一个很棒的 HOWTO 可以在这里找到。

更新:已包含在 2.4.14(可能为 13)的内核中。

Linux 的备选 802.1Q VLAN 实现 (站点)

Linux 的备选 VLAN 实现。该项目始于对“已建立”的 VLAN 项目的架构和编码风格的不同意,从而产生了更简洁的整体设计。

Linux 虚拟服务器 (站点)

这些人太棒了。Linux 虚拟服务器是一个高度可扩展和高可用的服务器,它构建于真实服务器集群之上,负载均衡器运行在 Linux 操作系统上。集群的架构对于最终用户是透明的。最终用户只能看到一个虚拟服务器。

简而言之,无论您需要负载均衡什么,无论流量级别如何,LVS 都会有办法做到。他们的一些技术简直是“邪恶”!例如,他们让多台机器在同一个网段上拥有相同的 IP 地址,但关闭了它们的 ARP。只有 LVS 机器执行 ARP——然后它决定哪个后端主机应该处理传入的数据包,并将其直接发送到后端服务器的正确 MAC 地址。传出的流量将直接流向路由器,而不是通过 LVS 机器,因此 LVS 机器不需要看到您 5Gbit/s 的内容流向世界,也不会成为瓶颈。

LVS 在 Linux 2.0 和 2.2 中作为内核补丁实现,但在 2.4/2.5 中作为 Netfilter 模块实现,因此它不需要内核补丁!他们对 2.4 的支持仍处于早期开发阶段,所以请对其进行测试并提供反馈或发送补丁。

CBQ.init (站点)

配置 CBQ 可能有点令人生畏,特别是当您只想对路由器后面的一些计算机进行整形时。CBQ.init 可以帮助您使用简化的语法配置 Linux。

例如,如果您希望将 192.168.1.0/24 子网(在 10mbit eth1 上)中的所有计算机的下载速度限制为 28kbit/s,请将此内容放入 CBQ.init 配置文件中

DEVICE=eth1,10Mbit,1Mbit
RATE=28Kbit
WEIGHT=2Kbit
PRIO=5
RULE=192.168.1.0/24

如果您对“如何以及为什么”不感兴趣,请务必使用此程序。我们正在生产环境中使用 CBQ.init,它运行良好。它甚至可以做一些更高级的事情,例如时间相关的整形。文档嵌入在脚本中,这解释了为什么您找不到 README。

Chronox 简易整形脚本 (站点)

Stephan Mueller (smueller@chronox.de) 编写了两个有用的脚本,“limit.conn”和“shaper”。第一个脚本允许您轻松地限制单个下载会话,如下所示

# limit.conn -s SERVERIP -p SERVERPORT -l LIMIT

它适用于 Linux 2.2 和 2.4/2.5。

第二个脚本更复杂,可以用于基于 iptables 规则创建许多不同的队列,这些规则用于标记然后进行整形的包。

虚拟路由器冗余协议实现 (站点)

这纯粹是为了冗余。两台拥有各自 IP 地址和 MAC 地址的机器一起创建第三个虚拟 IP 地址和 MAC 地址。最初纯粹是为了需要恒定 MAC 地址的路由器而设计的,它也适用于其他服务器。

这种方法的优点是配置非常简单。无需内核编译或补丁,全部都在用户空间完成。

只需在参与服务的所有机器上运行它
# vrrpd -i eth0 -v 50 10.0.0.22

您就可以开始工作了!10.0.0.22 现在由您的服务器之一承载,可能是第一个运行 vrrp 守护程序的服务器。现在断开该计算机与网络的连接,其他计算机之一将非常迅速地接管 10.0.0.22 地址以及 MAC 地址。

我在这里尝试过,并在 1 分钟内启动并运行。由于某些奇怪的原因,它决定丢弃我的默认网关,但 -n 标志阻止了这种情况。

这是一个“实时”故障转移

64 bytes from 10.0.0.22: icmp_seq=3 ttl=255 time=0.2 ms
64 bytes from 10.0.0.22: icmp_seq=4 ttl=255 time=0.2 ms
64 bytes from 10.0.0.22: icmp_seq=5 ttl=255 time=16.8 ms
64 bytes from 10.0.0.22: icmp_seq=6 ttl=255 time=1.8 ms
64 bytes from 10.0.0.22: icmp_seq=7 ttl=255 time=1.7 ms

没有丢失 *一个* ping 数据包!就在数据包 4 之后,我断开了我的 P200 与网络的连接,而我的 486 接管了,您可以从更高的延迟中看到这一点。