![具有单 NIC 的 Linux 路由器](https://linux22.com/image/548198/%E5%85%B7%E6%9C%89%E5%8D%95%20NIC%20%E7%9A%84%20Linux%20%E8%B7%AF%E7%94%B1%E5%99%A8.png)
假设我有一个小型网络,其中有以下几个 VLAN:
VLAN1 10.1.1.0/24
VLAN2 10.1.2.0/24
VLAN3 10.1.3.0/24
VLAN 路由由核心交换机负责,交换机不执行基于策略的路由(Dell PowerConnect 6224F),因此它只会对超出上述 VLAN 的所有其他流量采用默认路由(即 0.0.0.0/0)。
现在假设我有两个互联网连接,每个连接在 VLAN1 上都有一个 NAT DSL 调制解调器(例如 10.1.1.16 和 10.1.1.17),并且我希望 VLAN2 上的设备使用一个互联网连接,而 VLAN3 上的设备使用另一个互联网连接,我正在考虑使用 Linux 机来实现这一点。
假设我配置了一个 Linux 机箱(10.1.1.8),并将核心交换机上的默认网关配置为指向 10.1.1.8,那么是否可以在 Linux 机箱上配置 IPTables 来执行我的需要?
大多数关于设置基于 Linux 的路由器的操作指南都要求有两个网络接口,但我认为在这种情况下不需要这样做,因为这个 Linux 机器将只是与 DSL 调制解调器位于同一个 VLAN 上。(而且我目前没有多余的 NIC 可以放在我的服务器上),所以我的问题是(假设可能)有人可以为我提供一些指导,以创建一些 IP 表规则来解决这个问题吗?
我将来可能还希望所有 HTTP 连接都透明地进行代理,最好是通过共享的 squid 实例,但仍然将请求路由到适当的 DSL 连接。
编辑:
我不需要在 VLAN 之间路由,因为核心交换机已经可以很好地完成这项工作了。我可能没有正确理解术语,但如果我将核心交换机上 0.0.0.0/0 的默认路由配置为 10.1.1.8,我是否可以配置 Linux 机器根据数据包的来源将数据包重定向到正确的 DSL 网关?
我想要实现的一个例子...
VLAN3(10.1.3.123)上的 PC 向 1.2.3.4 发送一个数据包。PC 上的默认网关是 10.1.3.1(即 VLAN3 上的路由接口),然后交换机通过 10.1.1.1 将此数据包路由到 10.1.1.8(交换机配置为使用此 IP 作为 0.0.0.0/0 的下一跳)。然后 Linux 机器通过 DSL 调制解调器 10.1.1.17 路由/重定向该数据包,因为源 IP 在 VLAN 3(10.1.3.0/24)内。如果数据包来自 10.1.2.0/24,那么 Linux 机器将通过 10.1.1.16 路由/重定向
VLAN 1
(10.1.1.0/24)
10.1.1.16 (DSL1) ------+
|
10.1.1.17 (DSL2) ------+
|
10.1.1.8 (Linux) ------+
|
+-------------+
VLAN 2 -------| Core Switch |------- VLAN 3
(10.1.2.0/24) +-------------+ (10.1.2.0/24)
进一步编辑:
我想我没有很好地解释我在这里想要实现的目标,但是请稍微忍耐一下,因为我不是网络专家(以防万一您还没有发现这一点!)。
我不想在 Linux 机器上创建多个接口,因为我不想让它在 VLAN 之间进行任何路由,我只希望机器位于其中一个 VLAN(单个接口)上,并根据数据包的来源通过 DSL1 或 DSL2 转发(或路由?)数据包。如果 10.1.1.8 是我们网络上 0.0.0.0/0 的默认路由,那么肯定可以做到这一点?
答案1
您所提出的建议当然是可行的,事实上,这是一种非常常见的网络配置,即使用第 3 层交换机完成大部分内部路由并提供一些基本的访问控制,然后将更复杂的流量卸载到边缘/核心。
您的 Linux 边缘路由器需要了解交换机后面的所有子网 - 您可以使用静态路由来实现这一点,例如:
route add -net 10.1.1.0/16 gw <switch IP>
或者戴尔交换机(通过谷歌快速) 支持 RIP 和 OSPF,因此如果您使用 Quagga 或类似程序来接收广告,您可以让它自动将其路由广告到 Linux 机器。
您的客户端只需要配置其默认网关(其 VLAN 上的交换机接口)并在交换机上设置适当的 ACL 以允许其流量传到边缘。
不幸的是,我还没有在 Linux 上做过 PBR,所以不能给你任何神奇的规则,只能指出一个文章Google 发现 - 看起来相关。不过不要太纠结于多接口的事情,在 Linux 上通过创建别名 ( ifconfig eth0:25 <ipaddr>
) 或 VLAN ( ifconfig eth0.25 <ipaddr>
) 很容易将一个接口变成多个。
答案2
我认为您可以为您的网卡创建额外的网络地址 - 每个 VLAN 一个,然后用于route
创建静态路由。
答案3
对于大多数用途来说,Linux 机器上的每个 vlan 接口都将像“真实”接口一样工作,因此当您阅读教程时,只需在脑海中将“eth0”替换为“eth0.123”,将“eth1”替换为“eth0.456”即可。
我建议你禁用交换机中的所有路由功能。这似乎只会造成混乱和复杂性。
正如其他人所评论的那样,我同意不要将 VLAN 1 用于“实际流量”的建议。使用另一个 VLAN ID(有很多……)可以更清楚地表明端口已明确且有意地配置。