GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di tc per ritardare i pacchetti a un solo indirizzo IP

Soluzione 1:

La risposta scelta è errata/incompleta. Ho affrontato un problema simile, la risposta scelta ha dato un po' di aiuto, ma non abbastanza.

Innanzitutto, il seguente comando non è realmente necessario.

tc qdisc del dev eth0 root

"Eliminerà" il root qdisc, ma verrà immediatamente sostituito da uno pfifo_fast (in modo da non perdere la connettività).

Il secondo comando:

tc qdisc add dev eth0 root handle 1:prio

Sostituirà il qdisc pfifo_fast con quello prio. Per impostazione predefinita, la coda prio ha 3 bande (0, 1, 2) ciascuna gestita da una classe (1:1, 1:2 e 1:3).

I pacchetti verranno inviati a una di queste bande utilizzando il campo TOS del pacchetto IP. Questa configurazione viene mostrata quando esegui:

tc qdisc ls

guardando i valori di 'priomap'.

Quindi, aggiungi un netem qdisc:

tc qdisc add dev eth0 parent 1:1 handle 2:netem delay 500ms

Con questo comando ritarderai tutto il traffico diretto alla banda 1:1 (fino a quando il filtro non sarà a posto).

Ma ci sono due avvertimenti:

  • Il tuo traffico può avere un valore TOS diverso e quindi essere inviato a un'altra banda.
  • Il prio qdisc può essere configurato in modo che il traffico vada su un'altra banda.

Quanto segue ha risolto il mio problema per non essere influenzato dal netem mentre il filtro non è applicato. Invece dei passaggi precedenti, ho fatto:

tc qdisc add dev eth0 root handle 1:prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Questo invierà tutto il traffico per impostazione predefinita alla banda 1:3.

Quindi, ho aggiunto la regola per ritardare il traffico:

tc qdisc add dev eth0 parent 1:1 handle 10:netem delay 100ms 10ms

Questo crea il qdisc nella banda 0, ma poiché tutto il traffico va alla banda 3, non mi ha influenzato.

Successivamente, ho aggiunto il filtro:

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.0.0.1/32 match ip dport 80 0xffff flowid 1:1

Ora con il filtro, sarà interessato solo l'IP/porta scelto, poiché reindirizziamo il traffico scelto alla banda 0.

Tutto il resto del traffico continua inalterato poiché continua a fluire verso la banda 3.

Soluzione 2:

Ok, ho risolto il mio problema. Si scopre che se esegui le prime 3 righe sopra (quelle "tc qdisc"), ritarderà tutti i pacchetti perché non ci sono ancora filtri. La quarta riga lo cambia per ritardare solo i pacchetti da quel singolo indirizzo IP. È possibile aggiungere ulteriori righe di filtro per aggiungere ulteriori indirizzi IP all'elenco "ritardato". Quindi:non creare una riga "netem delay" senza un filtro che punti ad essa.


Linux
  1. Fail2Ban Howto:Blocca l'indirizzo IP usando Fail2ban e IPTables

  2. Rimozione di virgolette singole e doppie in una stringa utilizzando solo i comandi bash/standard di Linux

  3. Come ottenere un indirizzo di memoria specifico usando C

  4. Ottenere gli indirizzi dell'interfaccia di rete locale utilizzando solo proc?

  5. Ottieni l'indirizzo MAC usando lo script della shell

Come scaricare solo audio utilizzando youtube-dl

Come bloccare un indirizzo IP usando .htaccess?

Come eseguire il comando Ping solo per un numero N di pacchetti

Esempi di utilizzo del comando tcpdump per la risoluzione dei problemi di rete

Come ottenere l'indirizzo MAC della tua macchina usando un programma C?

Instrada solo traffico specifico tramite VPN