Kolejkowanie za pomoc

Konfiguracja serwerów, usług, itp.
bertini86
Posty: 8
Rejestracja: 28 października 2008, 19:12

Kolejkowanie za pomocą htb i iptables - kilka pytań

Post autor: bertini86 »

Witam, napisałem prosty skrypcik do kolejkowania korzystający z htb i sfq. Oto rezultat:

Kod: Zaznacz cały

#!/bin/bash

echo "£adowanie htb i iptables"

#Kasacja starych zasad:

tc qdisc del root dev eth2 2> /dev/null
tc qdisc del root dev eth1 2> /dev/null
tc qdisc del root dev eth0 2> /dev/null

#Interfejs wychodzący na LAN eth1:

tc qdisc add dev eth0 root handle 1:0 htb default 11

tc class add dev eth1 parent 1:0 classid 1:1 htb rate 95000kbit ceil 95000kbit
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 93000kbit ceil 95000kbit prio 2
tc class add dev eth1 parent 1:1 classid 1:11 htb rate 2000kbit ceil 2000kbit prio 1

tc filter add dev eth1 parent 1:0 protocol ip u32 match ip src 192.168.1.2 flowid 1:10
tc filter add dev eth1 parent 1:0 protocol ip u32 match ip src 192.168.1.3 flowid 1:10

tc qdisc add dev eth1 parent 1:10 handle 10:0 sfq perturb 10
tc qdisc add dev eth1 parent 1:11 handle 11:0 sfq perturb 10

#Interfejs wychodzący na DMZ eth2:

tc qdisk add dev eth2 root handle 2:0 htb default 11

tc class add dev eth2 parent 2:0 classid 2:1 htb rate 95000kbit ceil 95000kbit
tc class add dev eth2 parent 2:1 classid 2:10 htb rate 93000kbit ceil 95000kbit prio 2
tc class add dev eth2 parent 2:1 classid 2:11 htb rate 2000kbit ceil 2000kbit prio 1

tc filter add dev eth2 parent 2:0 protocol ip u32 match ip src 192.168.2.0/24 flowid 2:10

tc qdisk add dev eth2 parent 2:10 handle 20:0 sfq perturb 10
tc qdisk add dev eth2 parent 2:11 handle 21:0 sfq perturb 10

#Interfejs wychodzący na Internet eth0:

tc qdisk add dev eth0 root handle 3:0 htb default 112

tc class add dev eth0 parent 3:0 classid 3:1 htb rate 1000kbit ceil 1000kbit
tc class add dev eth0 parent 3:1 classid 3:10 htb rate 500kbit ceil 1000kbit
tc class add dev eth0 parent 3:1 classid 3:11 htb rate 500kbit ceil 1000kbit
tc class add dev eth0 parent 3:10 classid 3:101 htb rate 250kbit ceil 1000kbit
tc class add dev eth0 parent 3:10 classid 3:102 htb rate 250kbit ceil 1000kbit
tc class add dev eth0 parent 3:11 classid 3:111 htb rate 250kbit ceil 1000kbit
tc class add dev eth0 parent 3:11 classid 3:112 htb rate 250kbit ceil 1000kbit

tc filter add dev eth0 parent 3:0 protocol ip src 192.168.1.2 flowid 3:101
tc filter add dev eth0 parent 3:0 protocol ip src 192.168.1.3 flowid 3:102
tc filter add dev eth0 parent 3:0 protocol ip dport 80 0xffff flowid 3:111

tc qdisk add dev eth0 parent 3:101 handle 30:0 sfq perturb 10
tc qdisk add dev eth0 parent 3:102 handle 31:0 sfq perturb 10
tc qdisk add dev eth0 parent 3:111 handle 32:0 sfq perturb 10
tc qdisk add dev eth0 parent 3:112 handle 33:0 sfq perturb 10
oraz skrypt iptables:

Kod: Zaznacz cały

#!/bin/bash

INET_IFACE=192.168.3.1/24
DMZ_IFACE=192.168.1.1/24
LAN_IFACE=192.168.2.1/24

IP_PUBLICZNE=83.15.3.4/8

DMZ_HTTP_IP=192.168.1.2/24
DMZ_DNS_IP=192.168.1.3/24

LAN_IP=192.168.2.0/24
DMZ_IP=192.168.1.0/24

IPTABLES=/sbin/iptables

#Wpisy ogólne:

echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/ip_forward

$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t nat -F
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A FORWARD -o lo -j ACCEPT
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

#$IPTABLES -t nat -A POSTROUTING -s 192.168.2.0/24 -d 0.0.0.0/0 -j SNAT --to-source 192.168.3.1/24 #tutaj nie jestem pewien
$IPTABLES -t nat -A PREROUTING -i $INET_IFACE --dport 80 -p tcp -j DNAT --to-destination $DMZ_HTTP_IP
$IPTABLES -t nat -A PREROUTING -i $INET_IFACE --dport 53 -p tcp -j DNAT --to-destination $DMZ_DNS_IP
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_IP -j SNAT --to $IP_PUBLICZNE
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $DMZ_IP -j SNAT --to $IP_PUBLICZNE

#Strefa DMZ:

$IPTABLES -A FORWARD -i $DMZ_IFACE -o $INET_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $DMZ_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -o $DMZ_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP --dport 80 -j allowed
$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP -j icmp_packets

$IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP --dport 53 -j allowed
$IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP --dport 53 -j ACCEPT
$IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP -j icmp_packets

#Strefa LAN:

$IPTABLES -A FORWARD -i $LAN_IFACE -o $INET_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
Dla sieci:

Kod: Zaznacz cały

       LAN ----- eth1 Serwer eth0 ----- Interf. zewnętrzny
                      /      eth2        \
     192.168.2.1/24	|	192.168.3.1/24
                                |
                            DMZ 192.168.1.2/24 i 192.168.1.3/24
Połączenie z internetem: pobieranie 2048kbit / wysyłanie 1024 kbit
eth1 i eth2 (192.168.2.1 i 192.168.1.1): 100MBit

Moje dwa pytania, może trochę głupie ale jednak jestem ciekawy odpowiedzi:
  1. Czy tego typu kolejkowanie htb + sfq jest wystarczające do większości zastosowań, czy trzeba się byłoby zainteresować innymi technikami (hfsc, imq itp. wynalazkami)?
  2. Czy sprzęganie z iptables działa tylko za pomocą poleceń:

    Kod: Zaznacz cały

         handle xyz fw
         iptables -A POSTROUTING -o eth1  -j MARK –set-mark 0×2
         iptables -A POSTROUTING -o eth1  -j RETURN
    Mówiąc w skrócie, ostatnio zainteresowałem się tematem QoS. Przeczytałem sporo materiałów na ten temat i interesuje mnie czy dobra znajomość htb i sfq będzie wystarczająca i czy nie ma innych sposobów łączenia firewalla z htb.
    Szukałem odpowiedzi w sieci, ale przyznam uczciwie, że z każdym przeczytanym tematem mam coraz większy mętlik w głowie.
Pozdrawiam.
Finarfin
Posty: 31
Rejestracja: 30 marca 2009, 16:17

Post autor: Finarfin »

HTB i SFQ to tylko jedne z wielu algorytmów kolejkowania...uznaje je się za dobre, bo są względnie szybkie i działają sprawnie. Nikt nie każe Ci poznawać innych algorytmów kolejkowania - jeśli te dwa dobrze zrozumiesz, to w większości przypadków powinny Ci pomóc.

Co do łączenia ich z firewallem to tak nie do końca rozumiem...za pomocą iptables znakujesz pakiety, gdyż ten firewall "czyta" każdy pakiet wchodzący na interfejs, następnie jeżeli ma dla danego typu pakietu coś zdefiniowane to stosuje politykę bezpieczeństwa taką jak ma napisane, np. znakuje pakiet...potem te oznakowane pakiety są wysyłane do bufora htb i tam już odbywa się kolejkowanie.

To tak w mega skrócie, ale myślę, że nieco rozjaśni temat.
ODPOWIEDZ