GNU/Linux >> Linux Esercitazione >  >> Linux

Linux – Routing tramite Iptables?

Ho questo client VPN che tocca la tabella di routing e poi continua a guardarlo per uscire se viene toccato.
È il tipo di configurazione necessaria per un endpoint, come un laptop.

Voglio utilizzare un piccolo PC come endpoint VPN e instradarlo per altre macchine sulla mia LAN (192.168.0.0/24).
Poiché non riesco a toccare la tabella di routing e tutti i pacchetti vengono forzati tramite le VPN tun0, stavo pensando che iptables potrebbe aiutarmi a POSTROUTE riportare i pacchetti alla rete 192.168.0.0 sul dispositivo eth1.
Non sono sicuro di come funzionerebbe, perché una volta terminato eth1 dovrebbe risolvere l'IPtoMAC perché è già sulla rete di destinazione e non so se il pacchetto è già stato risolto o non accadrà finché non raggiunge l'iface.
Qualche suggerimento?

Risposta accettata:

Dal momento che non hai fornito ulteriori informazioni, non sono sicuro di come rispondere al meglio.

Quindi ecco il mio tentativo di darti alcune indicazioni, ignorando volutamente che non puoi modificare la tua tabella di routing (capirai perché leggendo il mio suggerimento):

A seconda del client VPN e di dove si aggancia alla FIB (forward information base) del kernel, potresti avere un po' di fortuna in quanto il monitoraggio della FIB o, usando la tua tabella di routing delle espressioni, tramite la VPN avviene solo per il local e main tabelle delle regole. Puoi controllare le tue regole di routing utilizzando

ip rule show

Per ciascuna delle stringhe dietro il tag "lookup" (che sono le voci della tabella delle regole), puoi interrogare le informazioni di instradamento corrispondenti dalla FIB, usando

ip route show table <name>

Con un po' di fortuna potresti provare a costruire una regola che corrisponda ai tuoi requisiti e darle la preferenza nella tabella di ricerca delle regole. Ad esempio (ho inventato qualcosa per darti un vantaggio), aggiungiamo una nuova regola con una preferenza maggiore rispetto a main a determinati flussi:

ip rule add from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 pref 12000
ip rule show
   0:   from all lookup local 
   12000:   from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 
   32766:   from all lookup main 
   32767:   from all lookup default 

Su un sistema Linux standard (Ubuntu nel caso di questo post), vedresti le tre tabelle di regole predefinite local , main e default , di cui normalmente vedi solo il main tabella quando si invoca netstat -rn per esempio.

Ora vogliamo popolare le voci FIB nella tabella di ricerca 888 con nuove voci di instradamento:

ip route add default via 10.37.129.4 dev eth2 table 888

Vediamo come appaiono le nostre voci di instradamento nella tabella 888:

ip route show table 888
  default via 10.37.129.4 dev eth2

Penso che tu abbia l'idea. Ora, per quanto riguarda le tue specifiche esigenze di routing, non è chiaro cosa esattamente stai cercando di ottenere. Assicurati di svuotare la cache di routing quando giochi con le tabelle delle regole:

ip route flush cache

Nota che usando l'architettura iproute2 puoi sostanzialmente filtrare e modificare praticamente qualsiasi voce FIB; le voci delle regole possono essere effettuate anche sulla base di fwmarks e/o classificatori u32, come segue (esempio tratto dal policy routing book):

tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 
    match ip src 10.1.1.0/24 classid :1
ip rule add fwmark 1 table 1 prio 15000 realms 3/4
ip route add default via 192.168.1.1 table 1 src 192.168.1.254
ip route flush cache

Per le cose che vanno in tilt nelle voci delle tabelle delle regole, molti anni fa avevo preparato un piccolo frammento di bash per riportare il mio sistema allo stato originale delle regole di routing:

: ${KEEP:="local main default"}
while read prio rule; do
     continue=0
     for keep in ${KEEP}; do
         if [ "${rule//lookup ${keep}/}" != "${rule}" ]; then
             continue=1
         fi
     done
     if [ ${continue} -eq 0 ]; then
         ip rule del prio ${prio%%:*} ${rule//all/0/0}
     fi
done < <(ip rule show)

Sorprendentemente, sembra che dopo oltre 10 anni di iproute2 's esiste, ancora solo poche persone sembrano sapere che esiste un universo oltre il classico "rotto" strumenti come ifconfig o netstat .


Linux
  1. Linux IPTables:esempi di regole in entrata e in uscita (SSH e HTTP)

  2. Linux IPTables:come aggiungere regole firewall (con esempio Consenti SSH)

  3. Introduzione ai fondamenti del routing IP di Linux (Parte 1)

  4. Servizio del sistema operativo Linux "iptables"

  5. Come visualizzare la tabella di routing in Linux

Guida una locomotiva attraverso il tuo terminale Linux

Tutorial Iptables:Guida definitiva al firewall di Linux

Come configurare iptables Firewall in Linux

Procedura:Risoluzione dei problemi di base di IPtables

I 5 migliori firewall Linux

Comprensione dell'utilità fdisk di Linux