il path di fallback per eliminare i pacchetti se l'interface di output che NAT è scesa?

Sfondo:

Stabilisco una connessione a un pacchetto VPN e NAT di terze parti contrassegnato come parte di un particolare gruppo (per eseguire selettivamente i processi tramite VPN) al dispositivo VPN tuning di terze parti (tun2 in questo esempio) e utilizzando un route- up impostare il gateway predefinito come VPN per una tabella di path separata chiamata 'vpn'. Che tutto funziona con quanto segue (alcuni dettagli minori sono omessi).

  • Utilizzando contemporaneamente KVM e VirtualBox VM
  • Come installare Java in Linux?
  • MySQL: max_allowed_packet Più di 1 GB è ansible?
  • Qual è la soluzione migliore per il controllo del traffico in un grande sistema (circa 2000 utenti)?
  • Disfarsi di un buffer di riproduzione di console Linux?
  • Modifica di file sudoers per limitare i comandi di un utente
  • eseguire all'avvio:

    iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x00110011 -j MARK --set-mark 11 iptables -t nat -A POSTROUTING -m cgroup --cgroup 0x00110011 -o tun2 -j MASQUERADE ip rule add fwmark 11 table vpn 

    contenuto in openvpn client.conf:

     route-noexec route-up /etc/openvpn/3rdparty/routeup.sh 

    e routeup.sh per impostare il gateway predefinito per la tabella di route vpn

     #!/bin/bash /sbin/ip route replace default via $route_vpn_gateway dev $dev table vpn 

    Problema: se l'interface VPN di terza parte (tun2) scende (es. Crash openvpn), nella route table 'vpn' non esiste più un path predefinito e tutto il traffico (anche quello che viene eseguito all'interno del mio gruppo separato) la tabella principale e l'interface eth0 predefinita. Quindi devo impostare un path di ripristino nell'iptables o nella tabella di path "vpn" separata. Se uso qualcosa di simile,

     iptables -A OUTPUT -m cgroup --cgroup 0x00110011 -o eth0 -j REJECT 

    finisce solo per abbandonare tutti i pacchetti, così chiaramente questo viene elaborato prima che la voce di nat è. Allo stesso modo, non riesco a trovare un modo per utilizzare 'ip route' per modificare la tabella di path per 'vpn' in modo che una volta che la voce di gateway predefinita viene rimossa dopo che l'interface tun2 scompare blocca tutto il traffico. Invece non c'è alcuna voce e sembra che tutto il traffico va solo alla tabella di routing successiva, che deve essere principale.

    UPDATE: Ho ora trovato una soluzione completa al problema del process di esecuzione selettiva attraverso una VPN.

    https://serverfault.com/a/766290/345463

  • getpwnam ("www") non è riuscito in /etc/nginx/nginx.conf
  • Incollaggio di interfacce legate in Linux
  • Come posso logicamente registrare tutte le azioni di script di bash?
  • Strumento superiore per il traffico IP
  • Avviare automaticamente PHP-FPM con l'opzione root
  • iptables bloccando il tunnel ssh
  • One Solution collect form web for “il path di fallback per eliminare i pacchetti se l'interface di output che NAT è scesa?”

    Ho potuto farlo funzionare utilizzando il parametro metrico con iproute2. Quindi il mio script di itinerario è stato modificato come segue

     #!/bin/bash /sbin/ip route add default via $route_vpn_gateway dev $dev metric 1 table vpn 

    e assicuro di includere anche una voce black-hole fallback con un valore metrico superiore (valori inferiori prendono priorità) per bloccare tutto il traffico. Questo potrebbe essere eseguito al boot con le altre righe che ho elencato nella mia domanda.

     ip route add blackhole default metric 2 table vpn 

    Questo funziona ottimo

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.