关于这个问题!
网上一顿文章瞎叽霸写的都是些什么叽霸玩意!
如果你是自己搭建的IPSec L2TP服务器,而且你又在其他地方折腾了半天Windows连接L2TP的问题,那么这篇文章适合你!
今天,我们来好好说说Windows下的L2TP over IPSec的各种问题。
目前看来,默认配置下,几乎所有的windows都无法顺利连接L2TP over ipsec,解决Windows连接L2TP有两种方案,
- 方案一:直接禁用ipsec协商
- 方案二:允许L2TP唤醒ipsec,同时修改ipsec协商参数
网上大部分文章给的都是基于方案一,然后再歪七扭八整了一堆注册表修改项,只要你看到下面这个截图,基本就是直接禁用ipsec的套路了。
方案一不能说不对,很多网络小白确实靠着这个办法顺利连上了。但是:
**这种办法连接的L2TP是没有经过ipsec加密保护的哟,客户端和服务器是直接使用1701的L2TP端口通信的哟!!!!
明文传输数据哟
!!!!!!!!**
如何检验流量有没有加密呢?防火墙不放通1701,仅放通500和4500 UDP两个IPSec端口,还能建联的,才是真的经过了ipsec加密。
好了,吐槽完了,我们开始正式说一下从服务端,到windows客户端如何配置:
一、防火墙配置
注意,我们绝不在公网侧直接放通UDP 1701端口。
我们希望的是:
- 公网流量先经过IPSec加密
- 然后在IPSec隧道侧承接L2TP的UDP 1701端口的流量
- 让L2TP流量封装在IPSec隧道内,实现真正的L2TP over IPSec的配置。
因此我们的配置类似于下面的截图:
1、WAN口仅放行500+4500 UDP流量
2、IPsec虚接口放行L2TP UDP 1701流量
二、服务器端IPSec协商参数
从Microsoft官方找到了唯一的一篇有关Windows的IPSec安全提议的文档。
Default encryption settings for the Microsoft L2TP/IPSec Client
简单总结下来,服务端配置的安全提议
- 阶段一提议至少应该包含以下组合:3DES-SHA1-DH组2
- 阶段二至少应该包含3DES加密算法和SHA1散列算法
- 封装方式使用传输模式
实测Windows连接后,确实使用此提议的组合进行连接。
同时为了更好的兼容MacOS、iOS和安卓,推荐多搞一点各种提议的组合,逗老师我测试了一下,下面这种组合在各种系统连接时,都可以做到最大兼容。
三、Windows端修改注册表
1、允许IPSec穿越NAT
说明:
正常的IPSec使用500 UDP端口进行通信,但是因为IPSec建联时需要比较IKE包内host id字段与IP包头实际IP,所以需要引入后续版本的NAT穿越技术,由500初次建联,之后交由4500端口进行NAT穿越建联。
默认windows不支持NAT穿越,配置AssumeUDPEncapsulationContextOnSendRule字段用于允许IPSec使用UDP 4500端口进行NAT穿越。
配置方式:
开始,管理员身份运行CMD
复制粘贴下面命令
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 0x2 /f
或者手动进入regedit,找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
新建一个 dword类型的键
AssumeUDPEncapsulationContextOnSendRule
值为2。
2、允许L2TP唤醒IPSec
说明:
这个配置不一定会影响建立连接,但是可能会影响休眠后重新唤醒IPSec加密。
配置:
开始,管理员身份运行CMD
复制粘贴下面命令
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters /v AllowL2TPWeakCrypto /t REG_DWORD /d 0x1 /f
或者手动进入regedit,找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters
新建一个 dword类型的键
AllowL2TPWeakCrypto
值为1。
3、允许IPSec运行
说明:
我估计大家在看到这篇文章之前,肯定已经照着网上的各种文章搞了一堆乱七八糟的东西了。
大部分文章中都会引导禁用IPSec运行,但这是不对的呀!瞎鸡儿整。
恢复ProhibitIpSec配置
配置:
开始,管理员身份运行CMD
复制粘贴下面命令
REG ADD HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters /v ProhibitIpSec /t REG_DWORD /d 0x0 /f
或者手动进入regedit,找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters
删除
ProhibitIpSec
键值。
4、神仙操作,禁用Xbox网络服务
这是redit上一个神仙网友发现的操作,玄学操作,但是有用。
进入【服务】,找到
Xbox Live 网络服务
,给他禁用掉。
5、确认L2TP身份验证方式和加密
从服务器端确认L2TP身份验证方式,例如是CHAP还是MSCHAPv2,并在Windows客户端正确配置相应的身份验证方式。
不知道是啥身份验证方式的话,就在Windows客户端把所有的身份验证方式都勾上。
同时,务必确保【数据加密】不要选择“不允许加密”,否则又不会协商IPSec了。
版权归原作者 逗老师 所有, 如有侵权,请联系我们删除。