Linux 中基于策略的 IPsec 路由

Linux 中基于策略的 IPsec 路由

在 Linux 中,当涉及到基于路由的 IPsec 隧道时,它非常简单。安装主要的 ipsec 实现之一。建立安全关联,在每个端点上添加 VTI 接口,向 VTI 添加标记,更改一些 sysctl opts,然后您就可以在两个端点之间路由流量。

在执行基于策略的路由时,如何路由流量?到目前为止,我遇到的所有教程都只提到如何设置 ipsec 连接,但没有一个真正解释如何在两个端点之间路由流量或此过程需要哪些额外步骤。我是否要创建隧道?我是否必须标记它?添加路由?如果是这样,那么这与基于路由的设置有何不同?

有人可以解释一下这一点吗?

答案1

“通常,IPsec 处理基于策略。完成常规路由查找后,操作系统内核将查询其安全策略数据库以查找匹配的策略,如果找到与 IPsec SA 关联的策略,则处理该数据包。

根据操作系统,还可以配置基于路由的 VPN。此处 IPsec 处理不(仅)依赖于协商的策略,但可能通过将数据包路由到特定接口来控制。

来源:基于路由的VPN

因此,基于策略的路由与操作系统的路由表无关,但它使用单独的“数据库”,因此ip route这里不涉及这些内容。您可以使用 IPSec 配置设置这些策略。IPSec 可以自行进行隧道传输。

ip route以下是我的输出swanctl --list-sas(我正在使用swanctl配置和控制斯特朗斯旺):

在此处输入图片描述

如您所见,我的托管服务器 sv1 (37.17.xx) 和我的家庭路由器 (87.97.xx) 之间建立了 IPSec 连接。服务器的路由表只有默认设置,但您可以看到名为 和 的 IPSec 策略home-invitelhome-securewifi它们分别home-lan将来自服务器的所有流量路由到家庭 LAN 子网192.168.100.0/24和。第四个名为 sv1-local 的策略路由我家庭端点192.168.87.0/28和服务器上的本地子网192.168.88.0/24之间的流量。10.1.1.0/24

这是我在服务器上使用的 swanctl 配置:

connections {
        home {
                local_addrs = 37.17.x.x
                remote_addrs = vpn.example.org
                version = 2
                proposals = aes256-sha256-ecp384
                keyingtries = 0
                dpd_delay = 60s
                local1 {
                        auth = psk
                }
                remote1 {
                        auth = psk
                }
                children {
                        sv1-local {
                                local_ts = 10.1.1.0/24
                                esp_proposals = aes256gcm16-ecp384
                                dpd_action = restart
                                close_action = start
                                start_action = start
                        }
                        home-securewifi {
                                remote_ts = 192.168.87.0/28
                                esp_proposals = aes256gcm16-ecp384
                                dpd_action = restart
                                close_action = start
                                start_action = start
                        }
                        home-lan {
                                remote_ts = 192.168.88.0/24
                                esp_proposals = aes256gcm16-ecp384
                                dpd_action = restart
                                close_action = start
                                start_action = start
                        }
                        home-invitel {
                                remote_ts = 192.168.100.0/24
                                esp_proposals = aes256gcm16-ecp384
                                dpd_action = restart
                                close_action = start
                                start_action = start
                        }
                }
        }
}

secrets {
        ike-local {
                id = 37.17.x.x
                secret = "preshared-secret-key-goes-here"
        }
        ike-remote {
                id = vpn.example.org
                secret = "preshared-secret-key-goes-here"
        }
}

例如,当我从 sv1 ping 到 192.168.88.5 时:

  • 操作系统检查路由表,但未发现 192.168.88.5 特定规则
  • 然后操作系统检查 IPSec 策略数据库以查找匹配的策略
  • 家庭局域网策略匹配,因此操作系统将数据包发送给 IPSec
  • IPSec 封装(加密)数据包并通过家庭局域网隧道发送
  • 我的家庭路由器接收封装(加密)的数据包,在其自己的 IPSec 策略数据库中找到匹配的策略,解封装(解密)该数据包并将现在未加密的数据包发送到 192.168.88.5

答案2

基于策略的路由的关键是ip ruleip route。创建一个新的路由表,并根据规则将流量放入路由表中。查看Description相应手册页的部分以了解更多详细信息。

相关内容