St4nd3l blog

Podivné zápisky

Strongswan VTI

2018-10-03

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í:
  1. v lepším debug
  2. 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.