來自 xfrm 介面的封包不會路由,但相反的工作

來自 xfrm 介面的封包不會路由,但相反的工作

我正在開發一個站點到站點的 VPN,其中一個端是 UDM,另一個是 Strongswan。目標是提供到雲端環境的雙向路由。我完全困惑為什麼這不起作用。

好消息是 Strongswan 已連接並將傳輸流量。但我在 Strongswan 方面遇到了一些路由問題。我的 Strongswan 主機有兩個接口,eth0,eth0 上有公共互聯網 IP,eth1 上有內部 IP 10.132.169.74

  • 區域網路[s]:10.87.0.0/24、10.87.35.0/24、10.87.235.0/24
  • 雲端網路:10.132.0.0/16
  • 10.87.0.1 = UDM
  • 10.132.169.74 = Strongswan eth1並連接到內部雲端網路10.132.0.0/16
  • 10.87.0.33 = LAN 網路上的測試主機
  • 10.132.40.82 = 雲端網路上的測試主機

現在的情況:

  • 從 10.87.0.33(Lan 測試主機)-> 10.132.169.74(Strongswan)執行 ping 操作有效
  • 從 10.132.169.74 (Strongswan) -> 10.87.0.33(Lan 測試主機)執行 ping 操作有效
  • 從 10.132.40.82(雲端測試主機)-> 10.87.0.33(區域網路測試主機)執行 ping 操作有效
  • 從 10.87.0.33(區域網路測試主機)-> 10.132.40.82(雲端測試主機)執行 ping 操作不起作用,這是所有這一切中最重要的事情

以下是 Strongswan 主機 10.132.169.74 的路由表:

default via x.x.x.x dev eth0 proto static 
10.17.0.0/16 dev eth0 proto kernel scope link src 10.17.0.21 
10.19.49.0/24 dev wg0 proto kernel scope link src 10.19.49.1 
10.87.0.0/16 dev ipsec0 scope link src 10.132.169.74 
10.132.0.0/16 dev eth1 proto kernel scope link src 10.132.169.74 
x.x.x.y/20 dev eth0 proto kernel scope link src x.x.x.z

這是雲端測試主機(10.132.40.82)上的路由表:

default via x.x.x.x dev eth0 proto static 
10.17.0.0/16 dev eth0 proto kernel scope link src 10.17.0.24 
10.87.0.0/16 via 10.132.169.74 dev eth1 
10.132.0.0/16 dev eth1 proto kernel scope link src 10.132.40.82 
x.x.x.y/20 dev eth0 proto kernel scope link src x.x.x.z 

在 Strongswan 主機上,我正在執行以下操作:

sudo ip link add ipsec0 type xfrm dev eth0 if_id 4242
sudo ip link set ipsec0 up
sudo ip route add 10.87.0.0/16 dev ipsec0 src 10.132.169.74

最後這是我的天鵝配置:

sudo tee /etc/strongswan.d/charon-systemd.conf  << "EOF"
charon-systemd {
  load=pem pkcs1 x509 revocation constraints pubkey openssl random random nonce aes sha1 sha2 hmac pem pkcs1 x509 revocation curve25519 gmp curl kernel-netlink socket-default updown vici
  journal {
    default=0
    # enc=1
    # asn=1
  }
}
EOF

sudo tee /etc/swanctl/conf.d/xyz.conf << "EOF"
connections {
  vpn-cloud-udm-lan {
    version=2
    proposals=aes128gcm16-sha256-modp2048,aes128-sha256-modp2048
    unique=replace
    encap=yes
    local {
      id=x.x.x.x
      auth=psk
    }
    remote {
      auth=psk
    }
    children {
      net {
        local_ts=10.132.0.0/16
        remote_ts=10.87.0.0/16
        esp_proposals=aes128gcm16-sha256-modp2048,aes128-sha256-modp2048
        start_action=trap
        if_id_in=4242
        if_id_out=4242
      }
    }
  }
}
secrets {
  ike-1 {
    id-vpn-cloud=x.x.x.x
    secret="somesecret"
  }
  ike-2 {
    id-udm-lan=y.y.y.y
    secret="somesecret"
  }
}
EOF

和 Strongswan 主機上的 sysctl:

net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0

sudo swanctl --list-sas顯示活動隧道,當我執行 ping 操作時,我可以看到計數器上升。此外,在雲端測試主機上偵聽的 tcpdump 顯示沒有流量到達,但在特定場景中 Strongswan 主機上的 tcpdump 確實顯示了流量,因此它被丟棄在那裡。

任何幫助表示感謝,謝謝!

答案1

因此,經過多次搖頭(不是搖滾樂的那種)和咬牙切齒之後,我從這個答案中弄清楚了:https://www.digitalocean.com/community/questions/site-to-site-vpn-support-any-updates

Digital Ocean 在專用介面上丟棄資料包。所以我添加了一條防火牆規則以允許來自 10.87.0.0/24 的流量,哇!太糟糕了!

相關內容