Amazon VPC和Linux服务器之间的IPSec VPN


9

我正在尝试使用公司的VPN系统和Linux服务器在公司网络和Amazon的虚拟私有云之间建立IPSec VPN连接。不幸的是,我找到的唯一指南讨论了如何使用主机Linux机器设置隧道并如何使该Linux机器访问VPC实例,但是我没有在网上找到有关如何获取实例以访问公司网络的讨论。 (或通过该网络的互联网的其余部分)。

网络信息

Local subnet: 10.3.0.0/25
Remote subnet: 10.4.0.0/16

Tunnel 1:
  Outside IP Addresses:
    - Customer Gateway:        : 199.167.xxx.xxx
    - VPN Gateway              : 205.251.233.121

  Inside IP Addresses
    - Customer Gateway         : 169.254.249.2/30
    - VPN Gateway              : 169.254.249.1/30

Tunnel 2:
  Outside IP Addresses:
    - Customer Gateway:        : 199.167.xxx.xxx
    - VPN Gateway              : 205.251.233.122

  Inside IP Addresses
    - Customer Gateway         : 169.254.249.6/30
    - VPN Gateway              : 169.254.249.5/30

这是我的/etc/ipsec-tools.conf:

flush;
spdflush;

spdadd 169.254.249.2/30 169.254.249.1/30 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 169.254.249.1/30 169.254.249.2/30 any -P in ipsec
   esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;

spdadd 169.254.249.6/30 169.254.249.5/30 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 169.254.249.5/30 169.254.249.6/30 any -P in ipsec
   esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;



spdadd 169.254.249.2/30 10.4.0.0/16 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 10.4.0.0/16 169.254.249.2/30 any -P in ipsec
   esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;

spdadd 169.254.249.6/30 10.4.0.0/16 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 10.4.0.0/16 169.254.249.6/30 any -P in ipsec
   esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;

这是我的/etc/racoon/racoon.conf:

remote 205.251.233.122 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

sainfo address 169.254.249.2/30 any address 169.254.249.1/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 169.254.249.6/30 any address 169.254.249.5/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

BGP运行正常,因此我不会发布这些配置。

这是有效的

  • 从Linux框中,我可以ping本地端点(169.254.249.2/169.254.249.6)和它们的远程等效项(169.254.249.1/169.254.249.5)。
  • 我还可以ping通VPC中的实例,通过SSH对其进行连接等。
  • 从VPC中的远程实例,我也可以ping通本地和远程端点
  • 我无法ping 10.3.0.0/25子网上的本地服务器

我以为我缺少一些简单的东西,但是我尝试使用ipsec-tools.conf使用{local subnet} <-> {remote endpoint}将条目添加到{local endpoint} <-> {remote subnet},但它似乎没有用。

当我从{远程实例} ping到{本地服务器}时,ping超时。数据包在eth0接口上可见(即使本地网络在eth1上)。

Google几乎没有帮助;它仅显示尝试使用OpenSwan或存在类似问题但使用硬件路由器或使用较旧工具的人。


我不是专家,但是从wiki.debian.org/IPsec看来,您必须在使用ipsec时手动将路由添加到远程本地网络,但是我可能是错的
。–

Answers:


3

好吧,我作弊:)我安装了Astaro网关,该网关得到了Amazon的正式支持,然后用它来建模自己的网关。您可以通过SSH进入Astaro单元,并查看它们如何设置所有内容。当然,如果您愿意为此付费,则可以坚持使用Astaro。


1
您能否详细说明您的解决方案?您用“我自己做模型”是什么意思?我陷入了同样的问题,对您如何解决它很感兴趣,谢谢!
最多

3

弄清楚了。不得不将我的ipsec-tools.conf更改为:

flush;
spdflush;

# Generic routing
spdadd 10.4.0.0/16 10.3.0.0/25 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 10.3.0.0/25 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

# Tunnel 1
spdadd 169.254.249.1/30 169.254.249.2/30 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 169.254.249.2/30 169.254.249.1/30 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 10.4.0.0/16 169.254.249.2/30 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 169.254.249.2/30 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

# Tunnel 2
spdadd 169.254.249.5/30 169.254.249.6/30 any -P in  ipsec esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;
spdadd 169.254.249.6/30 169.254.249.5/30 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 10.4.0.0/16 169.254.249.6/30 any -P in  ipsec esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;
spdadd 169.254.249.6/30 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

并将我的racoon.conf更改为:

path pre_shared_key "/etc/racoon/psk.txt";

remote 205.251.233.122 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

sainfo address 169.254.249.2/30 any address 169.254.249.1/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 169.254.249.6/30 any address 169.254.249.5/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 10.3.0.0/25 any address 10.4.0.0/16 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

但是,据我了解,此配置仅会在第一个隧道上(通过xxx121)在10.3.0.0/25和10.4.0.0/16之间路由流量。找出答案后,我将更新答案。


我也被这个问题困扰了一段时间,您的回答确实有所帮助。您是否提出了在两个隧道上进行路由的解决方案?我在其他隧道IP中添加了“通用路由”部分,但尚未对其进行测试。
2014年

我没有找到在两个隧道上进行路由的任何好的解决方案,但是我认为在一个上下文中这是有意义的。这里的想法是提供冗余,并且理想情况下将包括两端的冗余。您可以在第二条隧道上设置单独的服务器,并提供到VPN的两条路由(例如,为标准服务器提供两条路由,每条路由一个)。要么,要么使用某种监视系统触发手动故障转移。两种解决方案都不是真正的“最佳”解决方案,但是第一种解决方案也可以为您提供冗余。
Dan Udey 2014年

0

您知道对setkey配置使用“ require”而不是“ use”的原因吗?您还知道我将语句放在remote和sainfo节中并错误地复制某些语句时的顺序是否重要?例如:

#original
remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

#edited
remote 205.251.233.121 {
        generate_policy off;                           #moved/duplicated
        lifetime time 28800 seconds;
        proposal {
                dh_group 2;                           #moved
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
        }
         exchange_mode main;                      #moved
        generate_policy off;                   #duplicated/moved
}

您是否还弄清楚了如何使流量在两条隧道中流动?

感谢您的指导。


欢迎使用Serverfault。您似乎正在尝试在另一位发帖人的问题的答案部分中提问。如果您有新问题,请转至serverfault.com并单击红色的大“问问题”按钮,将其发布为新问题。
vjones

谢谢您的跟进。
DPfiler
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.