通过基于 Linux 的软件 VPN 设备连接到 Windows Azure 虚拟网络

摘要

本文章将说明如何通过使用软件 VPN 设备,将本地办公室或站点连接到 Windows Azure 虚拟网络。在构建原型或在构建可以尽快利用云的“开发/测试”工作流时,软件 VPN 设备特别有用。事实上,即使在 Windows Azure 虚拟网络团队中,我们也采用这些技术在生产环境中自动测试(TiP, or Test in Production)代码,因为 Azure 平台每天都在不断地变化。本文章将说明如何在 Linux 上配置 OpenSwan VPN,以连接到在 Windows Azure 中托管的虚拟网络。

Linux

对于 Linux,我们将使用在 Windows Azure 内部创建的虚拟机连接到托管其他 Linux 虚拟机的虚拟网络,从而说明该连接过程。

第一步是创建托管 OpenSwan VPN 的新虚拟机。在本示例中,我使用带有特小CPU核的 Ubuntu 14.04 平台映像,但可以使用任何 Lunix 映像,您当然也可以使用自己的 VHD。

创建 VM 后,还要确保端口 500 和 4500(都是 UDP 端口)在防火墙的允许列表中,因为 IPSec 依赖于这些端口。在门户 UI 中,有两个有趣的项目需要注意,分别是公共虚拟 IP (VIP) 和内部 IP。我们可以使用这些属性为虚拟网络创建本地站点,然后将其连接到新的虚拟网络。记住这些属性后,继续并在门户的“网络”部分下创建新的本地站点。

单击门户中的“网络”选项卡,然后单击“本地网络”部分,开始添加本地网络过程:

将公共 IP 添加为 VPN 设备 IP,继续并将内部 IP 用作本地站点。您可以对本地站点使用单个 /32 子网;如要使场景更为逼真,可随意使用更大的子网,尽管在更宽的子网中不可以路由这些
IP,除非其与虚拟机处于相同的租户中。您还可以将某些额外网络接口添加到虚拟机,以说明如何使用更宽的子网。单击左侧的新建按钮,添加新的本地网络。

 

在本示例中,我们指定了一个 /24 子网,门户显示我们在此子网中拥有 255 个 IP,但仅托管“本地站点”的 VM 的内部 IP 地址可寻址,因为 Azure 的安全模式不允许数据包进入子网中的其他 VM。但您可以在子网中使用其自己的 IP 将多个网络接口添加到 VM,以模拟更多的 IP。此操作完成后,创建虚拟网络,确保配置虚拟网络,以便与刚刚创建的本地站点通信, 方法是: 选中复选框并保存更新。

这些步骤完成后,通过门户创建静态路由 (IKEv1) 网关。在创建网关的过程中(几分钟时间),我们可以开始使用正确的设置来配置 OpenSwan VPN 服务器,以便连接到 Windows Azure 虚拟网络。

配置 Linux VPN

第一步是使用类似 PuTTy 的安全外壳客户端,并连接到您的 Linux 虚拟机。连接完成后,您要实际安装 OpenSwan 软件并进行配置。可通过如下所示的“apt-get”命令(不同的Linux分发可能有所不同- 所以要选择适当的命令)来完成:

sudo apt-get install openswan

如果询问是否将 X509 证书用作认证方法,选择“否”,因为我们要使用共享秘钥来保护 IPSec 通道。如果安装成功,快速检查本地路径说明已安装名为 ipsec 的程序:

which ipsec

/usr/sbin/ipsec

您也可以根据需要从源代码安装 OpenSwan,但需要安装所有必要的构建工具(默认情况下不在 Azure 平台映像上安装)。

要配置 VPN 本身,我们需要编辑以下文件

sudo vi /etc/ipsec.conf

您将看到以下内容:

config setup

protostack=netkey

virtual_private=%v4:100.88.124.0/24

oe=off

# 不得设置调试选项来调试配置问题!

# plutodebug / klipsdebug =“all”、“none”或以下组合之一:

# "raw crypt parsing emitting control klips pfkey natt x509 dpd
private"

# 例如:

# plutodebug="control parsing"

# 此外:仅在开发人员要求时启用 plutodebug 或 klipsdebug

#

# 启用以按照对等机获取日志

# plutoopts="--perpeerlog"

#

# 启用内核转储(可能需要系统更改,例如 ulimit -C)

# 这是 abrtd 正常运行的必要条件

# 注意:不正确的 SElinux 策略可能会阻止 pluto 编写内核

dumpdir=/var/run/pluto/

 #

# 支持 NAT-TRAVERSAL,请参见 README.NAT-Traversal

nat_traversal=yes

# 通过添加 %v4:!a.b.c.0/24 排除用于服务器端的网络

# 美国境内为 T-Mobile,加拿大境内为 Rogers/Fido

plutostderrlog=~/swan.log

include /etc/ipsec.d/*.conf

更改配置使其如上所示,仅需更改为本地站点创建的子网,以匹配为本地站点步骤创建的内容,本示例中为 100.88.124.0/24。

如要查看本地 IPSec 日志,请取消 plutodebug 选项的注释。

您需要对连接特定设置做出如下更改:

 

conn vpn

         authby=secret

         auto=start

         type=tunnel

         left=100.88.124.18

         leftsubnet=100.88.124.0/24

         leftnexthop=%defaultroute

         right=137.117.136.XXX

  rightsubnet=192.168.0.0/20

         ike=3des-sha1-modp1024,aes128-sha1-modp1024

         esp=3des-sha1,aes128-sha1

         pfs=no

高亮部分表示门户中虚拟网络 UI 提供的两个属性(参见上方的屏幕截图)。第一个条目“right”表示所创建网关的 VIP,另一个条目“rightsubnet”表示创建时用于虚拟网络中的 IP 空间。您还必须在此处配置 crypto 设置,关闭完美转发保密 (PFS) 选项。还要注意到,配置语法将视所用 OpenSwan 版本的不同而各异。有关具体参考,请运行命令:

man ipsec.conf

最后一步是从 Azure 门户收集预共享密钥 (PSK),并在 Linux VM 上进行配置。复制 PSK,然后编辑以下文件:

sudo vi /etc/ipsec.secrets

具体的语法如下所示:LocalIP GatewayVIP :PSK ‘’Shared Key‘’

#include/etc/ipsec.d/*.secrets
100.88.124.18 137.117.136.230 : PSK "XXXXXXXXXXXXXXXXXXXX"

完成后,运行以下命令,将 PSK 加载到运行的 IPSec 服务,然后重新启动服务,再检查通道是否可用。

  1. sudo ipsec secrets
  2. sudo service ipsec restart
  3. sudo service ipsec status

IPsec running – pluto pid: 63791

pluto pid 63791

1 tunnels up

some eroutes exist

将通道连接到网关后,您将看到 Azure 门户 UI 更新反映了这一情况(UI 中的绿色链接),您可以将虚拟机部署到虚拟网络,开始对网络执行测试。

以下示例将 Linux VM 部署到虚拟网络,说明了从托管 OpenSwan 的计算机中我的本地网络子网 (100.88.124/24) 到 Azure (192.168.0.0/20) 中虚拟网络内部的虚拟机 (192.168.0.4) 的网络连接。

在 Azure 门户 UI 中使用时,您还可以看到数据是如何输入和输出虚拟网络的。

本文翻译自:https://azure.microsoft.com/blog/2014/05/22/connecting-to-a-windows-azure-virtual-network-via-a-linux-based-software-vpn-device/