是否可以在 NAT 后面的 2 个设备之间建立 IPSec 连接?

网络工程 纳特 ipsec
2022-03-01 00:47:17

我们的办公室和客户站点之间有数十个 IPSec 连接。我们在客户网络中使用额外的路由器(因此在 NAT 之后)来启动与我们办公室的连接,其中 PFSense 路由器是“网络入口”(因此不在 NAT 之后)。这工作得很好!

在一种特定情况下,我们还需要 2 个客户站点之间的直接 IPSec 连接。在这两个站点上,我们已经在他们的网络中安装了一个路由器(Linux 无处不在)。我被允许在 2 个客户位置之一打开端口以使其正常工作。

经过一段时间的努力并尝试在 Google 上找到解决方案后,我仍然无法在这两个位置之间建立有效的 IPSec 连接。


为了使其更具体,我概述了我们的情况:

      Customer A           |        Customer B
our router --- NAT --- internet --- NAT --- our router
10.130.1.0/24                              10.130.2.0/24

在客户 A,我将所有端口(出于测试目的)转发到我们的路由器,并尝试从客户 B 的站点启动 IPSec 连接。我尝试通过从 10.130.2.0/24 ping 10.130.1.1 来启动连接,但在任一站点上的 charon (ipsec) 日志文件中都看不到任何日志条目...

是否有可能让 IPSec 完全像上面所描绘的那样工作?那么端口转发呢?

==================更新1 =================

我检查了是否在两个站点都启用了 NAT 遍历,并且确实如此。我使用 IKEv2 以防万一。

我还可以通过设置一些日志来获取一些日志log-modes并获得:

Oct 26 10:09:48 12[MGR] checkout IKEv2 SA with SPIs 6680fde47ccc3276_i d590c97607b14938_r
Oct 26 10:09:48 12[MGR] IKE_SA checkout not successful

IPSec 配置(来自一个站点,因为它们相互代表):

  allow-access-to-local-interface enable
        auto-firewall-nat-exclude enable
        esp-group FOO0 {
            compression disable
            lifetime 3600
            mode tunnel
            pfs enable
            proposal 1 {
                encryption aes128
                hash sha256
            }
            proposal 2 {
                encryption aes128
                hash sha256
            }
        }
        ike-group FOO0 {
            ikev2-reauth no
            key-exchange ikev2
            lifetime 28800
            proposal 1 {
                dh-group 14
                encryption aes128
                hash sha256
            }
            proposal 2 {
                dh-group 14
                encryption aes128
                hash sha256
            }
        }
        nat-traversal enable
        site-to-site {
            peer some_entry_A.zapto.org {
                authentication {
                    id some_entry_B.zapto.org
                    mode pre-shared-secret
                    pre-shared-secret SomePSK
                    remote-id any
                }
                connection-type initiate
                default-esp-group FOO0
                description internal_IPSec
                ike-group FOO0
                ikev2-reauth inherit
                local-address any
                tunnel 1 {
                    allow-nat-networks disable
                    allow-public-networks enable
                    esp-group FOO0
                    local {
                        prefix 10.130.8.0/24
                    }
                    remote {
                        prefix 10.130.22.0/24
                    }
                }
            }
1个回答

它可以工作。

您需要在双方指定本地“身份验证ID”和“身份验证远程ID”(当然交叉)。

原因是每个设备必须能够将传入的数据包与配置相关联,因此它需要一个 ID。由于 IP 地址是由 NAT 修改的,因此它们不能用作 ID,您需要为它们提供另一个 ID 才能使用。