解决:deepin连接预共享秘钥的L2TP/IPSec的VPN下,出现“连接vpn失败,原因未知”

元气小坏坏 提交于 2020-04-10 18:34:06

背景:公司的vpn是有预共享秘钥的l2tp/ipsec,使用deepin连接时,一直连接不成功,因为这个原因,不得不回归windows阵营。但对于一个爱好linux的折腾者,还是时不时会找找解决办法,功夫不负有心人,这次终于是找到了。

我连接的vpn是预共享秘钥的l2tp/ipsec,在windows10上显示如下:

1.创建vpn连接

在控制中心进行vpn创建,操作如下:

1.1 网络-->vpn-->创建-->l2tp

选择vpn

1.2 配置vpn信息

1.填写网关/密码信息

2.启用ipsec

拉到下面,启用ipsec,填写预共享密钥/密钥交换协议/安全封装协议关于密钥交换协议与安全封装协议如何填写,请看下一节。

3.保存。

信息填写完之后,点击”保存“。对于其他项,一个普适的建议是:如果不明白具体是干嘛的,就使用默认的。

1.3 密钥交换协议与安全封装协议如何填写

可以参考network-manager-l2tp

我使用的脚本如下

#!/bin/bash

# Encryption algorithms: 3des=5, aes128=7/128, aes192=7/192, aes256=7/256
ENCLIST="5 7/128 7/192 7/256"
# Hash algorithms: md5=1, sha1=2, sha256=5, sha384=6, sha512=7
HASHLIST="1 2 5 6 7"
# Diffie-Hellman groups: 1, 2, 5, 14, 15, 19, 20, 21
GROUPLIST="1 2 5 14 15 19 20 21"
# Authentication method: Preshared Key=1
AUTH=1

for ENC in $ENCLIST; do
   for HASH in $HASHLIST; do
       for GROUP in $GROUPLIST; do
          echo ike-scan --trans=$ENC,$HASH,$AUTH,$GROUP -M "$@"
          ike-scan --trans=$ENC,$HASH,$AUTH,$GROUP -M "$@"
      done
   done
done

保存为ike-scan.sh,再运行脚本:

sudo ipsec stop
chmod +x ./ike-scan.sh
sudo ./ike-scan.sh {你的VPN地址} | grep SA

我得到的结果:

SA=(Enc=3DES Hash=SHA1 Auth=PSK Group=2:modp1024 LifeType=Seconds LifeDuration(4)=0x00007080)

因此,我的密钥交换协议与安全封装协议分别是3des-sha1-modp10243des-sha1

经过以上的设置后,vpn连接就创建完成了,deepin论坛上的连接创建也止于此。如果此时你的vpn可以正常连接,那么恭喜你,以下的内容你就不用关注了。

2. 问题:“连接vpn失败,原因未知”

经过上面的设置后,开始进行连接,很不幸,出现问题:连接vpn失败,原因未知

就是这么一个问题,让我开启了大半年求解之旅,以下是我的解决办法。

2.1 定位问题

每隔一段时间,我就会在deepin论坛上搜索vpn相关的贴,看看有没有人成功连接,在Deepin自带VPN 连接PPTP失败 原因未知中,我得到一个命令:

sudo journalctl -u NetworkManager -f

原文是这样的

yanbowen 发表于 2017-6-5 13:42:26 | 只看该作者
连之前先在终端执行 'sudo journalctl -u NetworkManager -f' 然后再去连接 PPTP,连接失败后,把终端里的输出贴一下,谢谢!

虽然讨论的是PPTP方式,但连接信息展示还是一样的,执行命令,开启连接。

连接信息中,有这么一句:

ENCRYPTION_ALGORITHM 3DES_CBC (key size 0) not supported!

好像是不支持3DES_CBC算法?这个算法在哪用到,如何添加呢?

2.2 搜索问题

看到出错信息了,不管如何,先搜他一搜。google一下,找到一个贴子,也是在讨论这件事的: When StrongSwan ike proposal “enc” set to “3des”, that is always not support

有个人是这么回答的

Ubuntu does not seem to package the des plugin. If you want 3DES support you may try to install strongswan-plugin-openssl to enable the OpenSSL crypto backend. Make sure that there is no manual load statement in strongswan.conf, and double-check that the OpenSSL plugin is not disabled in /etc/strongswan.d/charon/openssl.conf.

Regards
Martin

大意是,ubuntu不支持des插件,需要安装strongswan-plugin-openssl,然在strongswan的配置文件中开启。

我用的是deepin,这里说的是ubutu,不过没关系,反正都是debian一家。论坛中还介绍了ipsec相关的几个命令,附下:

ipsec statusall # 列出插件加载状态
ipsec listalgs	# 列出支持算法

运行ipsec listalgs,可以发现,结果中确实没有3DES_CBC

2.3 安装strongswan-plugin-openssl插件

从上面的分析中,得知需要安装strongswan-plugin-openssl,那就装呗:

$: sudo apt-get install strongswan-plugin-openssl
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
E: 无法定位软件包 strongswan-plugin-openssl

场面一度十分尴尬,说好的debian一家亲的,竟然找不到!难道strongswan-plugin-openssl消失在历史的长河中了吗?deepin的vpn连接只能止于此了吗?

2.4 突想奇想:strongswan的其他插件

从发现“无法定位软件包 strongswan-plugin-openssl”已经过去了十分漫长的岁月,这段时间重回了windows的阵营,但我深知,我终有一天会回归linux。

这段时间,我也没闲着,有空没空关注下deepin论坛关于vpn的情况,但每次都失望而归,期间也几次将系统日志反馈给了deepin开发,至今仍未有回复。没办法,只能撸起袖子自己干了。

再一次回归到了strongswan-plugin-openssl的安装上,经过了又一次“无法定位软件包 strongswan-plugin-openssl”后,突然想到:strongswan-plugin-openssl没了,装strongswan的其他插件是不是可以?开干!

1.搜索下strongswan的软件包
PC:~# apt-get search strongswan
E: 无效的操作 search

呵呵了。。。将apt-get换成apt,再次执行,列表如下:

PC:~# apt search strongswan
正在排序... 完成
全文搜索... 完成  
charon-cmd/panda 5.6.2-2 amd64
  standalone IPsec client

charon-systemd/panda 5.6.2-2 amd64
  strongSwan IPsec client, systemd support

ike/panda,now 2.2.1+dfsg-7 amd64 [已安装]
  Shrew Soft VPN client - Daemon and libraries

kvpnc/panda 0.9.6a-4+b1 amd64
  frontend to VPN clients

libcharon-extra-plugins/panda,now 5.6.2-2 amd64 
  strongSwan charon library (extra plugins)

libstrongswan/panda,now 5.6.2-2 amd64 [已安装]
  strongSwan utility and crypto library

libstrongswan-extra-plugins/panda,now 5.6.2-2 amd64 
  strongSwan utility and crypto library (extra plugins)

libstrongswan-standard-plugins/panda,now 5.6.2-2 amd64 
  strongSwan utility and crypto library (standard plugins)

network-manager-strongswan/panda,now 1.4.4-1 amd64 [已安装]
  network management framework (strongSwan plugin)

strongswan/panda,panda,now 5.6.2-2 all [已安装]
  IPsec VPN solution metapackage

strongswan-charon/panda,now 5.6.2-2 amd64 [已安装]
  strongSwan Internet Key Exchange daemon

strongswan-dbg/panda 5.3.5-1 amd64
  strongSwan library and binaries - debugging symbols

strongswan-ike/panda,panda 5.5.3-2 all
  strongSwan Internet Key Exchange daemon (transitional package)

strongswan-ikev1/panda,panda 5.5.3-2 all
  strongSwan IKEv1 daemon, transitional package

strongswan-ikev2/panda,panda 5.5.3-2 all
  strongSwan IKEv2 daemon, transitional package

strongswan-libcharon/panda,now 5.6.2-2 amd64 [已安装]
  strongSwan charon library

strongswan-nm/panda,now 5.6.2-2 amd64 [已安装]
  strongSwan plugin to interact with NetworkManager

strongswan-pki/panda 5.6.2-2 amd64
  strongSwan IPsec client, pki command

strongswan-scepclient/panda 5.6.2-2 amd64
  strongSwan IPsec client, SCEP client

strongswan-starter/panda,now 5.6.2-2 amd64 [已安装]
  strongSwan daemon starter and configuration file parser

strongswan-swanctl/panda 5.6.2-2 amd64
  strongSwan IPsec client, swanctl command
2.安装插件

apt search运行的结果来看,libstrongswan相关的软件还是挺多的,如何从众多软件中安装带有3des-cbc算法的软件呢?

不怕,既然strongswan-plugin-openssl是个插件,那先从插件相关的安装开始吧!

apt-get install libcharon-extra-plugins
apt-get install libstrongswan-standard-plugins
apt-get install libstrongswan-extra-plugins

对的,没错,就是把插件相关的都装了。

3.重启deepin

插件安装完成后,如何加载呢?不知道!不过没关系,这种情况下,一般有两种解决思路:

  1. google(为何不是百度?大天朝的情况,vpn相关的,你懂的)
  2. 重启系统

这里我选择了第二种,新安装了软件,重启总归是不错的。

重启后,执行下ipsec listalgs命令,发现3DES_CBC已经有了:

encryption: AES_CBC[aesni] AES_CTR[aesni] RC2_CBC[rc2] 3DES_CBC[openssl] CAMELLIA_CBC[openssl] CAST_CBC[openssl]
              BLOWFISH_CBC[openssl] DES_CBC[openssl] DES_ECB[openssl] NULL[openssl] CAMELLIA_CTR[gcrypt]
              SERPENT_CBC[gcrypt] TWOFISH_CBC[gcrypt]

4.连接vpn

赶紧试下能不能连vpn,发现真的可以了:

3.总结

3.1 vpn连接信息很重要

sudo journalctl -u NetworkManager -f

以上命令帮了大忙,可以快速定位问题。

3.2 替代软件很重要

从“无法定位软件包 strongswan-plugin-openssl”到想起用别的软件替代,都过了大半年之久了。平时搜索时,也仅限于“strongswan添加3des-cbc算法”,白白耗费了大把时光。这里我装了三个软件包,具体起作用的是哪个并不知道。

apt-get install libcharon-extra-plugins
apt-get install libstrongswan-standard-plugins
apt-get install libstrongswan-extra-plugins

3.3 针对vpn:能用google就别用baidu

对于大天朝的网络环境,大家有目共睹。记得当时两会期间发贴寻求vpn连接帮助,然后就封贴了,理由是“敏感话题”。

4. 针对苦苦指挣扎于vpn连接的deepin用户

  1. 使用sudo journalctl -u NetworkManager -f展示连接信息,定位问题。
  2. 使用google搜索问题,寻找解决办法。
  3. 解决问题。

我深知从第2步到第3步是一个漫长的过程,每次的前行皆不易,有时问题的解决可能需要点灵感和运气。如果实现找不到解决办法了,可以反馈到deepin论坛,让开发者们一起解决,毕竟他们才是最懂deepin的人。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!