Portál AbcLinuxu, 2. května 2025 07:19
Uz se mi nelibilo jak muj script na omezeni rychlosti ma cca 10tis. radku, stale roste a v podstate je neprehledny. Tak nejak jsem tomu chvili venoval a neco dal dohromady. Treba se to bude i nekomu hodit, nebo jeste lepe ?! - z duvodu ze nejsem programator by mne zajimalo, co by se dalo na tom jeste vylepsit .
Sklada se to cele ze dvou scriptu.
Prvni:
##DOWNLOAD root+vsichni iptables -t mangle -F tc qdisc del dev eth0 root tc qdisc add dev eth0 root handle 1: htb default 9999 tc class add dev eth0 parent 1: classid 1:1 htb rate 512kbps ceil 512kbps prio 1 #UPLOAD tc qdisc del dev eth1 root tc qdisc add dev eth1 root handle 1: htb default 9999 tc class add dev eth1 parent 1: classid 1:1 htb rate 512kbps ceil 512kbps prio 1 #funkce qos jak pro download tak pro upload
qos() { iptables -A FORWARD -s $3 -j ACCEPT iptables -A FORWARD -d $3 -j ACCEPT tc class add dev eth0 parent 1:1 classid 1:$1 htb rate 4kbps ceil $2 prio 4 tc qdisc add dev eth0 parent 1:$1 sfq perturb 5 tc filter add dev eth0 parent 1: protocol ip prio 4 handle $1 fw classid 1:$1 iptables -t mangle -A FORWARD -d $3 -j MARK --set-mark $1 tc class add dev eth1 parent 1:1 classid 1:$1 htb rate 4kbps ceil $2 prio 4 tc qdisc add dev eth1 parent 1:$1 sfq perturb 5 tc filter add dev eth1 parent 1: protocol ip prio 4 handle $1 fw classid 1:$1 iptables -t mangle -A FORWARD -s $3 -j MARK --set-mark $1 }
# implementace funkce qos (mark download ip upload) line=` wc -l users.txt | awk '{print $1}'` x=1 while [ "$x" -le $line ]; do a=`sed -n $x\p users.txt | awk '{print $1}'` if [ $a = \# ]; then false else base=`sed -n $x\p users.txt | awk '{print $3" "$2" "$4}'` data="$(expr $x + 1000) $base" qos $data echo $data fi x=$(expr $x + 1) done
a druhy, kam se zapisuje users.txt:
user1 192.168.1.2 512kbit 256kbit user2 192.168.1.3 512kbit 256kbit user3 192.168.1.4 512kbit 256kbit user4 192.168.1.5 512kbit 256kbit user5 192.168.1.6 512kbit 256kbit user6 192.168.1.7 512kbit 256kbit user7 192.168.1.8 512kbit 256kbit user8 192.168.1.9 512kbit 256kbit user9 192.168.1.10 512kbit 256kbit
Tak, sice mi to chvili trvalo, ale mame zde podporu k DHCP servru
Vytvorim treti script s nazvem dhcpd.sh s timto ci obdobnym obsahem:
#!/bin/sh dhcpd_conf () { echo "\ host $1 { hardware ethernet $3; fixed-address $2; }" } echo "\ ddns-update-style none; option domain-name \"vejnet.petrvald\"; option routers 192.168.1.1; option domain-name-servers 192.168.1.1; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option ntp-servers 192.168.1.1; default-lease-time 3600; max-lease-time 86400; shared-network net_eth1 { subnet 192.168.1.0 netmask 255.255.255.0 {" > /etc/dhcpd.conf
line=` wc -l users.txt | awk '{print $1}'` x=1 while [ "$x" -le $line ]; do a=`sed -n $x\p $PWD/users.txt | awk '{print $1}'` b=`sed -n $x\p $PWD/users.txt | awk '{print $5}'` if [ $a = \# ]; then false elif [ $b = none ]; then false else base=`sed -n $x\p $PWD/users.txt | awk '{print $1" "$2" "$5}'` dhcpd_conf $base >> /etc/dhcpd.conf echo $base fi x=$(expr $x + 1) done echo "}" >>/etc/dhcpd.conf echo "\ subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.10 10.0.0.100; } }" >> /etc/dhcpd.conf kill `cat /var/run/dhcpd.pid` sleep 1 dhcpdNo a do users.txt pak jen pridam 5.sloupec s MAC adresou
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.