OpenWag200 – niemożliwa alternatywa
Jak wiecie (lub nie) jestem użytkownikiem bramki ADSL, mianowicie Linksysa Wag-200g. Jednak z racji jej małych, fabrycznych możliwości konfiguracji (QoS bazujący na usługach? kto tego używa!) od dłuższego czasu używam alternatywnego firmware tworzonego przez kilka osób, obecnie posiadających już własną stronę i projekt na sourceforge – openwag200.
Główną różnicą w stosunku do oryginału jest możliwość logowania się na samo urządzenie przy pomocy SSH oraz możliwość składowania i wykonywania własnych skryptów (oraz setki innych opcji – rysowania grafów użycia łącza, dodatkowe dhcp, oddzielenie ruchu wlan od fizycznej, stałe przydziały adresów, osobny dhcp na wlan, WakeOnLan z poziomu bramki, monitorowanie połączenia i automatyczna re-konfiguracja w razie zerwania, automatyczny reboot…) Jednak głownie własnymi skryptami chciałem się podzielić, tak aby ktoś nie musiał wynajdywać koła na nowo.
#1 – DNS-o-Matic
Dns-o-Matic jest usługą grupującą wszelkiego rodzaju usługi dynamicznych dns. Działanie jest proste: konfigurujesz dane kont od różnych usługodawców w serwisie Dns-o-Matic (np. dodajesz no-ip.org i dyndns.com), ściągasz programik (jeśli nie masz urządzenia obsługującego Dns-o-Matic) który wysyła do nich adres ip, a oni aktualizują adres u innych usługodawców (np. no-ip i dyndns zostaną powiadomione o nowym ip i skieruję osoby z twoich domen w tych serwisach na właściwy adres ip).
Dzięki temu skryptowi, możliwe jest uaktualnienie adresu w serwisie Dns-o-Matic:
#!/bin/sh
if [ -e /tmp/dns.info ]; then
old_ip=$(cat /tmp/dns.info)
wget -O /tmp/dns.info http://myip.dnsomatic.com/
new_ip=$(cat /tmp/dns.info)
if [ "$old_ip" != "$new_ip" ]; then
wget -O /tmp/dns.update http://user:pass@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=$new_ip&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG
fi
else
wget -O /tmp/dns.info http://myip.dnsomatic.com/
new_ip=$(cat /tmp/dns.info)
wget -O /tmp/dns.update http://user:pass@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=$new_ip&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG
fi
User i pass należy zastąpić odpowiednio nazwą użytkownika w Dns-o-Matic oraz hasłem do konta w tym serwisie. Skrypt można dodać do crontaba aby wykonywał się co x czasu.
#2 – Podział pasma
Chyba każdy posiadający wiele komputerów wie, jak wkurzające jest gdy jedna osoba zagarnie całe dostępne pasmo, dlatego też również pod tym kątem napisałem skrypt przyporządkowujący danym osobom (a może one posiadać więcej niż 1 komputer) odpowiednie pasmo up i downloadu. Maksymalne wartości zarówno ściągania jak i wysyłania stanowią ok 80-90% całego dostępnego łącza, dzięki temu gdy całe “dzielone” łącze, czyli 90% całego jest zajęte, 2 komputer może zacząć pobieranie (wykorzystując rezerwę w postaci 10%), dopiero wtedy zacznie się ograniczanie pasma leecherowi i sprawiedliwe dzielenie, podobnie jest z uploadem. Dzielenie to bazuje na adresach IP które są statycznie przydzielane przez serwer dhcp.
#!/bin/sh
# zabezpiecznie sprawdzające czy połączenie ppp jest zestawione
PPPUP=$(ifconfig | grep ppp0)
while [ -z "$PPPUP" ] ; do
echo sleeping…
sleep 5PPPUP=$(ifconfig | grep ppp0)
done
/usr/sbin/tc qdisc del dev br0 root
/usr/sbin/tc qdisc del dev ppp0 root
/usr/sbin/tc qdisc add dev br0 root handle 1: htb
/usr/sbin/tc qdisc add dev ppp0 root handle 2: htb/usr/sbin/tc class add dev br0 parent 1: classid 1:1 htb rate 840kbit #ok 80-90% z łącza 1Mbps, reszta jest niekolejkowana
/usr/sbin/tc class add dev br0 parent 1:1 classid 1:11 htb rate 210kbit ceil 840kbit prio 2 #osoba 1 – minimum gwarantowane 210, gdy nikt nie używa 840
/usr/sbin/tc class add dev br0 parent 1:1 classid 1:12 htb rate 210kbit ceil 840kbit prio 2 #osoba 2 – minimum gwarantowane 210, gdy nikt nie używa 840
/usr/sbin/tc class add dev br0 parent 1:1 classid 1:13 htb rate 210kbit ceil 840kbit prio 2 #osoba 3 – minimum gwarantowane 210, gdy nikt nie używa 840
/usr/sbin/tc class add dev br0 parent 1:1 classid 1:14 htb rate 210kbit ceil 840kbit prio 2 #osoba 4 – minimum gwarantowane 210, gdy nikt nie używa 840/usr/sbin/tc qdisc add dev br0 parent 1:11 handle 11: sfq perturb 10
/usr/sbin/tc qdisc add dev br0 parent 1:12 handle 12: sfq perturb 10
/usr/sbin/tc qdisc add dev br0 parent 1:13 handle 13: sfq perturb 10
/usr/sbin/tc qdisc add dev br0 parent 1:14 handle 14: sfq perturb 10/usr/sbin/tc filter add dev br0 protocol ip parent 1: u32 match ip dst 192.168.1.100 flowid 1:11 #osoba 1 – 1 komp
/usr/sbin/tc filter add dev br0 protocol ip parent 1: u32 match ip dst 192.168.1.101 flowid 1:12 #osoba 2 – 1 komp
/usr/sbin/tc filter add dev br0 protocol ip parent 1: u32 match ip dst 192.168.1.102 flowid 1:13 #osoba 3 – 1 komp
/usr/sbin/tc filter add dev br0 protocol ip parent 1: u32 match ip dst 192.168.1.103 flowid 1:14 #osoba 4 – 2 komp
/usr/sbin/tc filter add dev br0 protocol ip parent 1: u32 match ip dst 192.168.1.104 flowid 1:14/usr/sbin/tc class add dev ppp0 parent 2: classid 2:1 htb rate 150kbit
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:11 htb rate 30kbit ceil 150kbit prio 2 #osoba 1 – minimum gwarantowane 30, gdy nikt nie używa 150
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:12 htb rate 30kbit ceil 150kbit prio 2 #osoba 2 – minimum gwarantowane 30, gdy nikt nie używa 150
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:13 htb rate 30kbit ceil 150kbit prio 2 #osoba 3 – minimum gwarantowane 30, gdy nikt nie używa 150
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:14 htb rate 30kbit ceil 150kbit prio 2 #osoba 4 – minimum gwarantowane 30, gdy nikt nie używa 150
/usr/sbin/tc qdisc add dev ppp0 parent 2:11 handle 11: sfq perturb 10
/usr/sbin/tc qdisc add dev ppp0 parent 2:12 handle 12: sfq perturb 10
/usr/sbin/tc qdisc add dev ppp0 parent 2:13 handle 13: sfq perturb 10
/usr/sbin/tc qdisc add dev ppp0 parent 2:14 handle 14: sfq perturb 10
/usr/sbin/tc filter add dev ppp0 protocol ip parent 2: u32 match ip src 192.168.1.100 flowid 2:11 #osoba 1 – 1 komp
/usr/sbin/tc filter add dev ppp0 protocol ip parent 2: u32 match ip src 192.168.1.101 flowid 2:12 #osoba 2 – 1 komp
/usr/sbin/tc filter add dev ppp0 protocol ip parent 2: u32 match ip src 192.168.1.102 flowid 2:13 #osoba 3 – 1 komp
/usr/sbin/tc filter add dev ppp0 protocol ip parent 2: u32 match ip src 192.168.1.103 flowid 2:14 #osoba 4 – 2 komp
/usr/sbin/tc filter add dev ppp0 protocol ip parent 2: u32 match ip src 192.168.1.104 flowid 2:14
Jeśli używasz bramki voip, wtedy radzę zwiększyć rezerwę (puszczamy bramkę w ruchu “niekontrolowanym”) inaczej głos będzie się rwał (zwiększają się opóźnienia i pakiety są “buforowane”).
A dlaczego niemożliwa? Bo urządzenia posiada tylko 2MB pamięci flash, co w projektach takich jak DD-WRT czy OpenWRT skutecznie zniechęca potencjalnych opiekunów (nie da się tam dodać ‘ciekawych’, ‘medialnych’ funkcji)
I’ve added DNS-O-Matic support. Thanks for sharing example script.