Ich arbeite an einem Site-to-Site-VPN, bei dem ein Ende ein UDM und das andere Strongswan ist. Das Ziel ist, bidirektionales Routing in eine Cloud-Umgebung bereitzustellen. Ich bin völlig verblüfft, warum das nicht funktioniert.
Die gute Nachricht ist, dass Strongswan eine Verbindung herstellt und den Datenverkehr weiterleitet. Aber ich habe einige Routing-Probleme auf der Strongswan-Seite. Mein Strongswan-Host hat zwei Schnittstellen, eth0, das die öffentliche Internet-IP auf eth0 hat, und eine interne IP von 10.132.169.74 auf eth1
- LAN-Netzwerk[e]: 10.87.0.0/24, 10.87.35.0/24, 10.87.235.0/24
- Cloud-Netzwerk: 10.132.0.0/16
- 10.87.0.1 = UDM
- 10.132.169.74 = Strongswan eth1 und verbindet sich mit dem internen Cloud-Netzwerk 10.132.0.0/16
- 10.87.0.33 = Testhost im LAN-Netzwerk
- 10.132.40.82 = Testhost im Cloud-Netzwerk
momentane Situation:
- Ping von 10.87.0.33 (Lan-Testhost) -> 10.132.169.74 (Strongswan) funktioniert
- Ping von 10.132.169.74 (Strongswan) -> 10.87.0.33 (Lan-Testhost) funktioniert
- Ping von 10.132.40.82 (Cloud-Testhost) -> 10.87.0.33 (Lan-Testhost) funktioniert
- Ping von 10.87.0.33 (Lan-Testhost) -> 10.132.40.82 (Cloud-Testhost) Funktioniert nicht, was das Wichtigste an der ganzen Sache ist
Hier ist die Routing-Tabelle des Strongswan-Hosts 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
Hier ist die Routing-Tabelle auf dem Cloud-Testhost (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
Auf dem Strongswan-Host führe ich Folgendes aus:
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
Und hier ist schließlich meine Swan-Konfiguration:
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
und mein Sysctl auf dem Strongswan-Host:
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
zeigt aktive Tunnel an und wenn ich pinge, kann ich sehen, wie die Zähler hochgehen. Darüber hinaus zeigt ein TCPdump, der auf dem Cloud-Testhost lauscht, keinen eingehenden Datenverkehr an, aber ein TCPdump auf dem Strongswan-Host in dem bestimmten Szenario zeigt den Datenverkehr an, sodass er dort gelöscht wird.
Jede Hilfe ist willkommen, danke!
Antwort1
Nach viel Headbangen (nicht die Art, die man bei Rockmusik macht) und Zähneknirschen habe ich es anhand dieser Antwort herausgefunden:https://www.digitalocean.com/community/questions/site-to-site-vpn-support-any-updates
Digital Ocean hat Pakete auf privaten Schnittstellen verloren. Also habe ich eine Firewall-Regel hinzugefügt, um Datenverkehr von 10.87.0.0/24 zuzulassen, und voilà! ES FUNKTIONIERT!!!