nefti
10.05.06, 15:17
Hallo Leute!
ich hab ein Problem mit IMQ, bzw. dem tc, das drauf gebunden ist.
Ich möchte die Bandbreite regeln, mit der eine bestimmte IP downloaden kann. Das TC-Script funktioniert, wenn ich es auf eth0 binde, jedoch nicht, wenn es auf dem IMQ-Interface läuft.
Die Idee ist die, dass sich sämtliche Internet-User per VPN am Server einwählen und man so individuell die Bandbreite vergeben kann.
Anbei kopier ich mal einfach das Firewall-/TC-script rein:
Code:
#!/bin/sh
ip link set imq0 up
#echo 1 > /proc/sys/net/ipv4/ip_dynaddr
#echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
#echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo Deleting qdisc...
tc qdisc del dev imq0 root
echo "flush iptables"
/usr/sbin/iptables -F -t mangle
/usr/sbin/iptables -F -t nat
/usr/sbin/iptables -F -t filter
/usr/sbin/iptables -X
/usr/sbin/iptables -P OUTPUT DROP
/usr/sbin/iptables -P INPUT DROP
/usr/sbin/iptables -P FORWARD DROP
/usr/sbin/iptables -A INPUT -j ACCEPT
/usr/sbin/iptables -A OUTPUT -j ACCEPT
#
# Loopback
#
/usr/sbin/iptables -A INPUT -i lo -j ACCEPT
/usr/sbin/iptables -A OUTPUT -o lo -j ACCEPT
#
# Output
#
/usr/sbin/iptables -A OUTPUT -s 172.16.2.1 -m state --state NEW -j ACCEPT
/usr/sbin/iptables -A OUTPUT -s XXX.XXX.XXX.XXX -m state --state NEW -j ACCEPT
/usr/sbin/iptables -A OUTPUT -o ppp+ -m state --state NEW -j ACCEPT
/usr/sbin/iptables -A OUTPUT -o imq0 -m state --state NEW -j ACCEPT
##########
# eth (Allow acces for users)
##########
/usr/sbin/iptables -A INPUT -i eth0 -s 172.16.3.145 -j ACCEPT
/usr/sbin/iptables -A INPUT -i eth0 -s 172.16.2.146 -j ACCEPT
echo 'add some tc'
############ Bound to internal ############
tc qdisc add dev imq0 root handle 1: cbq bandwidth 1Mbit avpkt 1000 mpu 64
tc class add dev imq0 parent 1:0 classid 1:1 cbq rate 128kbit weight 12kbit allot 1514 prio 1 avpkt 1000 bounded
tc filter add dev imq0 parent 1:0 protocol ip handle 1 fw flowid 1:1
iptables -t mangle -N MITTE
iptables -t mangle -I PREROUTING -i ppp+ -j MITTE
iptables -t mangle -A MITTE -d 172.16.3.145 -j MARK --set-mark 1
iptables -t mangle -A MITTE -s 172.16.3.145 -j MARK --set-mark 1
echo '2imq'
iptables -t mangle -A MITTE -j IMQ
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source XXX.XXX.XXX.XXX
iptables -A FORWARD -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
Noch ein paar Zusatzinfos zum Server:
Es läuft ein SuSE 9.2 mit selbst kompiliertem 2.6.16.2-er Kernel drauf. Die iptables -Version ist 1.3.5.
Die wichtigsten Schnittstellen: eth0 (intern), eth1 (extern), ppp+ (VPN-Verbindungen der Clients), imq (da wo tc drauf läuft).
Auf imq0 seh ich zwar den traffic-counter raufzählen, aber mehr passiert da auch net
Ich hoffe, dass sich jmd auskennt, denn ich tus leider net so wirklich.
lg
Nefti
ich hab ein Problem mit IMQ, bzw. dem tc, das drauf gebunden ist.
Ich möchte die Bandbreite regeln, mit der eine bestimmte IP downloaden kann. Das TC-Script funktioniert, wenn ich es auf eth0 binde, jedoch nicht, wenn es auf dem IMQ-Interface läuft.
Die Idee ist die, dass sich sämtliche Internet-User per VPN am Server einwählen und man so individuell die Bandbreite vergeben kann.
Anbei kopier ich mal einfach das Firewall-/TC-script rein:
Code:
#!/bin/sh
ip link set imq0 up
#echo 1 > /proc/sys/net/ipv4/ip_dynaddr
#echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
#echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo Deleting qdisc...
tc qdisc del dev imq0 root
echo "flush iptables"
/usr/sbin/iptables -F -t mangle
/usr/sbin/iptables -F -t nat
/usr/sbin/iptables -F -t filter
/usr/sbin/iptables -X
/usr/sbin/iptables -P OUTPUT DROP
/usr/sbin/iptables -P INPUT DROP
/usr/sbin/iptables -P FORWARD DROP
/usr/sbin/iptables -A INPUT -j ACCEPT
/usr/sbin/iptables -A OUTPUT -j ACCEPT
#
# Loopback
#
/usr/sbin/iptables -A INPUT -i lo -j ACCEPT
/usr/sbin/iptables -A OUTPUT -o lo -j ACCEPT
#
# Output
#
/usr/sbin/iptables -A OUTPUT -s 172.16.2.1 -m state --state NEW -j ACCEPT
/usr/sbin/iptables -A OUTPUT -s XXX.XXX.XXX.XXX -m state --state NEW -j ACCEPT
/usr/sbin/iptables -A OUTPUT -o ppp+ -m state --state NEW -j ACCEPT
/usr/sbin/iptables -A OUTPUT -o imq0 -m state --state NEW -j ACCEPT
##########
# eth (Allow acces for users)
##########
/usr/sbin/iptables -A INPUT -i eth0 -s 172.16.3.145 -j ACCEPT
/usr/sbin/iptables -A INPUT -i eth0 -s 172.16.2.146 -j ACCEPT
echo 'add some tc'
############ Bound to internal ############
tc qdisc add dev imq0 root handle 1: cbq bandwidth 1Mbit avpkt 1000 mpu 64
tc class add dev imq0 parent 1:0 classid 1:1 cbq rate 128kbit weight 12kbit allot 1514 prio 1 avpkt 1000 bounded
tc filter add dev imq0 parent 1:0 protocol ip handle 1 fw flowid 1:1
iptables -t mangle -N MITTE
iptables -t mangle -I PREROUTING -i ppp+ -j MITTE
iptables -t mangle -A MITTE -d 172.16.3.145 -j MARK --set-mark 1
iptables -t mangle -A MITTE -s 172.16.3.145 -j MARK --set-mark 1
echo '2imq'
iptables -t mangle -A MITTE -j IMQ
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source XXX.XXX.XXX.XXX
iptables -A FORWARD -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
Noch ein paar Zusatzinfos zum Server:
Es läuft ein SuSE 9.2 mit selbst kompiliertem 2.6.16.2-er Kernel drauf. Die iptables -Version ist 1.3.5.
Die wichtigsten Schnittstellen: eth0 (intern), eth1 (extern), ppp+ (VPN-Verbindungen der Clients), imq (da wo tc drauf läuft).
Auf imq0 seh ich zwar den traffic-counter raufzählen, aber mehr passiert da auch net
Ich hoffe, dass sich jmd auskennt, denn ich tus leider net so wirklich.
lg
Nefti