Open vSwitch(OVS)是许多与虚拟化和云相关的重要产品和项目的核心组件(考虑到OpenStack Quantum,CloudStack,XenServer和Nicira NVP都利用了OVS)。之前我已经讨论过如何在OVS中使用VLAN(在这里也是)以及如何在OVS中使用链路聚合。在本文中,我将探讨在层3上使用OVS进行VLAN间路由的问题。
在我看来,谈论使用OVS进行第3层路由实际上有点用词不当。(据我所能确定的那样)实际上,OVS依赖于Linux内核中内置的路由功能,并且不执行路由功能本身。
要将OVS配置为进行VLAN间路由,您需要执行以下步骤:
-
为每个VLAN配置OVS。
-
配置VLAN接口。
-
在Linux内核中启用IP路由。
让我们更详细地看一下每个步骤。
为VLAN配置OVS
这是我已经写过的,因此,请参考以下文章之一以获取更多信息:
完成此步骤后,就可以配置VLAN接口了。
配置VLAN接口
您可以将这些VLAN接口视为多层物理交换机上的交换虚拟接口(SVI)或桥接虚拟接口(BVI)的等效项。例如,如果您熟悉Cisco交换机,则可以将它们视为interface vlan
等效的交换机。在Brocade FastIron交换机系列中,这些interface ve
等效。
要在OVS中创建VLAN接口,请使用以下命令:
ovs-vsctl add-port <bridge name> <port name> -- set interface <port name> type=internal
请注意,据我所知,VLAN接口需要连接到该特定VLAN的相应OVS虚假网桥(更多信息,请参见)。
我(尚未)找到有关此命令背后的理论(或原理)的详细讨论,但是我可以告诉您,它的作用是启用“伪”设备,该设备可以在Linux中配置为第3层接口。 。(换句话说,您可以为其分配IP地址。)这与我在关于跨OVS运行主机管理的文章中描述的技术相同。
您需要针对所需的每个VLAN接口(即,应通过此启用了OVS的主机进行路由的每个VLAN)重复此过程。
创建VLAN接口后,您需要在Linux中进行配置。确切的过程在Linux发行版之间有所不同。在Ubuntu(我通常使用)中,这意味着在中创建适当的配置节/etc/network/interfaces
。
假设您要在两个VLAN(VLAN 100和VLAN 200)之间进行路由。如果OVS上的VLAN接口被命名为vlan100
和vlan200
,则可以配置/etc/network/interfaces
为包括以下内容:
auto vlan100
iface vlan100 inet static
address 192.168.100.1
netmask 255.255.255.0
auto vlan200
iface vlan200 inet static
address 192.168.200.1
netmask 255.255.255.0
当然,这些只是示例。您需要为每个涉及的VLAN提供适当的IP地址。
创建和配置VLAN接口后,就可以进行最后一步了-在Linux内核中启用IP路由(或IP转发)。
在Linux内核中启用IP转发
万维网上的许多站点对此文件进行了充分的记录。这只是一个例子。对于那些不想打扰另一个网站的人,这里有一个快速的总结:
-
要临时启用IP转发,请使用
sysctl -w net.ipv4.ip_forward=1
。 -
要永久启用IP转发,编辑
sysctl.conf
,这样net.ipv4.ip_forward
设置为1。
启用IP转发后,您应该能够将IP流量从一个VLAN通过OVS VLAN接口路由到另一个VLAN。您需要将设备的默认网关设置为OVS VLAN接口上的IP地址,或者需要手动操作路由表。这两种技术的操作步骤将根据您的操作系统而有所不同。我使用Windows Server来宾域对其进行了测试,该域在一个VLAN上运行,并配置为将OVS VLAN接口用作默认网关,并ping
与另一个VLAN上的另一台设备进行通信。最大的挑战是确保路由表正确,以便每个设备都指向适当的默认网关(该网关应对应于分配给匹配的OVS VLAN接口的IP地址)。
随时在下面的评论中发布任何问题,更正或澄清。始终欢迎您提供反馈和任何有礼貌的意见。
翻译自:https://blog.scottlowe.org/2012/10/31/layer-3-routing-with-open-vswitch/
网友评论