Am un server de acces la distanță StrongSwan IPSec care rulează pe RHEL și un client, toate pe aceeași rețea locală. Am un server Samba care rulează pe aceeași gazdă RHEL pe care vreau să fie disponibil prin VPN, dar nu în afara tunelului. Pot să pornesc tunelul IPSec cu succes (a trebuit să fac un profil MacOS cu Apple Configurator2 care să permită Perfect Forward Security pentru a avea o potrivire ciphersuite) dar nu pot face ca traficul să fie direcționat corect în interiorul serverului.Am făcut o captură de pachet și am putut vedea pachetele ESP de intrare și ICMP decriptate dintr-un ping de la client, dar serverul nu a putut răspunde. Am petrecut câteva săptămâni încercând să aflu ce reguli iptables am nevoie pentru a obține conectivitate, dar cred că îmi lipsește un fel de înțelegere. Am reușit să configurez VPN-uri OpenVPN și WireGuard, fără nicio problemă cu interfețele tun, dar IPSec, după înțelegerea mea, este decriptat de politica din nucleu, așa că nu sunt familiarizat cu modul în care ar afecta rutarea.
Mi-am bazat configurația pe documentele de exemplu oficiale StrongSwan pentru acces de la distanță, a folosit asta Swanctl config doc, a citit postările de pe forum și a tradus formatul mai vechi în cel mai nou cu acest - precum și citiți despre expediere și VPN-uri bazate pe rute - dar cred că îmi lipsește înțelegerea la nivel înalt despre modul în care rutele traficului în serverul VPN.
Diagrama de rețea logică
Diagrama de rețea logică
swanctl.conf (cu alte lucruri comentate pe care le-am încercat)
conexiuni {
ikev2-vpn {
fragmentare=da
rekey_time=0s
#mobike = nu
versiune=2
propuneri=aes256gcm16-prfsha384-ecp384
remote_adrs=%orice
adrese_locale=192.168.1.15
#vips=10.0.3.1
#remote_addrs=192.168.1.23
#pools=10.0.3.0/24
#encap=da
#dpd_delay=300s
piscine=pool1,pool2
#if_id_in=6
#if_id_out=6
copii {
ikev2-vpn {
#start_action=niciuna
esp_proposals=aes256gcm16-prfsha384-ecp384
#local_ts=10.0.3.1/32
local_ts=10.0.1.0/24
remote_ts=10.0.2.0/24
#remote_ts=10.0.3.10-10.0.3.200
#dpd_action=clear
updown=/usr/libexec/strongswan/_updown iptables
}
}
local {
auth=ecdsa-384-sha384
certs = /etc/strongswan/ipsec.d/certs/server.crt
id = 192.168.1.15
}
la distanta {
auth=ecdsa-384-sha384
id = %oricare
}
}
}
piscine {
piscina1 {
#addrs=10.0.3.0/24
adrese=10.0.1.0/24
}
piscina2 {
#addrs=10.0.3.10-10.0.3.200
adrese=10.0.2.0/24
}
}
secrete {
ecdsa-server {
file=/etc/strongswan/ipsec.d/private/server.key
}
ecdsa-client {
file=/etc/strongswan/ipsec.d/private/client.key
}
}
Autoritățile {
certitudine {
cacert = /etc/strongswan/ipsec.d/cacerts/ca.crt
}
}
swanctl --list-sas
ikev2-vpn: #2, ESTABLISHED, IKEv2, c98d6dc49ca0acd4_i 85342c9a0809e294_r*
local „192.168.1.15” @ 192.168.1.15[4500]
la distanță „client2.vpn” @ 192.168.1.23[4500] [10.0.1.1]
AES_GCM_16-256/PRF_HMAC_SHA2_384/ECP_384
înființată acum 53 de ani
ikev2-vpn: #4, reqid 1, INSTALED, TUNNEL, ESP:AES_GCM_16-256
instalat acum 53 de secunde, reintroducerea tastei în 3247s, expiră în 3907s
în c334ea0b, 0 octeți, 0 pachete
out 021348d4, 0 octeți, 0 pachete
local 10.0.1.0/24
la distanță 10.0.2.0/24
swanctl --list-conns
ikev2-vpn: IKEv2, fără reautentificare, fără rekeying
local: 192.168.1.15
telecomandă: %oricare
autentificare cu cheie publică locală:
id: 192.168.1.15
certificate: [CERT_DN]
autentificare la distanță cu cheie publică:
id: %oricare
ikev2-vpn: TUNNEL, reintroducere la fiecare 3600 de secunde
local: 10.0.1.0/24
la distanță: 10.0.2.0/24
starea ip -s xfrm
src 192.168.1.15 dst 192.168.1.23
proto esp spi 0x021348d4(34818260) reqid 1(0x00000001) mod tunel
fereastra de reluare 0 secv 0x00000000 steag af-unspec (0x00100000)
aead rfc4106(gcm(aes)) [KEY] (288 biți) 128
context anti-reluare: seq 0x0, oseq 0x0, bitmap 0x00000000
configurație de viață:
limită: soft (INF)(octeți), hard (INF)(octeți)
limită: soft (INF)(pachete), hard (INF)(pachete)
expirare adăugare: soft 3418 (sec), greu 3960 (sec)
utilizare expiră: moale 0 (sec), greu 0 (sec)
curent de viață:
0 (octeți), 0 (pachete)
adăugați [TIME] folosiți -
statistici:
fereastra de reluare 0 reluare 0 eșuat 0
src 192.168.1.23 dst 192.168.1.15
proto esp spi 0xc334ea0b(3275024907) reqid 1(0x00000001) mod tunel
fereastra de reluare 32 seq 0x00000000 flag af-unspec (0x00100000)
aead rfc4106(gcm(aes)) [KEY] (288 biți) 128
context anti-reluare: seq 0xc, oseq 0x0, bitmap 0x00000fff
configurație de viață:
limită: soft (INF)(octeți), hard (INF)(octeți)
limită: soft (INF)(pachete), hard (INF)(pachete)
expirare adăugare: soft 3300 (sec), greu 3960 (sec)
utilizare expiră: moale 0 (sec), greu 0 (sec)
curent de viață:
1008 (octeți), 12 (pachete)
adăugați [TIME] folosiți [TIME]
statistici:
fereastra de reluare 0 reluare 0 eșuat 0
Politica ip xfrm arată
src 10.0.1.0/24 dst 10.0.2.0/24
dir out prioritate 375423 ptype main
tmpl src 192.168.1.15 dst 192.168.1.23
proto esp spi 0x021348d4 reqid 1 mod tunel
src 10.0.2.0/24 dst 10.0.1.0/24
dir fwd prioritate 375423 ptype main
tmpl src 192.168.1.23 dst 192.168.1.15
proto esp reqid 1 mod tunel
src 10.0.2.0/24 dst 10.0.1.0/24
dir în prioritate 375423 ptype main
tmpl src 192.168.1.23 dst 192.168.1.15
proto esp reqid 1 mod tunel
src 0.0.0.0/0 dst 0.0.0.0/0
socket în prioritate 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket în prioritate 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0 ptype main
src ::/0 dst ::/0
socket în prioritate 0 ptype main
src ::/0 dst ::/0
socket out priority 0 ptype main
src ::/0 dst ::/0
socket în prioritate 0 ptype main
src ::/0 dst ::/0
socket out priority 0 ptype main
iptables-salvare
# Generat de iptables-save v1.8.4
*Securitate
:INPUT ACCEPT [22858074:106762962340]
: FORWARD ACCEPT [7:588]
: ACCEPT IEȘIRE [13832427:3964756363]
COMMIT
# Generat de iptables-save v1.8.4
*brut
:ACCEPTAREA PRE-ROUTARE [22858911:106763119967]
: ACCEPT IEȘIRE [13832428:3964756655]
COMMIT
# Generat de iptables-save v1.8.4
*calandru
:ACCEPTAREA PRE-ROUTARE [22858911:106763119967]
:INPUT ACCEPT [22858308:106763007491]
: FORWARD ACCEPT [7:588]
: ACCEPT IEȘIRE [13832428:3964756655]
: POSTROUTING ACCEPT [13833383:3964877586]
:LIBVIRT_PRT - [0:0]
-A POSTROUTING -j LIBVIRT_PRT
-A LIBVIRT_PRT -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Generat de iptables-save v1.8.4
*nat
:ACCEPTAREA PRE-ROUTARE [186346:34394324]
:INPUT ACCEPT [185651:34259782]
: POSTROUTING ACCEPT [16086:1727773]
: ACCEPT IEȘIRE [16085:1727689]
:LIBVIRT_PRT - [0:0]
-A POSTROUTING -j LIBVIRT_PRT
-A POSTROUTING -s 172.16.0.0/24 -o enp0s31f6 -j MASQUERADE
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADA
COMMIT
# Generat de iptables-save
*filtru
:INPUT ACCEPT [22831621:106727043679]
: FORWARD ACCEPT [0:0]
: ACCEPT IEȘIRE [13832420:3964757167]
:LIBVIRT_INP - [0:0]
:LIBVIRT_OUT - [0:0]
:LIBVIRT_FWO - [0:0]
:LIBVIRT_FWI - [0:0]
:LIBVIRT_FWX - [0:0]
-A FORWARD -s 10.0.2.0/24 -d 10.0.1.0/24 -i enp0s31f6 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A FORWARD -s 10.0.1.0/24 -d 10.0.2.0/24 -o enp0s31f6 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A LIBVIRT_INP -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A LIBVIRT_INP -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A LIBVIRT_INP -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A LIBVIRT_INP -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A LIBVIRT_OUT -o virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A LIBVIRT_OUT -o virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A LIBVIRT_OUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A LIBVIRT_OUT -o virbr0 -p tcp -m tcp --dport 68 -j ACCEPT
-A LIBVIRT_FWO -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A LIBVIRT_FWO -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A LIBVIRT_FWI -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A LIBVIRT_FWI -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A LIBVIRT_FWX -i virbr0 -o virbr0 -j ACCEPT
COMMIT