集群计算中的 VPN 实施

作者:J.B. Kim

在完成集群的实施时,需要特别考虑一些因素。即使有了队列系统和并行环境,集群要作为多用户计算平台运行,还需要额外的服务。这些服务包括众所周知的网络服务 NFS、NIS 和 rsh。NFS 允许集群节点共享用户主目录以及队列系统和并行环境的安装文件。NIS 在主机的单一来源上为所有集群节点提供正确的文件和进程所有权。尽管这些服务是集群的重要组成部分,但这些服务也带来了许多漏洞。因此,让集群节点在开放网络上运行是不安全的。由于这些原因,计算集群节点通常驻留在私有网络上,用户通常只能通过防火墙网关访问。在大多数情况下,防火墙配置在主节点上,使用 ipchains 或 iptables。

让所有集群机器在同一个私有网络上需要它们连接到同一个交换机(或链接的交换机),因此,它们位于相同的邻近位置。这种情况在集群可扩展性方面造成了严重的限制。将不同地理位置的私有网络机器组合成一个联合集群是不可能的,因为私有网络无法通过标准 Internet 协议 (IP) 进行路由。

然而,合并不同位置的集群资源,以便来自不同部门的用户能够利用可用的计算节点是可能的。从理论上讲,合并集群不仅是可取的,而且是有利的,因为不同的集群不是位于一个地方,而是集中的。这种设置为集群提供了更高的可用性和效率,这样的提议非常有吸引力。但是,为了合并集群,所有机器都必须在公共网络上而不是私有网络上,因为每个集群上的每个节点都需要从其他节点直接访问。然而,如果我们这样做,可能会由于潜在的——不可避免的——安全漏洞而产生无法克服的问题。我们可以看到,为了满足可扩展性,我们严重损害了安全性,但在我们满足安全问题的地方,可扩展性变得非常有限。面对这样的问题,我们如何才能使集群具有可扩展性,同时又在集群网络上建立坚如磐石的安全性?虚拟专用网络 (VPN) 应运而生。

VPN 通常被誉为各种应用中最前沿、最具成本效益的解决方案之一,它们被广泛部署在安全、基础设施扩展和互联网络领域。VPN 为网络和基础设施增加了更多维度,因为它使私有网络能够以安全可靠的方式连接。私有网络通常无法从 Internet 访问,并且仅在限定的位置内联网。

然而,VPN 背后的技术改变了我们之前对私有网络的认知。通过有效使用 VPN,我们能够安全透明地连接以前不相关的私有网络或单个主机。能够连接私有网络开启了一系列新的可能性。借助 VPN,我们不再仅限于一个位置(单个私有网络)的资源。我们最终可以利用通过 VPN 网关连接的所有其他私有网络的资源和信息,而无需大幅更改我们网络中已有的内容。在许多情况下,VPN 是集成和更好地利用分散资源的宝贵解决方案。

在我们的环境中,VPN 在将位于不同私有网络上的高性能 Linux 计算集群合并为一个大型集群方面发挥着重要作用。VPN 凭借其通过现有开放网络透明地组合两个私有网络的能力,使我们能够无缝连接位于不同物理位置的两个不相关的集群。VPN 连接在网关之间创建了一个隧道,允许两个不同子网(例如,192.168.1.0/24 和 192.168.5.0/24)上的主机彼此视为在同一网络上。因此,我们能够在两个不同的私有网络上运行关键网络服务,如 NFS、NIS、rsh 和队列系统,而不会损害开放网络的安全性。此外,VPN 加密了通过已建立隧道传递的所有数据,使网络更安全,不易受到恶意利用。

VPN 不仅解决了之前讨论的安全问题,而且还为可扩展性打开了一扇新的大门。由于所有集群节点都可以驻留在私有网络中并通过 VPN 运行,因此可以更好地组织整个基础设施,并可以有效地管理 IP 地址,从而形成更具可扩展性和更清晰的网络。在 VPN 出现之前,为集群上的每个节点分配公共 IP 地址是一个悬而未决的问题,这限制了可以添加到集群的最大节点数。现在,借助 VPN,我们的集群可以更大规模地扩展,并以有组织的方式进行扩展。可以看出,我们已成功将 VPN 技术集成到我们的网络中,并解决了集群计算中可扩展性、可访问性和安全性的重要问题。

VPN 安装和配置

为了实施 VPN,我们使用了名为 FreeS/WAN 的免费 Linux VPN 软件。FreeS/WAN 可以从 www.freeswan.org 轻松下载,该网站上记录了关于安装和配置的全面指南。有关 VPN 信息的其他有用参考资料可以在最近的出版物中找到(参见“资源”)。

设置 VPN 网关的基本步骤如下:

  1. 获取 FreeS/WAN 源代码。

  2. 通过将其编译到内核中来安装 FreeS/WAN。

  3. 使用几乎相同的两个系统文件 ipsec.conf 和 ipsec.secrets 配置网关。

以下是示例 ipsec.conf,可在设置两个 VPN 网关时作为参考。此配置文件上每个字段的详细信息可以在 FreeS/WAN 在线文档或 ipsec 的手册页中找到。

示例 ipsec.conf

# basic configuration
config setup
        interfaces="ipsec0=eth0 ipsec1=eth1"    
        klipsdebug=none
        plutodebug=none
        plutoload=%search
        plutostart=%search
        uniqueids=yes
# defaults for subsequent connection descriptions
conn %default
        keyingtries=0
        authby=rsasig
# VPN connection from Lab to the machine room
conn Net-Net
        leftid=@cluster1-vpn.domainname.com
        left=128.9.232.78
        leftsubnet=192.168.5.0/24
        leftnexthop=128.9.232.1
        leftrsasigkey=0sAQ...
        rightid=@cluster2-vpn.domainname.com
        right=123.9.234.21
        rightsubnet=192.168.1.0/24
        rightnexthop=123.9.234.1
        rightrsasigkey=0sAQ...
        auto=add

在为包含两个不同集群的两个私有网络设置 VPN 网关后,我们必须采取必要的步骤以确保它们正常工作。这些步骤需要在两个私有网络的防火墙网关上修改路由表和 ipchains/iptables 规则。配置这些防火墙网关是必要的,因为它们也充当默认路由器,为其各自的子网运行网络地址转换 (NAT)。在图 1 中,我们可以看到私有网络中的所有机器都通过防火墙网关机器才能访问 Internet。

VPN Implementation in Cluster Computing

图 1

当这些私有网络节点尝试向外部发送数据包时,数据包首先到达默认网关以获取此网关的源地址(伪装),然后发送到 Internet。但是,使用默认网关不可能将数据包从一个私有网络发送到另一个私有网络。因此,我们需要使用 VPN 网关在私有网络之间直接通信。在每个默认网关上,我们设置了如下路由表:

default-gateway-1# /sbin/route add  net 192.168.1.0/24 gw 192.168.5.250
default-gateway-2# /sbin/route add  net 192.168.5.0/24 gw 192.168.1.250

其中 IP 地址 192.168.5.250 和 192.168.1.250 分别是私有子网上的 VPN 网关的 IP 地址。上述路由表修改指示默认网关在两个私有网络之间的主机尝试相互通信时将数据包重定向到 VPN 网关。图 2 显示了数据包如何遍历内部网络以在使用 VPN 网关之前到达 Internet。请注意,通过这些路由表条目,我们可以通过其私有 IP 地址直接引用位于其他私有网络上的远程计算机。

VPN Implementation in Cluster Computing

图 2

但是,我们需要确保通过默认网关路由到另一个私有子网的数据包不会被伪装。在 ipchains 规则中,我们指定 NAT 的规则,包括不伪装另一个私有网络的选项。由于两个私有网络的前两个字节(16 位)IP 地址相同,因此我们使用 CIDR(无类别域间路由)表示法来请求伪装到前两个字节中不包含 192.168. 的 IP 地址。

/sbin/ipchains -A forward -j MASQ -s 192.168.0.0/16 -d ! 192.168.0.0/16

或者,我们可以在每个节点上单独设置路由,但这需要额外的管理。因此,建议仅在默认网关上设置必要的路由,而不是在私有网络中的所有节点上设置。在对我们的网络进行这些更改后,我们能够使用 rsh、NFS 和 NIS 在两个私有网络之间建立连接。然后,我们通过 VPN 隧道远程挂载了队列系统的安装目录,并成功地通过 VPN 连接将机器添加到队列系统。图 3 显示了在实施 VPN 后两个独立的私有网络集群的拓扑结构。

VPN Implementation in Cluster Computing

图 3

结论

在我们通过 VPN 连接两个集群后,用户能够登录到第一个集群上的主机器,并通过队列系统在两个集群上提交作业。但是,对于高性能并行计算,我们建议在任一集群内运行并行作业,因为 VPN 和集群之间的 Internet 可能会降低消息传递通信的性能。总而言之,VPN 技术帮助我们解决了集群的可扩展性问题,而不会损害网络安全。

资源

构建 Linux 虚拟专用网络 (VPN),Oleg Kolesnikov 和 Brian Hatch,New Riders,2002 年 2 月。

FreeS/WAN 在线文档

“设置 VPN 网关”,Duncan Napier,《Linux Journal》,2002 年 1 月,第 93 期。

“管理 Linux IPSec 虚拟专用网络”,Duncan Napier,《Sys Admin》,2002 年 3 月,第 11 卷,第 3 期。

“IP VPN 服务”,Doug Allen,《Network Magazine》,2002 年 4 月,第 17 卷,第 4 期。

J.B. KimA.D. KotelnikovD.D. Knight 是罗格斯大学工程学院的成员。

加载 Disqus 评论