源网络地址转换 (SNAT)
概述
源网络地址转换(源 nat 或 SNAT)允许来自专用网络的流量流向互联网。在专用网络上启动的虚拟机可以通过能够执行 SNAT 的网关访问互联网。网关在公共网络上有一个臂,作为 SNAT 的一部分,它用自己的公共端 IP 替换始发数据包的源 IP。作为 SNAT 的一部分,源端口也会更新,以便多个虚拟机可以通过单个网关公共 IP 访问公共网络。
下图显示了私有子网为 10.1.1.0/24 的虚拟网络。虚拟网络的默认路由点到 SNAT 网关。网关取代 10.1.1.0/24 中的 source-ip,并对其传出数据包使用公共地址 172.21.1.1。为了保持独特的 NAT 会话,还需要更换流量的源端口。

用作数据中心网关的 MX 系列路由器上的 SNAT
从 Contrail 网络 2011.L1 版开始,当 MX 系列路由器发挥交换矩阵作用时,您可以使用 MS-MPC 线卡在 MX 系列路由器DC-Gateway上启用 SNAT。有关支持DC-Gateway该或任何其他交换矩阵角色的 MX 系列路由器列表,请参阅 Contrail 网络支持的硬件平台和相关角色和节点配置文件。
在 MX 系列路由器上启用 SNAT 后,它可用于转换裸机服务器上的物理接口和虚拟机上的虚拟接口的源 IP 地址。SNAT 只能转换离开交换矩阵的源流量的 IP 地址;它不能用于转换进入交换矩阵的流量的 IP 地址。
有关 MX 系列路由器上的 SNAT 的更多信息,请参阅 网络地址转换概述。
如何使用 Contrail 命令在 MX 系列路由器上启用 SNAT
要通过 Contrail Command 在 MX 系列路由器上启用 SNAT:
适用于路由器的 Neutron API
OpenStack 通过其路由器 Neutron API 支持 SNAT 网关实施。可以在路由器的外部网关上启用或禁用 SNAT 标志。默认值为 True(已启用)。
Tungsten Fabric 插件支持路由器的 Neutron API,并在 API 服务器中创建相关的服务模板和服务实例对象。Tungsten Fabric 中的服务调度器将网关实例化为随机选择的虚拟路由器。Tungsten Fabric 使用网络命名空间来支持此功能。
配置示例:适用于 Contrail 的 SNAT
SNAT 功能通过 Neutron API 调用在 Tungsten Fabric 上启用。
以下配置示例说明如何创建测试网络和公共网络,使测试网络能够通过 SNAT 网关访问公共域。
网络名称空间
设置外部网关是 Tungsten Fabric 为 SNAT 设置 Linux 网络命名空间的触发因素。
通过发出以下 Neutron 命令,可以清除网络命名空间:
neutron router-gateway-clear r1
SNAT 和安全组
启用逻辑路由器以支持 SNAT 后,会自动将默认安全组应用于左侧 SNAT 接口。当互连的虚拟机使用默认安全组时,这种默认安全组的自动应用允许虚拟机发送和接收流量,而无需额外的用户配置。但是,当虚拟机连接到不使用默认安全组的虚拟机时,需要进行其他配置来发送和接收流量。
如果要将虚拟机连接到未使用默认安全组的虚拟机,则必须进行以下配置更新之一,以允许虚拟机传递流量:
更新默认安全组以添加允许虚拟机流量的规则。
将规则更新到 VM 安全组,以允许来自默认安全组的流量。
将同一安全组应用于虚拟机和 SNAT 左接口。
有关在使用 Contrail 网络的环境中配置安全组的信息,请参阅 将安全组用于虚拟机实例。
使用 Web UI 通过 SNAT 配置路由器
您可以使用 Contrail 用户界面为 SNAT 配置路由器,并检查路由器的 SNAT 状态。
要为路由器启用 SNAT,请转至 配置>网络>路由器。在路由器列表中,选择应启用 SNAT 的路由器。单击编辑 Cog 以显示 编辑路由器 窗口。单击 SNAT 的复选框,在路由器上启用 SNAT。
下面 显示了已启用 SNAT 的路由器。

为 SNAT 启用路由器后,可以选择“配置>网络>路由器”来查看配置。在路由器列表中,单击打开感兴趣的路由器。该路由器的功能列表中列出了 SNAT 的状态。下面显示已在列表中打开的路由器。路由器的状态表示 SNAT 已启用。

您可以通过查看实例控制台来查看带有 SNAT 的路由器的实时状态,如下所示。

使用 Web UI 配置分布式 SNAT
分布式 SNAT 功能允许虚拟机使用现有转发基础架构与 IP 交换矩阵网络通信,以实现计算节点连接。此功能可通过将计算节点的 IP 地址用作公共地址对虚拟机流量进行端口地址转换来实现。
支持以下分布式 SNAT 用例:
启用分布式 SNAT 的虚拟网络可以与 IP 交换矩阵网络通信。会话必须从虚拟机启动。不支持从外部网络启动的会话。
分布式 SNAT 仅适用于 TCP 和 UDP,您可以为这两种协议配置离散端口范围。
端口池用于分布式 SNAT。要创建端口池,请转至 配置>基础架构>全局 Config。下面显示了用于端口地址转换的端口范围示例。

要使用分布式 SNAT,必须在虚拟网络上启用 SNAT。要对虚拟网络启用 SNAT,请转至 配置>网络>网络。下面显示了在“高级选项”下已为其启用 SNAT 的虚拟网络。
