Strongswan VTI
Při sestavovaní IPSec tunnelu můžeme buď mezi dvěma hosty udělat GRE nebo jiný IPIP tunnel a ten balit do IPSec. Zde pak můžeme směrovat provoz který chcecme přes tunnel odbavit. Ale spíše se stekáme s plochým IPSec kdy máme na každé straně zadány sítě/hosty kteří se mají přes tunnel poslat. A pokud provoz teto mapě/politice vyhoví tak se zabalí do IPSec a pošle druhé straně. V tomto případě je problém s debugem provozu protože v určité fázi už vidíme provo zašifrován. Řešením je VTI což je virtuální interface. Z kterého a do kterého budeme provoz směrovat stejně jako kamkoliv a přitom politiky budou nastaveny stejně jako u plocheho IPSec (druhá strana o našem VTI ani nemusí tušit). Tímto si jsme schopni zlepšit podmínky pro debug IPSec provozu a stejně tak zjednodušit firewall pravidla (kdy nám tunnelovaný provoz končí v nějakém jednotném interface).
Výhody VTI tunnelu tedy spočivají:- v lepším debug
- možnosti odsměrovat jen část provozu který je v SA
Pro zprovoznění ve Strongswan nejdříve musíme nastavit aby nám daemon nepřidával routy do tabulky 220 a tím se nesnažil provoz posílat klasicky jako plochý IPSec. Tuto změny provedeme úpravou konfiguračního souboru:
/etc/strongswan/strongswan.d/charon.conf
install_routes = no
Dále si pro daný tunnel nastavíme značkovaní provozu které nám pak zajistí správně zařazení do správneho VTI interface.
mark=66
Abychom zařízeni nemuseli vytvářet ručně. Můžeme Strongswanu připravit script který bude spouštět při nahození/shození tunnelu.
leftupdown=/etc/strongswan/vpnupdown.sh
Zde je již samotný script:
IP=$(which ip)
IPTABLES=$(which iptables)
PLUTO_MARK_OUT_ARR=(${PLUTO_MARK_OUT//// })
PLUTO_MARK_IN_ARR=(${PLUTO_MARK_IN//// })
VTI_INTERFACE=vti${PLUTO_MARK_OUT_ARR[0]}
case "${PLUTO_VERB}" in
up-client)
$IP link add ${VTI_INTERFACE} type vti local ${PLUTO_ME} remote ${PLUTO_PEER} okey ${PLUTO_MARK_OUT_ARR[0]} ikey ${PLUTO_MARK_IN_ARR[0]}
sysctl -w net.ipv4.conf.${VTI_INTERFACE}.disable_policy=1
sysctl -w net.ipv4.conf.${VTI_INTERFACE}.rp_filter=0
$IP link set ${VTI_INTERFACE} up mtu 1436
$IP route add ${PLUTO_PEER_CLIENT} dev ${VTI_INTERFACE}
;;
down-client)
$IP tunnel del ${VTI_INTERFACE}
;;
esac
Po nahození tunnelu se pak vytvoří VTI zařízeni s číslem podle nastaveneho mark. Tedy v tomto případě vti66 a bude do něj směrována síť v leftsubnet.