Ipsec

linux中基於策略的IPsec路由

  • July 10, 2018

在 linux 中,當談到基於路由的 IPsec 隧道時,它非常簡單。安裝主要的 ipsec 實現之一。建立您的安全關聯,在每個端點上添加一個 VTI 介面,向 VTI 添加一個標記,更改一些 sysctl 選項,然後您可以在兩個端點之間路由流量。

在進行基於策略的路由時如何路由流量?到目前為止,我遇到的所有教程都只提到瞭如何設置 ipsec 連接,但沒有一個真正解釋如何在兩個端點之間路由流量或此過程需要哪些額外步驟。我要創建隧道嗎?我必須標記它嗎?添加路線?如果是這樣,那麼這與基於路由的設置有何不同?

有人可以對此有所了解嗎?

“通常,IPsec 處理基於策略。在完成定期路由查找後,作業系統核心會諮詢其安全策略數據庫以獲取匹配的策略,如果發現與 IPsec SA 相關聯的策略,則處理數據包。

根據作業系統,還可以配置基於路由的 VPN。在這裡,IPsec 處理不(僅)依賴於協商的策略,而是可以通過將數據包路由到特定介面來控制。”

來源:RouteBasedVPN

因此,基於策略的路由與作業系統的路由表無關,但它使用的是單獨的“數據庫”,因此ip route此處不適用。您可以使用 IPSec 配置設置這些策略。IPSec 可以自己做隧道。

這是我的ip routeand的輸出swanctl --list-sas(我正在使用swanctl來配置和控制strongswan):

在此處輸入圖像描述

如您所見,我的託管伺服器 sv1 (37.17.xx) 和我的家庭路由器 (87.97.xx) 之間有一個 IPSec 連接。伺服器的路由表只有預設設置,但您可以看到名為 的 IPSec 策略home-invitel,它將每個流量從伺服器路由到家庭LAN子網home-securewifi和。第四個稱為 sv1-local 的策略在我的家庭端點和伺服器上的本地子網之間路由流量。home-lan``192.168.100.0/24``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 封裝(加密)數據包並通過 home-lan 隧道發送
  • 我家路由器收到封裝(加密)的數據包,在自己的 IPSec 策略數據庫中找到匹配的策略,解封裝(解密)數據包並將現在未加密的數據包發送到 192.168.88.5

引用自:https://serverfault.com/questions/919408