|
Kolejkowanie za pomocą htb i iptables - kilka pytań
bertini86 - 05-12-2009 09:59
Witam, napisałem prosty skrypcik do kolejkowania korzystający z htb i sfq. Oto rezultat:
#!/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:
#!/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:
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:l 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)?l
lCzy sprzęganie z iptables działa tylko za pomocą poleceń:
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.l
Pozdrawiam.
Finarfin - 06-12-2009 17:39
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.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|