我想使用采用拆分隧道和子网外寻址的 SSTP VPN 配置 Windows Server 2012 及其 Windows 7 和 Windows 8 VPN 客户端,但遇到了一个问题:RRAS 服务器不会从除其自身之外的任何机器向 VPN 客户端发送数据包。
我的 VPN 服务器在 Amazon 的“虚拟私有云”上运行,因此它只有一个 NIC,其 IP 地址位于与我所有其他 Amazon VPC 服务器共享的私有 RFC1918 网络上,并且有一个公共 IP,该公共 IP 将所有流量通过 NAT 转发到该私有地址(Amazon 称之为“弹性 IP”)。
我已经安装了 RRAS 并设置了 VPN。Amazon 上的私有子网是 172.16.0.0/17(我称之为“Amazon LAN”),但我希望所有 VPN 客户端都使用范围 10.128.0.0/20(我称之为“VPN LAN”)。
在我的亚马逊控制面板中,我完成了以下操作:
- 禁用 VPN 服务器的源/目标检查
- 在 10.128.0.0/20 池的路由表中添加了一个指向 VPN 服务器网络接口的条目。
在路由和远程访问 MMC 中,在服务器名称的属性菜单中,我完成了以下操作:
- 常规选项卡 -> IPv4 路由器(已选中),启用 LAN 和请求拨号路由
- 常规选项卡 -> IPv4 远程访问服务器(已选中)
- IPv4 选项卡 -> 启用 IPv4 转发(已选中)
- IPv4 选项卡 -> 静态地址池,并指定 10.128.0.1-10.128.15.154
在我的客户端和所有服务器上,我都确保防火墙明确允许 ICMP,或者完全禁用防火墙(当然,这不是永久计划)。
在客户端上,为了启用拆分隧道,我转到 VPN 连接的属性->网络->IPv4->属性->高级->IP 设置选项卡,取消选中“在远程网络上使用默认网关”,并选中“禁用基于类的路由添加”。
此时,我的客户端可以使用 Windows 7/8 VPN 客户端进行连接。它们被分配了来自 10.128.0.0/20 池的 IP,但由于它们没有自动设置任何路由,因此无法与远程网络通信。我可以设置到远程网络和 VPN 网络的路由,如下所示(在客户端上):
route add 172.16.0.0/17 <VPN IP ADDRESS>
route add 10.128.0.0/20 <VPN IP ADDRESS>
现在客户端可以 ping VPN 服务器的 VPN LAN 地址 (10.128.0.1),以及其 Amazon LAN 地址 (172.16.1.32)。但是,当尝试与 Amazon LAN 上的其他机器通信时,它会遇到一个问题:ping 不会收到回复。
因此,例如,如果客户端尝试 ping 一个我知道已启动的系统并响应 172.16.0.113 之类的 ping,它将看不到这些回复(它会显示“请求超时”)。VPN 服务器上的 Wireshark 确认它看到了来自客户端的 ping,甚至看到了从 172.16.0.113 发送的回复,但该回复显然从未返回到客户端。
此外,如果我从 172.16.0.113 ping 客户端的 VPN LAN 地址,VPN 服务器上的 Wireshark 会看到 ping,但看不到回复。
总结一下:
- VPN 服务器可以 ping 通 Amazon LAN(172.16.0.0/17)上的其他机器并接收回复,并且该网络上的其他机器也可以对其执行相同的操作。
- 在客户端按照前面描述的方式添加正确的路由后,VPN 客户端可以 ping 服务器的 Amazon LAN 地址并接收回复。
- 在客户端按照前面的方法添加正确的路由后,VPN 客户端可以 ping 通服务器的 VPN LAN 地址 10.128.0.1,VPN 服务器也可以 ping 通客户端在 10.128.0.0/20 范围内的 VPN LAN 地址。
- VPN 客户端可以向 Amazon LAN 上的计算机发送 ping,但当这些计算机发送回复时,它们会停留在 VPN 服务器上 - 它们不会被转发到客户端,从而导致客户端上出现“请求超时”消息。相反,当 Amazon LAN 上的计算机尝试 ping 客户端的 10.128.0.0/20 VPN LAN 地址时,VPN 服务器会看到 ping,但客户端永远不会看到,因此不会生成回复。
为什么 VPN 服务器不将数据包从 Amazon LAN 发送到 VPN LAN 上的客户端?它肯定可以与 VPN LAN 上的客户端通信,并且启用了路由,并且它愿意将数据包从 VPN LAN 路由到 Amazon LAN,但不能反向路由。我在这里遗漏了什么?
航线
以下是 VPN 客户端的路由表。客户端是运行 Windows 8 的 VirtualBox VM。它的 vbox 适配器的 IP 地址是 /24 上的 10.0.2.15。此客户端位于 NAT 后面(实际上,它位于双 NAT 后面,因为 vbox 适配器已 NAT 到我的本地网络,而本地网络又已 NAT 到互联网)。此路由表来自后手动添加至 10.128.0.0/20 和 172.16.0.0/17 的路由。
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.0.2.2 10.0.2.15 10
10.0.2.0 255.255.255.0 On-link 10.0.2.15 266
10.0.2.15 255.255.255.255 On-link 10.0.2.15 266
10.0.2.255 255.255.255.255 On-link 10.0.2.15 266
10.128.0.0 255.255.240.0 On-link 10.128.0.3 15
10.128.0.3 255.255.255.255 On-link 10.128.0.3 266
10.128.15.255 255.255.255.255 On-link 10.128.0.3 266
54.213.67.179 255.255.255.255 10.0.2.2 10.0.2.15 11
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
172.16.0.0 255.255.128.0 On-link 10.128.0.3 15
172.16.127.255 255.255.255.255 On-link 10.128.0.3 266
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 10.0.2.15 266
224.0.0.0 240.0.0.0 On-link 10.128.0.3 266
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 10.0.2.15 266
255.255.255.255 255.255.255.255 On-link 10.128.0.3 266
===========================================================================
Persistent Routes:
None
以下是运行 Windows Server 2012 的 RRAS 服务器的路由表。如上所述,此服务器也位于 NAT 后面。它只有一个 NIC。其私有 IP 地址为 172.16.1.32,位于 /23 上(它本身是更大的 /17 网络的一部分;我认为忽略 /23 之外的 /17 部分是公平的,因为 /23 上的其他机器也无法到达或被 VPN 客户端到达)。
VPN 虚拟适配器有自己的地址 10.128.0.1,该地址在客户端首次连接时自动分配。您看到的 10.128.0.1(到自身)和 10.128.0.2(到其唯一客户端)的路由也是在那时自动添加的。无需手动向 VPN 服务器添加任何路由。
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.0.1 172.16.1.32 10
10.128.0.1 255.255.255.255 On-link 10.128.0.1 286
10.128.0.2 255.255.255.255 10.128.0.2 10.128.0.1 31
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
169.254.169.250 255.255.255.255 172.16.0.1 172.16.1.32 10
169.254.169.251 255.255.255.255 172.16.0.1 172.16.1.32 10
169.254.169.254 255.255.255.255 172.16.0.1 172.16.1.32 10
172.16.0.0 255.255.254.0 On-link 172.16.1.32 11
172.16.1.32 255.255.255.255 On-link 172.16.1.32 266
172.16.1.255 255.255.255.255 On-link 172.16.1.32 266
172.16.2.0 255.255.254.0 172.168.0.1 172.16.1.32 11
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 172.16.1.32 266
224.0.0.0 240.0.0.0 On-link 10.128.0.1 286
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 172.16.1.32 266
255.255.255.255 255.255.255.255 On-link 10.128.0.1 286
===========================================================================
Persistent Routes:
None
以下是服务器私有网络上另一台机器的路由表,也运行 Server 2012。它有一个 NIC,其私有 IP 地址为 172.16.1.177 - 这意味着它与 VPN 服务器位于同一个 /23 上。(请注意,到 10.128.0.0/20 的路由是在网关上设置的,网关由 Amazon 控制,因此您不会在这里看到它。我已将正确的路由添加到 Amazon,VPN 服务器上的 Wireshark 可以看到数据包就是明证。)
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.0.1 172.16.1.177 10
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
169.254.169.250 255.255.255.255 172.16.0.1 172.16.1.177 10
169.254.169.251 255.255.255.255 172.16.0.1 172.16.1.177 10
169.254.169.254 255.255.255.255 172.16.0.1 172.16.1.177 10
172.16.0.0 255.255.254.0 On-link 172.16.1.177 266
172.16.1.177 255.255.255.255 On-link 172.16.1.177 266
172.16.1.255 255.255.255.255 On-link 172.16.1.177 266
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 172.16.1.177 266
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 172.16.1.177 266
===========================================================================
Persistent Routes:
None
以下是亚马逊控制台中的路线。我认为这些是正确的 - 交通是毕竟,它回到了 VPN 服务器,只是消失在里面 - 但如果有人想看到它们,它们就在这里。(亚马逊的做法有点奇怪。eni-2f3e8244 / i-77e26440
指的是 VPN 服务器上的 NIC,igw-d4bc27bc
指的是亚马逊控制的互联网 NAT/网关,我的所有实例都使用它来与互联网通信。)
10.128.0.0/20 eni-2f3e8244 / i-77e26440
172.16.0.0/17 local
0.0.0.0/0 igw-d4bc27bc
答案1
如果您在服务器上添加一条静态路由,告诉它们为了到达 10.128.0.0/20,它们必须通过 VPN 的服务器 LAN 地址,会怎么样?
route add 10.128.0.0 mask 255.255.240.0 a.b.c.d
将 abcd 替换为 VPN 服务器的 LAN 地址。
这至少可以排除亚马逊路由的问题。