0x00 前言

由于某些特殊的原因,你可能需要在 Windows 上配置多个 L2TP IPSec VPN,由于各服务提供商使用的加密不可能完全一样,这就导致 Windows 默认的加密方式不能正确连接 VPN 服务,这时候就需要定义各个服务提供商的加密参数了。
可能有些人觉得 Windows 太智障,实现起来麻烦,会变换思路。其实 Windows 实现上述需求也挺简单的,几条命令就可以了,只是 Windows 提供的图形化操作界面(Windows 高级防火墙)没有实现部分命令行才能实现的功能罢了。
本文就来讲解下如何使用 Windows 命令行配置多个 IPSec 策略。

0x01 添加 L2TP over IPSec 客户端

这部分操作太简单了,和添加 PPTP VPN 客户端一样的操作,只是多了一步添加预共享密钥或者证书的操作。
windows l2tp/ipsec 客户端

0x02 添加 VPN 主模式加密规则

何谓主模式

主模式其实就是所谓的 第一阶段 Phase1 ,该阶段让 IKE 对等体彼此验证对方并确定会话密钥,这个阶段用 DH 进行密钥交换,创建完 IKE SA 后,所有后续的协商都将通过加密和完整性检查来保护。
Phase1 帮助在对等体之间创建了一条安全通道,使后面的 phase 2 过程协商受到安全保护。

命令行添加对等体 Phase1 加密参数

本文的 L2TP/IPSec 服务器基于 MikroTik(即ROS,RouterOS) 6.40.5 搭建,对等体阶段协商参数均按照 MikroTik 上的设置进行配置,其他系统请自行按照对应参数修改。关于 MikroTik 服务端的配置可以查看我的另外一篇博文:MikroTik L2TP over ipsec Server

Win 10 默认的主模式参数如下:

C:\WINDOWS\system32>netsh adv show global mainmode

全局 设置:
----------------------------------------------------------------------
KeyLifetime                           480min,0sess
SecMethods                            DHGroup2-AES128-SHA1,DHGroup2-3DES-SHA1
ForceDH                               No
确定。

所以,如果你的 L2TP IPSec 服务端第一阶段支持如上规则,第一阶段便可顺利协商完成。为了实验其他规则,我们服务端(MikroTik)使用的参数如下:

[admin@MikroTik] > ip ipsec peer print
1   R ;;;L2TP                  
       address=0.0.0.0/0 passive=yes auth-method=pre-shared-key secret="aaaaaa" 
       generate-policy=port-strict policy-template-group=default 
       exchange-mode=main-l2tp send-initial-contact=yes nat-traversal=yes 
       proposal-check=obey hash-algorithm=md5 
       enc-algorithm=3des dh-group=modp1024 
       lifetime=1d dpd-interval=2m dpd-maximum-failures=5 

Win 系统上可理解如上参数为: 完整性检测方法 MD5 ,加密方式 3des,预共享密钥 aaaaaa ,生产环境不建议使用如上参数,因为不够安全,下面我们为对等端添加一条 mainmode 规则:

C:\WINDOWS\system32>netsh adv ma a r name="MD5-3DES" description="mainmode for testing Mikrotik L2TP/IPSEC" auth1=computerpsk auth1psk="aaaaaa"  Mmsecmethods=dhgroup2:3des-md5 endpoint2=192.168.1.1
C:\WINDOWS\system32>netsh adv ma show rule name=all verbose

规则名称:                             MD5-3DES
----------------------------------------------------------------------
描述:                                 mainmode for testing Mikrotik L2TP/IPSEC
已启用:                               是
配置文件:                             域,专用,公用
终结点1:                              任何
终结点2:                              192.168.1.1/32
Auth1:                                ComputerPSK
Auth1PSK:                             aaaaaa
SecMethods:                           DHGroup2-3DES-MD5
ForceDH:                              否
KeyLifetime:                          480min,0sess
规则源:                          本地设置
确定。

netsh 命令行可支持命令缩写,adv = advfirewall,ma = mainmode, a = add, r=rule

参数解释:
微软知识库关于主模式的详细解释:Netsh AdvFirewall MainMode Commands

  • auth1: 指定在 IPsec 协商期间为主模式首次身份验证提供的方法,可以使用多个值,本文使用预共享密钥,所以此处值应包含 computerpsk
  • auth1psk: 就是预共享密钥
  • Mmsecmethods:指定与对等端在 IPSec 协商阶段使用的 DHGROUP,完整性检查和加密协议,具体支持的参数可用 help 指令查看帮助文档;
  • endpoint2:就是对等端 IP,在本文中就是 L2TP 服务器的IP 。

此时,登录 VPN ,第一阶段就可以协商完成了。在 Win 上,可以在 Windows 高级防火墙 窗口查看已建立的连接。
第一阶段协商完成

0x03 添加 VPN 快速模式加密规则

何谓"快速模式"

快速模式就是第二阶段 Phase2,协商IPSEC SA使用的安全参数,创建IPSEC SA,使用AH或ESP来加密IP数据流。

命令行添加对等体 Phase2 加密参数

参数的取值,应关注对等体(也就是 VPN 服务端第二阶段的参数),本文中环境如下:

[admin@MikroTik] > /ip ipsec proposal print 
Flags: X - disabled, * - default 
 0  * name="default" auth-algorithms=md5 enc-algorithms=3des lifetime=30m 
      pfs-group=modp1024

windows添加快速模式规则

C:\Users\Administrator>netsh adv con add rule name="MD5-3DES" endpoint1=172.20.11.245 endpoint2=192.168.1.1 qmsecmethods=ESP:md5-3des+60min+20480kb action=requireinrequireout  port1=1701 port2=1701 protocol=udp
C:\Users\Administrator>netsh adv con show rule name="MD5-3DES"

规则名称:                             MD5-3DES
----------------------------------------------------------------------
已启用:                               是
配置文件:                             域,专用,公用
类型:                                 静态
模式:                                 传输
终结点1:                              172.20.11.245/32
终结点2:                              192.168.1.1/32
端口1:                                1701
端口2:                                1701
协议:                                 UDP
操作:                                 RequireInRequestOut
Auth1:                                ComputerKerb
MainModeSecMethods:                   DHGroup2-AES128-SHA1,DHGroup2-3DES-SHA1
QuickModeSecMethods:                  ESP:MD5-3DES+60min+20480kb
ApplyAuthorization:                   否
确定。

参数解释:
微软知识库关于快速模式的详细解释:Netsh AdvFirewall Consec Commands

  • endpoint1 本地 IP 地址,内网直接写内网 IP 即可;
  • endpoint2 对等端 IP ,本例中就是 VPN 服务器 IP;
  • qmsecmethods 快速模式安全规;
  • action requireinrequireout 即入站出站都需要验证;
  • port1 本地端口,默认1701;
  • port2 对等端端口,默认1701;
  • protocol 使用的协议,默认 UDP 。

连接成功后,同样可以在 windows 高级防火墙 窗口查看状态。
快速模式状态