在Ubuntu系统下连接学校VPN

准备

这篇文章是帮助一个同学在Ubuntu环境下配置学校VPN的过程中产出的,其平台为 Ubuntu Desktop 20.10,学校提供的VPN接入为 L2TP/PPTP,使用Network Manager GUI完成配置. 由于本人常用的发行版不是Ubuntu, 因此对于Server版的配置流程不甚熟悉,Server版的同学可以使用 nmcliNetwork Manager CLI或编写L2TP配置文件实现.
  1. 在Ubuntu上安装必要依赖以支持L2TP.请根据自己的DE或网络管理配置选取合适的依赖.

    sudo apt-get install network-manager-l2tp #NM 的L2TP插件
    sudo apt-get install network-manager-l2tp-gnome #Gnome的设置面板
  2. 新增VPN.如果你依赖安装成功,则Network Manager的新增选项中应当出现L2TP的新增连接选项.选取,填入诸如服务器地址,用户名,密码等必要信息.
  3. PPP设置.这里参考学校给出的文档选择合适的身份验证方法. 我校允许 PAP,CHAP两种,但是基于兼容性考量,建议同时勾选MSCHAP的两项.下方设置按需勾选,似乎对于连通性影响不大.
  4. IPsec 设置. 这里参考学校对Windows和macOS的配置方案,如果提供了 Pre-Shared key(预共享密钥),则启用IPsec Tunnel并选取 PSK验证,填入密钥.大多数信息都能在针对 Windows/macOS的教程上找到相关设置.
  5. 一些Linux特有设置.相对于 Windows/macOS,在Linux上配置IPsec要特别注意以下几点:

    • 是否开启IKEv2 密钥交互协议?我校未开启,错误配置会导致无法连接.
    • 加密算法(Phase1 Algorithms)是什么?这一点是在Linux上启用IPsec的关键,在其他系统上不需要用户手动配置,学校给出的文档也没有覆盖这一点.我校的算法是

      Phase1 Algorithms: des-sha1-modp768
      Phase2 Algorithms: des-sha1
  6. 点击连接即可。如果出现问题,可以使用 nmcli 的相关功能查看日志.如果右上角的图标在一段时间内变为VPN字样且无错误通知,那么应该是连接成功了。如果你想知道加密算法是怎么获得的,请看下节.

获取加密算法

这里的加密算法参数被很多教程忽略了,要么是建议穷举测试,要么建议联系VPN服务商....这里给出一个通用可行的方法.需要root权限.

  1. 安装 ike-scan. IKE Scan是专门针对IPsec VPN Servers进行嗅探和爆破的安全工具(是的,属于Kali Linux的预制软件套装),这里我们只用它来获取加密方式就好.APT包管理器可以直接安装.

    sudo apt-get install ike-scan
  2. 嗅探:

    非常简单:

    sudo ike-scan vpn.xxx.xxx(你的VPN服务器地址)

    返回示例如下,略去IP地址.

    Starting ike-scan 1.9.4 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
    xxx.xxx.xxx.xxx Main Mode Handshake returned HDR=(CKY-R=2a5ae41ac67c049a) SA=(Enc=DES Hash=SHA1 Auth=PSK Group=1:modp768 LifeType=Seconds LifeDuration=28800) VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0) VID=6c7bf882554ec286ee33c11826bb2891
    Ending ike-scan 1.9.4: 1 hosts scanned in 0.200 seconds (5.01 hosts/sec).  1 returned handshake; 0 returned notify

    我们只关注SA参数部分:SA=(Enc=DES Hash=SHA1 Auth=PSK Group=1:modp768 LifeType=Seconds LifeDuration=28800),这里就可以获取到加密方式和LifeTime.

    我们将其用-拼接得到Phase1 Algorithms:des-sha1-modp768(吐槽下这个古老的加密方式.)

    然后我直接将最后一部分去掉作为Phase2 Algorithms: des-sha1.

    Lifetime填写28800 Seconds,注意设置面板中的项目单位,可能要转换为分钟.

Edit with markdown