两个本机 IPv6 网络之间的 IPv6 IPsec

两个本机 IPv6 网络之间的 IPv6 IPsec

假设我有两个网络 A 和 B,分别位于地球的两端。它们都具有原生 IPv6,并且(假设)只使用 IPv6。IPv4 不再存在。它们都可以以 IPv6 原生方式访问互联网并使用 IPv6 主机。它们的 IPv6 地址都是全局可路由的。因此,尽管有防火墙规则,网络 A 中的每个主机都可以访问网络 B 中的每个主机,反之亦然。

我该如何设置 IPSec 来保护这两个网络之间的流量?

在 IPv4 世界中,我会在每个站点的两个防火墙之间建立一个 IPSec 隧道,或者使用 GRE 隧道或类似技术。

但是,在全 IPv6 世界中我该如何做到这一点?IPv6 中是否有一些内在的东西可以使这更容易?理想情况下,我只想在每个站点的防火墙/路由器上配置它。我不想在每个网络中的每个主机上都设置传输模式 IPSec。

值得一提的是,我使用 OpenBSD 来满足我的路由/防火墙/IPSec 需求,因此任何具体信息都会有帮助,但对于 IPv6/IPSec 如何处理这种情况的一般性答案也会很好。

答案1

我没有测试过,但我看不出 IPv4 和 IPv6 有什么区别。缺少私有 IP 可能会让您感到困惑,但除此之外应该是一样的。我猜您正在使用 racoon 设置隧道,所以我将跳过这一步。其余部分可以在 Linux 下使用 ipsec-tools/setkey 完成。

从我的理解来看,我猜你需要两个 SPD 条目,一个入站,一个出站。类似下面的代码应该可以完成这项工作:

spdadd 2a01:1111:2222:3333::/64 2a01:1111:2222:3334::/64 any -P out ipsec
    esp/tunnel/2a01:1111:2222:1::1-2a01:1111:2222:1::2/require ;


spdadd 2a01:1111:2222:3334::/64 2a01:1111:2222:3333::/64 any -P in ipsec
    esp/tunnel/2a01:1111:2222:1::1-2a01:1111:2222:1::2/require ;

在哪里:

  • 2a01:1111:2222:3333::/64 是您的本地网络
  • 2a01:1111:2222:3335::/64 是您的远程网络
  • 2a01:1111:2222:1::1 是您的本地端点
  • 2a01:1111:2222:1::2 是您的远程端点

ps 如果你使用主机名,请确保传递 -6

答案2

您可以使用与 IPv4 完全相同的技术。我猜 OpenBSD 的堆栈中缺少 VTI/st 技术,因此 gre 或 gif 就足够了。是的,有一件事可以让它变得更容易 - 接口上的本地范围地址(但是,您可以使用任何地址)。在 IPv4 世界中,您需要在每一端分配 AF_INET 地址才能使路由正常工作,但在 IPv6 世界中,使用本地范围地址(包括 OSPF)路由就可以正常工作。这是一个可行的方法,我在 FreeBSd 上使用 IPv6 gre 已有好几年了。

传统的 IPSec 方案也应该可以工作,但是由于它所导致的路由复杂性,它现在已经过时了。

相关内容