build立IPSec隧道时,从juniper防火墙到libreswan收到格式错误的负载

我有一个带有静态IP的路由器后面的libreswan的CentOS系统,我一直在试图build立一个带有瞻博防火墙的远程服务器的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和kernel的版本:

 [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 

UDP的端口500和4500在CentOS iptables上打开。 也允许端口上的所有beetel路由器的上行和下行stream量。 这是我最后的连接设置,但仍然没有解决:

我的本地子网:10.0.0.0/24

远程子网:192.168.11.0/28

VPN是假设连接本地机器与远程子网上的两个盒子,即192.168.11.11和192.168.11.12,我认为这是通过子网configuration的,除非在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”中的不同variables组合,同时启用禁用“nat_traversal”。 但不pipe使用什么组合,我仍然会得到同样的错误。 在这些设置中是否有任何缺失,或者juniper和libreswan或libreswan的特定版本之间是否存在兼容性问题?

我发现libreswan文档对Juniper互操作性很有帮助。

我感到你的痛苦。 众所周知,VPN很难得到正确的。 看起来最小的事情可能导致连接不稳定和/或无用。 因此,我无法确定您在上面发布的设置是错误还是缺失,因此我会在可能造成问题的几行上发表评论。

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

即使它们是正确的,我也没有成功地指出这些 – 连接从未成功。 当我让这些值自动协商时,它神奇地工作。

压缩= YES

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


作为参考,我已经用下面的(混淆)configuration成功实现了libreswan < – > Juniper隧道。 在这个configuration下面是真实的:

  1. left == local(libreswan)和right == remote(juniper)。
  2. OS是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. /etc/ipsec.conf nat_traversal=yes

configuration文件:

 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