Gestione del traffico

Siamo giunti all'ultima parte di questo tutorial. In questa parte finale, aggiungeremo l'abilità di differenziare l'allocamento del bandwidth tra BitTorrent e altre attività Internet, e di controllare le prestazioni del file server che abbiamo creato.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Gestione del traffico

Finalmente possiamo creare lo script per la gestione del traffico. In questo caso eviterò la teoria, dato che è tutto spiegato nei documenti indicati precedentemente (li avete letti, giusto?)

Procederemo con il creare tre script, uno per iptables per marchiare i pacchetti dati in base alla loro porta di provenienza, uno per il controllo del traffico (tc) in maniera da differenziare le priorità dei pacchetti in base al loro marchio, e uno per resettare lo stato.

Prima di tutto torniamo alla nostra iptables:

  • cd /home/myname
  • mkdir shaping
  • cd shaping
  • iptables-save > blank_iptables

ora creiamo il file di testo:

  • vi marking_packets.sh

Dovrebbe assomigliare a questo:

Mine looks a bit like this:

MARKPRIO1="1"

# Setting priority marks

iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A OUTPUT -p tcp --sport 80 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A OUTPUT -p tcp --sport 139 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A OUTPUT -p tcp --sport 138 -j MARK --set-mark $MARKPRIO1

iptables -t mangle -A OUTPUT -p tcp --sport 137 -j MARK --set-mark $MARKPRIO1

Tutto questo marca il traffico SSH, HTTP e Samba come "alta priorità". Tutto il resto è ignorato. Salviamo il file e rendiamo eseguibile con il seguente comando:

  • chmod +x marking_packets.sh

Ora creiamo il file chiamato iptables_quotas.sh, che assomiglierà a questo:

#Constants

# Interface you want to do shaping on

# eth2, eth1 for direct connection; ppp0 or so for dsl

# and other dialup connections (check ifconfig)

IFACE=eth0

# Priority marks

MARKPRIO1="1"

# Rates

LAN_RATE="100mbit"

P2PRATE="200kbit"

PRIORATE4="100kbit"

# Quantum

QUANTUM1="1200"

QUANTUM4="150"

# Burst

BURST1="0k"

BURST4="0k"

CBURST1="0k"

CBURST4="0k"

# Set queue length for IFACE

ifconfig $IFACE txqueuelen 16

# Specify queue discipline

tc qdisc add dev $IFACE root handle 1:0 htb default 104 r2q 1

# Set root class

tc class add dev $IFACE parent 1:0 classid 1:1 htb rate $LAN_RATE burst $BURST1

cburst $CBURST1

# Specify sub classes

tc class add dev $IFACE parent 1:1 classid 1:101 htb rate $LAN_RATE ceil $LAN_RATE

quantum $QUANTUM1 burst $BURST1 cburst $CBURST1 prio 0

tc class add dev $IFACE parent 1:1 classid 1:104 htb rate $PRIORATE4 ceil $P2PRATE

quantum $QUANTUM4 burst $BURST4 cburst $CBURST4 prio 3

# Filter packets

tc filter add dev $IFACE parent 1:0 protocol ip prio 0 handle $MARKPRIO1 fw

classid 1:101

tc filter add dev $IFACE parent 1:0 protocol ip prio 3 handle $MARKPRIO4 fw

classid 1:104

# Add queuing disciplines

tc qdisc add dev $IFACE parent 1:101 sfq perturb 16 quantum $QUANTUM1

tc qdisc add dev $IFACE parent 1:104 sfq perturb 16 quantum $QUANTUM4

Ora rendiamolo eseguible come il file precedente. Se volete resettare iptable e tc, potete utilizzare lo script seguente:

IFACE=eth0

tc qdisc del dev $IFACE root 2> /dev/null > /dev/null

tc class del dev $IFACE root 2> /dev/null > /dev/null

tc filter del dev $IFACE root 2> /dev/null > /dev/null

iptables-restore < blank_iptables

Ora avviamo i due script:

  • ./marking_packets.sh
  • ./iptables_quotas.sh

Ecco fatto! Se avete concluso tutto correttamente non appariranno ne errori ne avvisi. Potete controllare il traffico impostando, per esempio, il LAN_RATE a 10kbit e cercare di copiare un file dall'xbox tramite la rete, e noterete quanto è lento.

Complimenti, ecco che avete per le mani un potente NAS. Ci sono molte cose che possono essere fatte con questo progetto. Potete utilizzare due grossi hard disk anziché un drive da 2.5". Perché non aggiungere anche le funzionalità RAID? O magari abbinare un modem USB per donare alla Xbox le funzionalità di router! Insomma, le possibilità sono infinite.