两个AWS实例之间的Strongswan VPN隧道无法连接


10

我正在尝试在运行Ubuntu 14.04.2 LTS的两个Amazon AWS EC2实例之间使用StrongSwan 5.1.2建立VPN隧道。在使用StrongSwan之前,我在Amazon RedHat AMI上使用过open(libre)swan,效果很好。由于某些原因,我什至无法让IKE为StrongSwan工作。我对我的AWS配置进行了三重检查,而且一切看起来都不错,因此StrongSwan配置一定是有问题的。

正如您将在下面看到的那样,我遇到的错误是“向套接字写入错误:参数无效”。我在网上看过,确实找不到解决方案。我确信我的strongswan ipsec.conf配置不正确。

这是我正在使用的:

Instance #1: N.Virginia - 10.198.0.164 with public EIP 54.X.X.X
Instance #2: Oregon - 10.194.0.176 with public EIP 52.Y.Y.Y

(简单的)拓扑如下:

[ Instance #1 within N.Virginia VPC <-> Public internet <-> Instance #2 within Oregon VPC ]

我已验证以下AWS配置正确:

Security groups permit all
IP information is correct
Src/Dest disabled on both instances
ACLs permit all
routes are present and correct (route to 10.x will point to that local instance in order to be routed out to the VPN tunnel)

下面是/etc/ipsec.conf (这是来自俄勒冈州的,但是在N.Virginia实例上是相同的,除了left | right值颠倒了)

config setup
        charondebug="dmn 2, mgr 2, ike 2, chd 2, job 2, cfg 2, knl 2, net 2, enc 2, lib 2"
conn aws1oexternal-aws1nvexternal
        left=52.Y.Y.Y (EIP)
        leftsubnet=10.194.0.0/16
        right=54.X.X.X (EIP)
        rightsubnet=10.198.0.0/16
        auto=start
        authby=secret
        type=tunnel
        mobike=no
        dpdaction=restart

下面是/etc/ipsec.secrets *(很明显,其他实例已反转):

54.X.X.X 52.Y.Y.Y : PSK "Key_inserted_here"

以下是/etc/strongswan.conf:

charon {
        load_modular = yes
        plugins {
                include strongswan.d/charon/*.conf
        }
}

以下是/etc/sysctl.conf:

net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

这是/ var / log / syslog的调试输出似乎问题出在这里:“写入套接字时出错:参数无效;尝试了一切之后,我继续遇到相同的错误

Jun 17 17:34:48 ip-10-198-0-164 charon: 13[IKE] retransmit 5 of request with message ID 0
Jun 17 17:34:48 ip-10-198-0-164 charon: 13[NET] sending packet: from 54.X.X.X[500] to 52.Y.Y.Y[500] (1212 bytes)
Jun 17 17:34:48 ip-10-198-0-164 charon: 03[JOB] next event in 75s 581ms, waiting]
Jun 17 17:34:48 ip-10-198-0-164 charon: 16[NET] sending packet: from 54.X.X.X[500] to 52.Y.Y.Y[500]
Jun 17 17:34:48 ip-10-198-0-164 charon: 13[MGR] checkin IKE_SA aws1vexternal-aws1oexternal[1]
Jun 17 17:34:48 ip-10-198-0-164 charon: 13[MGR] check-in of IKE_SA successful.
Jun 17 17:34:48 ip-10-198-0-164 charon: 16[NET] error writing to socket: Invalid argument
Jun 17 17:36:04 ip-10-198-0-164 charon: 03[JOB] got event, queuing job for execution
Jun 17 17:36:04 ip-10-198-0-164 charon: 03[JOB] no events, waiting
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[MGR] checkout IKE_SA
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[MGR] IKE_SA aws1vexternal-aws1oexternal[1] successfully checked out
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[IKE] giving up after 5 retransmits
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[IKE] establishing IKE_SA failed, peer not responding
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[MGR] checkin and destroy IKE_SA aws1vexternal-aws1oexternal[1]
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[IKE] IKE_SA aws1vexternal-aws1oexternal[1] state change: CONNECTING => DESTROYING
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[MGR] check-in and destroy of IKE_SA successful

以下是到目前为止我尝试过的操作:

1)经过验证的第3层

2)重新启动机器

3)尝试添加leftid =

4)尝试执行ipsec更新,然后重新启动ipsec

5)尝试在confif设置下添加nat_traversal = yes(请注意,这无关紧要,因为ipsec statusall已使用IKEv2进行了验证,根据文档自动使用了nat_traversal)

6)尝试省略virtual_private <-根据AWS openswan文档使用,因此我将其包含在strongswan配置中。

7)尝试在/etc/sysctl.conf中禁用net.ipv4.conf.all.send_redirects = 0和net.ipv4.conf.all.accept_redirects = 0

8)尝试使用专用IP代替EIP。我不再收到套接字错误,但是很明显,两个IP无法相互通信以进行对等...

9)尝试将其添加到strongswan.conf中:load = aes des sha1 sha2 md5 gmp random nonce hmac stroke kernel-netlink socket-default updown

10)使用leftfirewall = yes尝试过,没有用

请帮忙!谢谢!

编辑#1:

Michael的回答解决了原来的问题,但是我有一个与路由有关的新问题。两个VPN实例均无法相互ping通。此外,当我尝试从任一子网中的随机实例ping到另一个随机实例或远端VPN实例时,我得到以下ping响应:

root@ip-10-194-0-80:~# ping 10.198.0.164
PING 10.198.0.164 (10.198.0.164) 56(84) bytes of data.
From 10.194.0.176: icmp_seq=1 Redirect Host(New nexthop: 10.194.0.176)
From 10.194.0.176: icmp_seq=2 Redirect Host(New nexthop: 10.194.0.176)
From 10.194.0.176: icmp_seq=3 Redirect Host(New nexthop: 10.194.0.176)
From 10.194.0.176: icmp_seq=4 Redirect Host(New nexthop: 10.194.0.176)

显然,这肯定是两个VPN实例之间的路由问题(很可能是由于Strongswan配置或实例路由表所致),因为Oregon子网中的10.194.0.80主机能够接收来自Oregon VPN实例的响应。实例上的路由表+ traceroute:

root@ip-10-194-0-80:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.194.0.1      0.0.0.0         UG        0 0          0 eth0
10.194.0.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0

root@ip-10-194-0-80:~# traceroute 10.198.0.164
traceroute to 10.198.0.164 (10.198.0.164), 30 hops max, 60 byte packets
 1  10.194.0.176 (10.194.0.176)  0.441 ms  0.425 ms  0.409 ms^C

当我使用openswan时,不需要我对每个实例的路由表进行任何手动修改。

这是Oregon VPN实例的路由表:

root@ip-10-194-0-176:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.194.0.1      0.0.0.0         UG        0 0          0 eth0
10.194.0.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0

我有点难过。

编辑#2:

看起来VPN实例之间的路由可能不是问题:/ var / log / syslog显示从一个VPN实例公共IP到另一个VPN实例的数据包接收

Jun 23 19:57:49 ip-10-194-0-176 charon: 10[NET] received packet: from 54.X.X.X[4500] to 10.194.0.176[4500] (76 bytes)

看起来这是与儿童安全协会有关的问题:

aws1oexternal-aws1nvexternal:   child:  10.194.0.0/16 === 10.198.0.0/16 TUNNEL, dpdaction=restart
Security Associations (1 up, 0 **connecting**):

/ var / log / syslog:

Jun 23 19:52:19 ip-10-194-0-176 charon: 02[IKE] failed to establish CHILD_SA, keeping IKE_SA
Jun 23 19:52:48 ip-10-194-0-176 charon: 11[IKE] queueing CHILD_CREATE task
Jun 23 19:52:48 ip-10-194-0-176 charon: 11[IKE]   activating CHILD_CREATE task
Jun 23 19:52:48 ip-10-194-0-176 charon: 06[IKE] establishing CHILD_SA aws1oexternal-aws1nvexternal
Jun 23 19:52:48 ip-10-194-0-176 charon: 10[IKE] received FAILED_CP_REQUIRED notify, no CHILD_SA built
Jun 23 19:52:48 ip-10-194-0-176 charon: 10[IKE] failed to establish CHILD_SA, keeping IKE_SA
Jun 23 19:52:49 ip-10-194-0-176 charon: 14[CFG] looking for a child config for 10.194.0.0/16 === 10.198.0.0/16 
Jun 23 19:52:49 ip-10-194-0-176 charon: 14[CFG] found matching child config "aws1oexternal-aws1nvexternal" with prio 10
Jun 23 19:52:49 ip-10-194-0-176 charon: 14[IKE] configuration payload negotiation failed, no CHILD_SA built
Jun 23 19:52:49 ip-10-194-0-176 charon: 14[IKE] failed to establish CHILD_SA, keeping IKE_SA

***编辑#3:问题已解决(嗯,实际上请参阅下面的编辑#4 ...)****

问题已解决。

1)我没有正确遵循Michael的配置说明。我还一起配置了rightsourceip和leftsourceip,从而使两个实例都认为它们都是发起者。我确保一个是发起者,一个是请求者。这解决了IKE问题。

2)我发现我还必须显式设置esp参数。即使已经存在默认值(aes128-sha1,3des-sha1),仍必须设置esp参数,以使实例知道使用esp OR ah(但不能同时使用两者)。我最终使用aes128-sha1-modp2048。

希望这篇文章能帮助下一个Linux新手进行设置!!

干杯!

编辑#4:问题(不是真的)解决了

在对与Strongswan相关的另一个问题进行故障排除时,我更改了“ leftfirewall”参数,进行了测试,没有解决我的单独问题,然后事先恢复为orig配置(注释为leftfirewall)。然后,我注意到我现在无法在隧道中进行ping操作。经过数小时的疯狂尝试来了解发生了什么之后,我注释掉了esp参数以查看会发生什么:我现在不能再次穿越隧道了!<-因此,有可能有一些ipsec幽灵在我身上玩弄花招,并且esp参数并不是TS_UNACCEPTABLE错误的真正解决方法(尽管其他资源在线指出esp参数是解决方法...)

编辑5:问题已完全解决

我最终将所有内容移入测试环境,并从头开始。我使用最新版本(5.3.2)从源代码安装,而不是Ubuntu回购(5.1.2)中的旧版本。这消除了我上面遇到的问题,并在VPN隧道上的多个子网之间使用netcat(出色的工具!)验证了第7层的连接性。

另外:这是不是需要启用了DNS VPC主机名(因为我是不正确导致亚马逊相信),FYI>

希望对大家有帮助!!!!

附加编辑2/11/2017:

根据JustEngland的要求,复制下面的工作配置(省略某些详细信息以防止以任何方式进行标识):

A面:

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
config setup
# Add connections here.
conn %default
 ikelifetime= You choose; must match other side
 keylife= You choose; must match other side
 rekeymargin= You choose; must match other side
 keyingtries=1
 keyexchange= You choose; must match other side
 authby=secret
 mobike=no

conn side-a
 left=10.198.0.124
 leftsubnet=10.198.0.0/16
 leftid=54.y.y.y
 leftsourceip=10.198.0.124
 right=52.x.x.x
 rightsubnet=10.194.0.0/16
 auto=start
 type=tunnel
# Add connections here.


root@x:~# cat /etc/ipsec.secrets 
A.A.A.A B.B.B.B : PSK "Your Password"

B面:

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
config setup

conn %default
 ikelifetime= You choose; must match other side
 keylife= You choose; must match other side
 rekeymargin= You choose; must match other side
 keyingtries=1
 keyexchange= You choose; must match other side
 authby=secret
 mobike=no

conn side-b
 left=10.194.0.129
 leftsubnet=10.194.0.0/16
 leftid=52.x.x.x
 right=54.y.y.y
 rightsubnet=10.198.0.0/16
 rightsourceip=10.198.0.124
 auto=start
 type=tunnel

root@x:~# cat /etc/ipsec.secrets 
B.B.B.B A.A.A.A : PSK "Your Password"

您可以发布工作配置吗?
JustEngland '17

当然,会将配置添加为我的原始问题帖子的编辑内容。请注意,我无法再访问该设置,因此如果配置正确,我将无法验证100%;但是,它们应该是:)
lobi

Answers:


7

在VPC中,实例的公用IP地址永远不会绑定到该实例的堆栈,因此您必须同时配置内部专用地址和外部公用地址。该无效参数的可能是通过直接从公网IP地址,这是不知道您的实例试图源交通造成的。

left=10.10.10.10         # instance private IP of local system
leftsourceip=10.10.10.10 # instance private IP of local system
leftid=203.x.x.x         # elastic IP of local system
leftsubnet=10.x.x.x/xx

rightsubnet=10.x.x.x/xx
right=198.x.x.x          # elastic IP of remote system

迈克尔,您好,这解决了原来的问题,但是现在看来,由Strongswan配置引起的路由问题。我无法从一个VPN实例ping到另一个VPN实例(超时),并且如果尝试从子网内的另一个实例ping ping,则会得到以下信息:从10.194.0.176:icmp_seq = 4重定向主机(新建nexthop:10.194.0.176)
lobi

我编辑了我的原始帖子
lobi,2015年

弄清楚了。我没有正确实现Michaels的配置(我还包括rightsourceip,因此混淆了哪个是发起者,哪个是请求者)。我还需要显式设置esp参数。
lobi 2015年

1

问题已解决。

1)我没有正确遵循Michael的配置说明。我还一起配置了rightsourceip和leftsourceip,从而使两个实例都认为它们都是发起者。我确保一个是发起者,一个是请求者。这解决了IKE问题。

2)我发现我还必须显式设置esp参数。即使已经存在默认值(aes128-sha1,3des-sha1),仍必须设置esp参数,以使实例知道使用esp OR ah(但不能同时使用两者)。我最终使用aes128-sha1-modp2048。


不知道这是否是100%固定的。请参阅原始帖子中的编辑#4。
lobi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.