Hej,
Jag använder Ubuntu 22.04 och har skapat en Ubuntu 22.04 Server virtuell maskin med hjälp av virt-manager
(QEMU/KVM). NIC är konfigurerad i Bridge och jag kan komma åt internet från Gästmaskinen. När värden är ansluten till ett VPN (t.ex. via OpenVPN), använder Gästmaskinen samma nätverksanslutning (net.ipv4.ip_forward=1
) och har därför tillgång till resurser inom VPN.
Mina arbetsgivare har nyligen gått över till Cisco AnyConnect VPN som är konfigurerad att använda SAML. Medan det fungerar bra på värdmaskinen med AnyConnect-klienten, har Gästmaskinen inte tillgång till resurser på VPN.
Var det någon som lyckades med en sådan setup? Jag försökte använda openconnect
och openconnect-sso
men utan framgång – jag tror det beror på SAML-konfigurationen. Jag funderade också på att installera AnyConnect på Gästmaskinen som en sista utväg, men AnyConnect stöder inte SAML via CLI. Tack på förhand.
Jag lyckades hitta en lösning genom att implementera följande regler i IPTables på värdmaskinen
iptables --insert ciscovpn 102 --protocol all --src 10.0.0.0/8 --dst 192.168.122.0/24 --jump RETURN
iptables --insert ciscovpn 103 --protocol all --src 192.168.122.0/24 --dst 10.0.0.0/8 --jump RETURN
Notera att dessa regler kan behöva justeras eftersom deras positioner (102 och 103) är hårdkodade (och de måste vara hårdkodade för att ligga i föregående DROP-regler).
Problemet är att Cisco VPN installerar flera IPTables-regler (i en kedja kallad ‘ciscovpn’) för att säkerställa att endast VPN-IP:t får kommunicera över tunneln. Problemet är att Linux/IPTables utför source NAT (från Gästmaskinens IP till VPN-interfaces IP) efter routingen och brandväggen (dvs. i POSTROUTING-tabellen). Som ett resultat har paketet fortfarande Gästmaskinens IP när ciscovpn-FW-reglerna bearbetas och därmed blockeras.
Jag funderade också på att installera AnyConnect på Gästmaskinen som en sista utväg, men AnyConnect stöder inte SAML via CLI.
Jag använder det också i mitt jobb. Det har en grafisk klient (vpnui) som stöder SSO och även 2FA.
Det här var superhjälpsamt, tack! Jag skrev ett snabbt litet skript:
LINE=$(iptables --list ciscovpn -v -n --line-numbers | grep 'DROP' | head -n 1 | awk -F ' ' '{print $1}')
COUNT=$(($LINE - 1))
iptables --insert ciscovpn ${COUNT} --protocol all --src 192.168.122.0/24 --dst 0.0.0.0/0 --jump RETURN
iptables --insert ciscovpn ${COUNT} --protocol all --src 10.0.0.0/8 --dst 192.168.122.0/24 --jump RETURN
Jag ändrade också raden med virt subnätet till destinationen 0.0.0.0/0 så att VM kunde pinga ut till allt.
Jag förstår att detta skulle kräva Ubuntu GUI, eller hur?