使用 NAT 和防火墙

网络连接的客户端和服务器通常没有用于通信的直接和开放路径。 数据包在终结点计算机上和网络上的中间计算机上筛选、路由、分析和转换。 网络地址转换(NAT)和防火墙是可以参与网络通信的中间应用程序的常见示例。

Windows Communication Foundation (WCF) 传输协议和消息交换模式 (MEP) 对于 NAT 和防火墙的存在反应不同。 本主题介绍 NAT 和防火墙如何在常见网络拓扑中运行。 提供了有关 WCF 传输和 MEP 的特定组合的建议,有助于使应用程序对网络上的 NAT 和防火墙更可靠。

NAT 如何影响通信

已创建 NAT,使多个计算机能够共享单个外部 IP 地址。 端口重新映射 NAT 将连接的内部 IP 地址和端口映射到具有新端口号的外部 IP 地址。 新的端口号允许 NAT 将返回流量与原始通信相关联。 许多家庭用户现在有一个 IP 地址,该地址仅可私下路由,并依赖于 NAT 来提供数据包的全局路由。

NAT 不提供安全边界。 但是,常见的 NAT 配置会阻止直接解决内部计算机的问题。 这不仅保护内部计算机免受某些不必要的连接,还使得编写必须异步将数据发送回客户端的服务器应用程序变得困难。 NAT 重写数据包中的地址,使其看起来像连接源自 NAT 计算机。 这会导致服务器在尝试打开与客户端的连接时失败。 如果服务器使用客户端的感知地址,则它会失败,因为无法公开路由客户端地址。 如果服务器使用 NAT 地址,则它无法连接,因为该计算机上没有应用程序正在侦听。

某些 NAT 支持配置转发规则,以允许外部计算机连接到特定的内部计算机。 配置转发规则的说明因不同 NAT 而异,不建议大多数应用程序要求最终用户更改其 NAT 配置。 许多最终用户不能或不想更改特定应用程序的 NAT 配置。

防火墙如何影响通信

防火墙是一种软件或硬件设备,它向通过的流量应用规则,以确定是允许还是拒绝通过。 可以将防火墙配置为检查传入和/或传出流量流。 防火墙为网络边缘或终结点主机上的网络提供安全边界。 业务用户传统上将其服务器保存在防火墙后面,以防止恶意攻击。 自 Windows XP 中引入个人防火墙以来,防火墙后面的家庭用户数量也大大增加。 这很可能是由于连接的某一端或两端都有一个用于检查数据包的防火墙。

防火墙在检查数据包的复杂性和功能方面存在很大差异。 简单的防火墙基于数据包中的源地址和目标地址和端口应用规则。 智能防火墙还可以检查数据包的内容以做出决策。 这些防火墙具有许多不同的配置,通常用于专用应用程序。

家庭用户防火墙的常见配置是禁止传入连接,除非之前已与该计算机建立传出连接。 业务用户防火墙的常见配置是禁止所有端口上的传入连接,但特定标识的组除外。 例如,防火墙禁止在端口 80 和 443 以外的所有端口上建立连接,以提供 HTTP 和 HTTPS 服务。 托管防火墙适用于家庭和企业用户,使计算机上的受信任用户或进程能够更改防火墙配置。 对于没有控制网络使用情况的公司策略的家庭用户,托管防火墙更为常见。

使用 Teredo

Teredo 是一种 IPv6 转换技术,可实现 NAT 后面的计算机的直接可寻址性。 Teredo 依赖于使用可公开和全局路由的服务器来推广潜在连接。 Teredo 服务器为应用程序客户端和服务器提供一个通用会议点,可在其中交换连接信息。 然后,计算机请求临时 Teredo 地址,数据包通过现有网络进行隧道传输。 在 WCF 中启用 Teredo 支持需要在操作系统中启用 IPv6 和 Teredo 支持。 Windows XP 和更高版本的作系统支持 Teredo。 默认情况下,Windows Vista 和更高版本的作系统支持 IPv6,并且仅要求用户启用 Teredo。 Windows XP SP2 和 Windows Server 2003 要求用户同时启用 IPv6 和 Teredo。 有关详细信息,请参阅 Teredo 概述

选择传输和消息交换模式

选择传输方式和消息交换模式(MEP)是一个包含三个步骤的过程:

  1. 分析终结点计算机的可寻址性。 企业服务器通常具有直接的可寻址性,而最终用户通常被 NAT 阻止其可寻址性。 如果这两个终结点都位于 NAT 后面(例如最终用户之间的点对点场景中),则可能需要 Teredo 等技术来提供地址解析能力。

  2. 分析终结点计算机的协议和端口限制。 企业服务器通常位于阻止许多端口的强防火墙后面。 但是,端口 80 经常开放以允许 HTTP 流量,端口 443 开放以允许 HTTPS 流量。 最终用户不太可能有端口限制,但可能位于仅允许传出连接的防火墙后面。 某些防火墙允许终结点上的应用程序进行管理,以便有选择地打开连接。

  3. 计算网络的可寻址性和端口限制所允许的传输协议和 MEP。

客户端-服务器应用程序的一种常见拓扑是让位于 NAT 后面且没有 Teredo 的客户端位于仅出站防火墙的后面,让可直接寻址的服务器位于强大防火墙后面。 在此方案中,使用 duplex MEP 的 TCP 传输和具有 request-reply MEP 的 HTTP 传输工作良好。 对等应用程序的一种常见拓扑是让两个终结点都位于 NAT 和防火墙的后面。 在此方案中,在网络拓扑未知的情况下,请考虑以下建议:

  • 不要使用双向传输协议。 双传输会打开更多连接,从而减少成功连接的可能性。

  • 支持通过起始连接建立后备通道。 使用反向通道(例如,在双工 TCP 中)会打开较少的连接,从而提高成功连接的可能性。

  • 采用可访问的服务来注册终结点或中继通信。 使用全局可访问的连接服务(例如 Teredo 服务器)可以大大增加在网络拓扑限制性或未知时成功连接的机会。

下表分析了 WCF 中的单向、请求-答复和双工 MEP,以及标准 TCP、使用 Teredo 的 TCP、标准和双向 HTTP 传输协议。

可寻址性 服务器直达 使用 NAT 遍历的服务器直达 服务器 NAT 使用 NAT 遍历的服务器 NAT
客户端直达 任何传输协议和 MEP 任何传输协议和 MEP 不支持。 不支持。
使用 NAT 遍历的客户端直达 任何传输协议和 MEP。 任何传输协议和 MEP。 不支持。 使用 Teredo 的 TCP 和任何 MEP。 Windows Vista 具有计算机范围的配置选项,用于支持 Teredo 的 HTTP。
客户端 NAT 任何非双向传输协议和 MEP。 双工 MEP 需要 TCP 传输协议。 任何非双向传输协议和 MEP。 双工 MEP 需要 TCP 传输协议。 不支持。 不支持。
使用 NAT 遍历的客户端 NAT 任何非双向传输协议和 MEP。 双工 MEP 需要 TCP 传输协议。 除双向 HTTP 以外的所有传输协议和任何 MEP。 双工 MEP 需要 TCP 传输协议。 双 TCP 传输需要使用 Teredo。 Windows Vista 具有计算机范围的配置选项,用于支持 Teredo 的 HTTP。 不支持。 使用 Teredo 的 TCP 和任何 MEP。 Windows Vista 具有计算机范围的配置选项,用于支持 Teredo 的 HTTP。
防火墙限制 服务器打开 具有托管防火墙的服务器 具有仅 HTTP 防火墙的服务器 具有仅限出站防火墙的服务器
客户端开放 任何传输协议和 MEP。 任何传输协议和 MEP。 任何 HTTP 传输协议和 MEP。 不支持。
具有托管防火墙的客户端 任何非双向传输协议和 MEP。 双工 MEP 需要 TCP 传输协议。 任何非双向传输协议和 MEP。 双工 MEP 需要 TCP 传输协议。 任何 HTTP 传输协议和 MEP。 不支持。
具有仅限 HTTP 的防火墙的客户端 任何 HTTP 传输协议和 MEP。 任何 HTTP 传输协议和 MEP。 任何 HTTP 传输协议和 MEP。 不支持。
具有仅限出站防火墙的客户端 任何非双向传输协议和 MEP。 双工 MEP 需要 TCP 传输协议。 任何非双向传输协议和 MEP。 双工 MEP 需要 TCP 传输协议。 任何 HTTP 传输协议和任何非双工 MEP。 不支持。