设置 IPSec 隧道时,Juniper 防火墙向 libreswan 发送了格式错误的有效负载

设置 IPSec 隧道时,Juniper 防火墙向 libreswan 发送了格式错误的有效负载

我在具有静态 IP 的路由器后面有一个装有 libreswan 的 CentOS 系统,并且我一直在尝试与位于远程位置且装有 Juniper 防火墙的服务器建立 IPSec 隧道。远程服务器上的 IPSec VPN 设置是通过防火墙完成的。我已经尝试了几乎所有可能的设置组合,但每次都会遇到相同的“格式错误的负载”错误。以下是 CentOS shell 屏幕上显示的常见日志:

002 "GeojitOMS" #6: initiating Main Mode
104 "GeojitOMS" #6: STATE_MAIN_I1: initiate
003 "GeojitOMS" #6: ignoring unknown Vendor ID payload [2c9d7e81995b9967d23f571ac641f9348122f1cc1200000014060000]
003 "GeojitOMS" #6: received Vendor ID payload [draft-ietf-ipsec-nat-t-ike-02_n]
003 "GeojitOMS" #6: received Vendor ID payload [Dead Peer Detection]
003 "GeojitOMS" #6: ignoring Vendor ID payload [HeartBeat Notify 386b0100]
002 "GeojitOMS" #6: enabling possible NAT-traversal with method draft-ietf-ipsec-nat-t-ike-02/03
002 "GeojitOMS" #6: transition from state STATE_MAIN_I1 to state STATE_MAIN_I2
106 "GeojitOMS" #6: STATE_MAIN_I2: sent MI2, expecting MR2
003 "GeojitOMS" #6: NAT-Traversal: Result using draft-ietf-ipsec-nat-t-ike-02/03 sender port 500: I am behind NAT+peer behind NAT
002 "GeojitOMS" #6: transition from state STATE_MAIN_I2 to state STATE_MAIN_I3
108 "GeojitOMS" #6: STATE_MAIN_I3: sent MI3, expecting MR3
003 "GeojitOMS" #6: next payload type of ISAKMP Hash Payload has an unknown value: 210 (0xd2)
003 "GeojitOMS" #6: malformed payload in packet
010 "GeojitOMS" #6: STATE_MAIN_I3: retransmission; will wait 500ms for response
010 "GeojitOMS" #6: STATE_MAIN_I3: retransmission; will wait 1000ms for response
010 "GeojitOMS" #6: STATE_MAIN_I3: retransmission; will wait 2000ms for response
010 "GeojitOMS" #6: STATE_MAIN_I3: retransmission; will wait 4000ms for response
003 "GeojitOMS" #6: discarding duplicate packet; already STATE_MAIN_I3

在尝试了 libreswan 上的每种设置组合后,我想知道这是否与 CentOS 本身的版本与 Juniper 不兼容有关。这是 libreswan 和内核的版本:

[root@localhost xyz]# rpm -qa libreswan
libreswan-3.15-5.el7_1.x86_64
[root@localhost xyz]# uname -r
3.10.0-327.4.5.el7.x86_64

CentOS iptables 上 UDP 的 500 和 4500 端口是开放的。此外,beetel 路由器上所有端口的上行和下行流量都是允许的。这是我的最终连接设置,但仍然不起作用:

我的本地子网:10.0.0.0/24

远程子网:192.168.11.0/28

VPN 应该将本地计算机与远程子网上的两个设备(即 192.168.11.11 和 192.168.11.12)连接起来,我认为这是通过子网配置的,除非 libreswan 中有办法在同一连接中提及这两个特定的服务器。/etc/ipsec.d/connection.conf:

conn Connection
    auto=start
    leftid=1.2.3.4 //Some pre-defined id for local machine
    left=10.0.0.16 //LAN IP of local machine
    #leftnexthop=xxx.yyy.zzz.www // Public static IP on router
    leftsubnet=10.0.0.0/24 //local subnet
    rightid=1.2.3.5 //Some pre-defined id for remote server
    right=www.zzz.yyy.xxx //Public IP of the remote server 
    rightsubnet=192.168.11.0/28 //Remote subnet
    #rightnexthop=192.168.11.11 //Remote server IP in remote LAN? not sure
    authby=secret
    ike=3des-sha1;modp1024
    phase2=esp
    phase2alg=3des-sha1
    #pfs=no
    forceencaps=yes
    compress=yes
    #ikev2=propose
    dpdaction=restart

秘密文件 /etc/ipsec.secrets: 1.2.3.4 1.2.3.5: PSK “sharedkey”

尝试了“conn”中变量的不同组合以及启用和禁用“nat_traversal”。但无论使用哪种组合,我仍然会收到相同的错误。这些设置中是否缺少任何内容,或者 Juniper 和 libreswan 或特定版本的 libreswan 之间存在兼容性问题?

答案1

我发现 libreswan 文档很有帮助这里关于与 Juniper 的互操作。

我理解你的痛苦。VPN 非常难获得只是是的。看似最小的事情也会导致连接不稳定和/或无用。因此,我无法确定确切地您上面发布的哪些设置是错误的或缺失的,所以我将对可能引起麻烦的几行进行评论。

phase2=esp phase2alg=3des-sha1 #pfs=no

即使这些值是正确的,我尝试指定它们也完全没有成功——连接从未成功。当我让这些值自动协商时,它奇迹般地起作用了。

压缩=是

压缩应该不是启用,因为它是一个安全漏洞。


作为参考,我已使用以下(模糊化)配置成功实现了 libreswan<-->Juniper 隧道。在此配置中,以下内容正确:

  1. 左==本地(libreswan)和右==远程(juniper)。
  2. 操作系统是CentOS 7.2
  3. libreswan 软件包是libreswan-3.15-5.el7_1.x86_64
  4. 本地 libreswan 位于 NAT 后面。Juniper NAT 状态未知。
  5. 我获得的唯一 Juniper 方面信息是:
    • 预共享密钥
    • 第 1 阶段 == “pre-gp2-aes256-sha-24h”
    • 第 2 阶段 == “g2-esp-aes128-sha”
  6. nat_traversal=yes/etc/ipsec.conf

配置文件:

conn MyConnection
        ike=aes256-sha1;modp1024
        esp=aes128-sha1
        authby=secret
        keyingtries=0

        left=10.111.111.111
        leftsourceip=10.111.111.111
        leftsubnet=10.111.111.0/24

        right=1.2.3.4
        rightsubnet=10.222.222.0/24
        rightnexthop=%defaultroute

        compress=no
        auto=start

相关内容