Per risolvere questo problema dovrai impostare sia iptables che regole di routing. Il problema specifico che stai riscontrando è che i pacchetti SSH in uscita vengono instradati tramite l'interfaccia tunnel VPN anonima anziché l'interfaccia Ethernet. Questo accade perché il tuo software VPN ha impostato una regola di routing per inviare tutto il traffico non gestito tramite l'interfaccia del tunnel. Buono per anonimizzare il traffico di rete; male per stabilire connessioni SSH al tuo computer.
Ci sono alcuni modi per risolvere questo problema, ma condividerò con te quello che ha funzionato per me in una situazione identica. Ecco cosa dobbiamo fare:
- Creare una nuova tabella delle regole IP per gestire il traffico non VPN
- Aggiungi una regola IP per cercare la nostra tabella no-VPN per tutti i pacchetti contrassegnati con una maschera netfilter specifica
- Aggiungi una route IP che indirizzi tutto il traffico nella nostra tabella no-VPN per utilizzare la tua interfaccia Ethernet anziché il tunnel
- Aggiungi una regola iptables per contrassegnare tutto il traffico SSH con la nostra maschera netfilter designata
Nota: stavo lavorando con Raspbian mentre stavo facendo quanto segue, quindi potresti aver bisogno di regolare un po 'i comandi per adattarli alla tua distribuzione.
Creazione di una nuova tabella delle regole IP
Inizia controllando il file di definizione della tabella di iproute2. Vogliamo assicurarci di non utilizzare il nome o il numero di alcuna tabella di regole esistente.
cat /etc/iproute2/rt_tables
Probabilmente vedrai qualcosa in questo senso:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
Scegli un numero e un nome arbitrari per la tua nuova tabella delle regole, qualsiasi cosa non utilizzata sopra. Userò il numero 201 e il nome novpn
per il resto di questa risposta.
Aggiungi una definizione direttamente al file di definizione o modificala nell'editor di testo che preferisci:
echo "201 novpn" >> /etc/iproute2/rt_tables
Aggiungi una nuova regola IP per cercare la tabella no-VPN
Controlla eventuali regole ip esistenti che si occupano di maschere netfilter:
ip rule show | grep fwmark
Se grep non presenta nulla, sei in chiaro. Se stampa alcune righe, prendi nota del numero esadecimale a destra della parola fwmark
in ogni riga. Dovrai scegliere un numero che non è attualmente in uso. Poiché non avevo regole fwmark esistenti, ho scelto il numero 65.
ip rule add fwmark 65 table novpn
Ciò fa sì che qualsiasi pacchetto con netfilter mask 65 cerchi la nostra nuova novpn
tabella per istruzioni su come instradare i pacchetti.
Indirizza tutto il traffico nella nostra nuova tabella per utilizzare l'interfaccia Ethernet
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
La cosa importante da notare qui è dev eth0
. Ciò impone a tutto il traffico che passa attraverso la novpn
tabella di utilizzare solo l'interfaccia Ethernet hardware, anziché l'interfaccia del tunnel virtuale creata dalla VPN.
Ora sarebbe un buon momento per svuotare la cache di iproute, per assicurarsi che le nuove regole e percorsi abbiano effetto immediato:
ip route flush cache
Indicare alla regola del firewall di contrassegnare tutto il traffico SSH con la maschera netfilter designata
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
Ci sono troppe opzioni qui per me da spiegare in modo approfondito. Ti incoraggio vivamente a leggere la pagina di manuale di iptables per avere un'idea di cosa sta succedendo qui:
man iptables
In breve: stiamo aggiungendo una regola di output alla tabella mangle del firewall (per la gestione di pacchetti specializzati) che indica di contrassegnare qualsiasi pacchetto TCP proveniente dalla porta di origine 22 con la nostra maschera 65 di netfilter designata.
Quale prossimo?
A questo punto, dovresti essere pronto per testare SSH. Se tutto va bene, dovresti ricevere il felice prompt "accedi come".
Per motivi di sicurezza, ti consiglio di indicare al firewall di eliminare qualsiasi richiesta SSH in arrivo dall'interfaccia del tunnel:
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
Si noti che tutte le istruzioni sopra riportate sono transitorie (ad eccezione della creazione dell'ID della tabella delle regole): verranno cancellate al successivo riavvio del computer. Renderli permanenti è un esercizio che ti lascio.