源网络地址转换 (SNAT)
概述
源网络地址转换(source-nat 或 SNAT)允许来自专用网络的流量进入互联网。在专用网络上启动的虚拟机可以通过能够执行 SNAT 的网关访问 Internet。网关在公共网络上有一个分支,作为 SNAT 的一部分,它会用自己的公共端 IP 替换始发数据包的源 IP。作为 SNAT 的一部分,源端口也进行了更新,以便多个 VM 可以通过单个网关公共 IP 访问公共网络。
下图显示了专用子网为 10.1.1.0/24 的虚拟网络。虚拟网络的默认路由指向 SNAT 网关。网关替换了 10.1.1.0/24 中的源 ip,并使用其公共地址 172.21.1.1 传输传出数据包。要维护唯一的 NAT 会话,还需要更换流量的源端口。
的虚拟网络
充当数据中心网关的 MX 系列路由器上的 SNAT
从 Contrail 网络 2011.L1 版开始,当 MX 系列路由器处于DC-Gateway交换矩阵角色时,可以使用 MS-MPC 线卡在 MX 系列路由器上启用 SNAT。有关支持DC-Gateway或任何其他交换矩阵角色的 MX 系列路由器列表,请参阅 Contrail 网络支持的硬件平台和相关角色和节点配置文件。
在 MX 系列路由器上启用 SNAT 后,它可用于转换裸机服务器上物理接口和虚拟机上虚拟接口的源 IP 地址。SNAT 只能转换离开交换矩阵的源流量的 IP 地址;它不能用于转换进入交换矩阵的流量的 IP 地址。
有关 MX 系列路由器上的 SNAT 的更多信息,请参阅 网络地址转换概述。
如何使用 Contrail 命令在 MX 系列路由器上启用 SNAT
要通过 Contrail 命令在 MX 系列路由器上启用 SNAT,请执行以下作:
适用于路由器的 Neutron API
OpenStack 通过其用于路由器的 Neutron API 支持 SNAT 网关的实施。可以在路由器的外部网关上启用或禁用 SNAT 标志。默认值为 True(启用)。
Tungsten Fabric 插件支持路由器的 Neutron API,并在 API 服务器中创建相关的服务模板和服务实例对象。Tungsten Fabric 中的服务调度程序会在随机选择的虚拟路由器上实例化网关。Tungsten Fabric 使用网络命名空间来支持此功能。
配置示例:用于 Contrail 的 SNAT
通过 Neutron API 调用在 Tungsten Fabric 上启用 SNAT 功能。
以下配置示例说明如何创建测试网络和公共网络,以允许测试网络通过 SNAT 网关到达公共域。
网络名称空间
设置外部网关是 Tungsten Fabric 为 SNAT 设置 Linux 网络命名空间的触发器。
可以通过发出以下 Neutron 命令来清除网络命名空间:
neutron router-gateway-clear r1
SNAT 和安全组
当逻辑路由器被启用为支持 SNAT 时,默认安全组会自动应用于左侧的 SNAT 接口。当互连的虚拟机使用默认安全组时,默认安全组的这种自动应用允许虚拟机发送和接收流量,而无需额外的用户配置。但是,当虚拟机连接到未使用默认安全组的虚拟机时,需要其他配置才能发送和接收流量。
如果要将虚拟机连接到未使用默认安全组的虚拟机,则必须进行以下配置更新之一,以允许虚拟机传递流量:
-
更新默认安全组以添加允许 VM 流量的规则。
-
将规则更新到 VM 安全组,以允许来自默认安全组的流量。
-
将相同的安全组应用于 VM 和 SNAT 左侧接口。
有关在使用 Contrail 网络的环境中配置安全组的信息,请参阅 将安全组与虚拟机实例结合使用。
使用 Web UI 配置具有 SNAT 的路由器
您可以使用 Contrail 用户界面为 SNAT 配置路由器,并检查路由器的 SNAT 状态。
要为路由器启用 SNAT,请转到 配置>网络>路由器。在路由器列表中,选择应为其启用 SNAT 的路由器。单击“编辑齿轮”以显示 “编辑路由器 ”窗口。单击 SNAT 复选框以在路由器上启用 SNAT。
下面显示了已 启用 SNAT 的路由器。
为路由器 启用 SNAT 后,可以通过选择配置 >网络>路由器来查看配置。在路由器列表中,单击打开感兴趣的路由器。在该路由器的功能列表中,将列出 SNAT 的状态。下面显示了列表中已打开的路由器。路由器的状态显示 SNAT 已 启用。
的路由器状态
您可以通过查看实例控制台来查看具有 SNAT 的路由器的实时状态,如下图所示。
使用 Web UI 配置分布式 SNAT
分布式 SNAT 功能允许虚拟机使用现有的转发基础架构与 IP 交换矩阵网络进行通信,以实现计算节点连接。此功能是通过将计算节点的 IP 地址作为公共地址的虚拟机流量的端口地址转换来实现的。
支持以下分布式 SNAT 用例:
-
启用了分布式 SNAT 的虚拟网络可以与 IP 交换矩阵网络通信。会话必须从虚拟机启动。不支持从外部网络发起的会话。
分布式 SNAT 仅支持 TCP 和 UDP,您可以为这两种协议配置离散端口范围。
端口池用于分布式 SNAT。要创建端口池,请转到配置 >基础架构>全局配置。下面显示了用于端口地址转换的端口范围示例。
若要使用分布式 SNAT,必须在虚拟网络上启用 SNAT。若要在虚拟网络上启用 SNAT,请转到配置 >网络>网络。下面显示了在“高级选项”下启用了 SNAT 的虚拟网络。