ASUS: Porovnání verzí
(Není zobrazeno 7 mezilehlých verzí od 6 dalších uživatelů.) | |||
Řádek 9: | Řádek 9: | ||
fi | fi | ||
Je potřeba ho pravidelně spouštět. Kontroluje jestli je ASUS jako klient správně asociován na AP. | Je potřeba ho pravidelně spouštět. Kontroluje jestli je ASUS jako klient správně asociován na AP. | ||
+ | |||
+ | |||
+ | === Watchdog pro WAN Port === | ||
+ | Při používání WAN Portu na Asusu dochází k jeho zasekávání. Bohužel je to neduha tak vymakaného zařízení jakým je Asus. To me donutilo sepsat Watchdog, který hlídá protější stranu. Když začnou narůstat velikostí pingů ( testováno v if (min>7))tak provede nové nastavení FullDuplexu na Wanportu. Pokud uplně stratí protější stranu, tak provede ifconfig down a pak zase up Wanportu. Celý tento skript volám 1x za minutu Cronem. | ||
+ | |||
+ | Credits: | ||
+ | * LADA z J-Netu napsal pasáž s AWK | ||
+ | * Kendy finálně doladil Watchdog a udělal logování | ||
+ | |||
+ | #!/bin/sh | ||
+ | # | ||
+ | |||
+ | #Zalozit pid | ||
+ | if [ -f /tmp/wandog.pid ]; then | ||
+ | echo 0 > /dev/null | ||
+ | else | ||
+ | echo 0 > /tmp/wandog.pid | ||
+ | fi | ||
+ | |||
+ | #nacist obsah | ||
+ | A=`cat /tmp/wandog.pid` | ||
+ | NULA=0 | ||
+ | |||
+ | #Nebezi uz ? | ||
+ | if [ "$A" = "$NULA" ]; then | ||
+ | |||
+ | echo 1 > /tmp/wandog.pid | ||
+ | |||
+ | ping -c 2 10.107.0.13|awk ' | ||
+ | ($3=="from"){ | ||
+ | a=substr($7,6,length($7)-5) | ||
+ | #print a | ||
+ | } | ||
+ | |||
+ | ($1=="round-trip"){ | ||
+ | #round-trip min/avg/max = 40.2/179.6/341.6 ms | ||
+ | min=substr($4,1,index($4,"/")-1)+0 | ||
+ | #print "min " min | ||
+ | if (min>7) { | ||
+ | text="force FD" | ||
+ | print strftime("%Y-%m-%d %H:%M") " "text >> "/tmp/wandog.log" | ||
+ | system("et -i eth1 speed 10full") | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ($9=="loss"){ | ||
+ | if ($7=="100%"){ | ||
+ | datum = strftime("%Y-%m-%d %H:%M"); | ||
+ | text = "reset eth1" | ||
+ | #print "shiiiit, nic nedorazilo :)" | ||
+ | print strftime("%Y-%m-%d %H:%M") " "text >> "/tmp/wandog.log" | ||
+ | system("ifconfig eth1 down") | ||
+ | system("ifconfig eth1 up") | ||
+ | } | ||
+ | }' | ||
+ | |||
+ | echo 0 > /tmp/wandog.pid | ||
+ | |||
+ | else | ||
+ | echo "Wandog uz bezi. Koncim" > /dev/null | ||
+ | fi | ||
+ | |||
+ | === Watchdog pro WAN Port - pro Ronju === | ||
+ | Pokud máme ve WAN portu připojenou ronju, která se vyznačuje nulovým packet lossem za normálních okolností, je ideální, pokud dojde k pádu portu, ho oživit co nejdříve. To vyžaduje časté spouštění skriptu, a proto je potřeba, aby byl skript co nejjednodušší. | ||
+ | Co se týká hlídání velikosti pingů, já jsem vypozoroval, že při maximálním zatížení ronji pingy vylezou někam kolem hodnoty 100ms a zase se vrátí na původní hodnotu, jakmile zatížení ustane, proto pingy tento skript nesleduje. | ||
+ | #!/bin/sh | ||
+ | |||
+ | #pokud existuje FLAG, nelogovat, ze resetujem port | ||
+ | FLAG=/tmp/ronja_dead | ||
+ | #IP adresa protistrany | ||
+ | IP=10.107.0.245 | ||
+ | LOG=/tmp/ronjadog.log | ||
+ | |||
+ | ping -q -c 1 $IP > /dev/null | ||
+ | if [ $? -ne 0 ]; then | ||
+ | et -i eth1 speed 10full | ||
+ | [ -e $FLAG ] || { | ||
+ | echo $(date "+%d.%m.%y %H:%M:%S") Resetting eth1 >> $LOG | ||
+ | touch $FLAG | ||
+ | } | ||
+ | else | ||
+ | [ -e $FLAG ] && { | ||
+ | echo $(date "+%d.%m.%y %H:%M:%S") eth1 link OK >> $LOG | ||
+ | rm $FLAG | ||
+ | } | ||
+ | fi | ||
+ | |||
+ | Skript spouštím takto | ||
+ | sh -c "while sleep 2s; do /usr/local/sbin/ronjadog; done"& | ||
+ | Pokud tedy dojde ke spadnutí WAN portu, je oživen v nejhorším případě do 2-3s. V logu je zapsán čas, kdy bylo zjištěno, že port spadl a byl resetován. Obvykle to je taky čas, kdy byl port úspěšně oživen. To se ale testuje až při dalším cyklu (proto se z logu může zdát, že každý výpadek trvá 2-3 sekundy). Pokud ale dojde k delšímu výpadku, je krásně vidět jeho délka. Když dojde k packetlossu na ronje kvůli mlze apod., bude skript resetovat WAN port pokaždé, co se ztratí testovací paket. To ovšem tolik nevadí - během ping floodu z protistrany a resetnutí portu se ztratily 2 pakety o velikosti 56 byte. | ||
+ | |||
+ | Skript napsal Lada z JNetu. Od Kendyho jsem převzal příkaz pro oživení portu. | ||
=== "Monitoring" sítě === | === "Monitoring" sítě === | ||
Řádek 72: | Řádek 164: | ||
Pak stačí do prohlížeče zadat vaši IP a cestu /cgi-bin/inetstats. Pokud chcete statistiku nějak pěkně integrovat do vašeho webu, asi nezbyte nic jiného, než šikovně použít frames. | Pak stačí do prohlížeče zadat vaši IP a cestu /cgi-bin/inetstats. Pokud chcete statistiku nějak pěkně integrovat do vašeho webu, asi nezbyte nic jiného, než šikovně použít frames. | ||
+ | |||
+ | === Zebradog === | ||
+ | Tenhle skript jsem vytvořil poté, co mi několik uživatelů popisovalo výpadky, které nesly příznaky toho, že zebra ztratila default routu. Tento skript se to pokouší řešit a hlavně píše kdy a na jak dlouho ke ztrátě routy došlo... | ||
+ | #!/bin/sh | ||
+ | |||
+ | GW="10.107.0.129" | ||
+ | |||
+ | ip route | grep -q default || { | ||
+ | route add default gw $GW | ||
+ | echo $(date "+%d.%m.%y %H:%M") ROUTE LOST, setting static route >> /tmp/zebradog.log | ||
+ | |||
+ | while sleep 30s; do | ||
+ | route del default | ||
+ | if ip route|grep default>/dev/null;then | ||
+ | echo $(date "+%d.%m.%y %H:%M") ROUTE RESTORED >> /tmp/zebradog.log | ||
+ | exit | ||
+ | else | ||
+ | echo $(date "+%d.%m.%y %H:%M") ROUTE STILL LOST >> /tmp/zebradog.log | ||
+ | route add default gw $GW | ||
+ | fi | ||
+ | done | ||
+ | } | ||
+ | |||
=== Maškaráda === | === Maškaráda === | ||
Řádek 300: | Řádek 415: | ||
# pokud neco zlepsite, dejte mi vedet na lada@hkfree.org pripadne kendy@hkfree.org | # pokud neco zlepsite, dejte mi vedet na lada@hkfree.org pripadne kendy@hkfree.org | ||
− | # verze 14.3.2005 0. | + | # verze 14.3.2005 0.32 |
# zobrazeni nekterych udaju | # zobrazeni nekterych udaju | ||
Řádek 378: | Řádek 493: | ||
' | ' | ||
echo "</table></body><hr>" | echo "</table></body><hr>" | ||
− | echo "Version 0. | + | echo "Version 0.32&nbsp;&nbsp;for HKfree developed by lada [at] hkfree [dot] org. Small hmtl extension by kendy [at] hkfree [dot] org" |
== Oleguv firmware == | == Oleguv firmware == | ||
Řádek 511: | Řádek 626: | ||
Poznámka na konec - všechny skripty musejí mít právo se spustit - to se dělá příkazem ''chmod +x skript''. | Poznámka na konec - všechny skripty musejí mít právo se spustit - to se dělá příkazem ''chmod +x skript''. | ||
+ | |||
+ | ==Upload firmware== | ||
+ | co delat kdyz nejde ani win klient | ||
+ | |||
+ | tftp.exe -i -v -t60 IP_ASUSE GET ASUSSPACELINK | ||
+ | |||
+ | tftp.exe -i -v -t60 IP_ASUSE PUT firmware.trx ASUSSPACELINK | ||
+ | |||
+ | Asus se rozblika | ||
+ | |||
+ | '''Funkcni upload s atftp''' (v Linuxu) | ||
+ | *atftp | ||
+ | *tftp> connect 192.168.1.1 | ||
+ | *tftp> GET ASUSSPACELINK | ||
+ | *tftp> PUT openwrt-brcm-2.4-squashfs.trx ASUSSPACELINK | ||
+ | |||
+ | A hotovo | ||
+ | |||
+ | ==Odkazy== | ||
+ | [[ASUS_HW_reset|Jak zresetovat ASUS]] |
Aktuální verze z 21. 11. 2007, 07:20
Obsah
Skriptiky/Watchdogy
Watchdog pro klienta
#!/bin/sh if ! $(wl bssid > /dev/null 2>&1); then wl ssid $(nvram get wl0_ssid) fi
Je potřeba ho pravidelně spouštět. Kontroluje jestli je ASUS jako klient správně asociován na AP.
Watchdog pro WAN Port
Při používání WAN Portu na Asusu dochází k jeho zasekávání. Bohužel je to neduha tak vymakaného zařízení jakým je Asus. To me donutilo sepsat Watchdog, který hlídá protější stranu. Když začnou narůstat velikostí pingů ( testováno v if (min>7))tak provede nové nastavení FullDuplexu na Wanportu. Pokud uplně stratí protější stranu, tak provede ifconfig down a pak zase up Wanportu. Celý tento skript volám 1x za minutu Cronem.
Credits: * LADA z J-Netu napsal pasáž s AWK * Kendy finálně doladil Watchdog a udělal logování
#!/bin/sh # #Zalozit pid if [ -f /tmp/wandog.pid ]; then echo 0 > /dev/null else echo 0 > /tmp/wandog.pid fi #nacist obsah A=`cat /tmp/wandog.pid` NULA=0 #Nebezi uz ? if [ "$A" = "$NULA" ]; then echo 1 > /tmp/wandog.pid ping -c 2 10.107.0.13|awk ' ($3=="from"){ a=substr($7,6,length($7)-5) #print a } ($1=="round-trip"){ #round-trip min/avg/max = 40.2/179.6/341.6 ms min=substr($4,1,index($4,"/")-1)+0 #print "min " min if (min>7) { text="force FD" print strftime("%Y-%m-%d %H:%M") " "text >> "/tmp/wandog.log" system("et -i eth1 speed 10full") } } ($9=="loss"){ if ($7=="100%"){ datum = strftime("%Y-%m-%d %H:%M"); text = "reset eth1" #print "shiiiit, nic nedorazilo :)" print strftime("%Y-%m-%d %H:%M") " "text >> "/tmp/wandog.log" system("ifconfig eth1 down") system("ifconfig eth1 up") } }' echo 0 > /tmp/wandog.pid else echo "Wandog uz bezi. Koncim" > /dev/null fi
Watchdog pro WAN Port - pro Ronju
Pokud máme ve WAN portu připojenou ronju, která se vyznačuje nulovým packet lossem za normálních okolností, je ideální, pokud dojde k pádu portu, ho oživit co nejdříve. To vyžaduje časté spouštění skriptu, a proto je potřeba, aby byl skript co nejjednodušší. Co se týká hlídání velikosti pingů, já jsem vypozoroval, že při maximálním zatížení ronji pingy vylezou někam kolem hodnoty 100ms a zase se vrátí na původní hodnotu, jakmile zatížení ustane, proto pingy tento skript nesleduje.
#!/bin/sh #pokud existuje FLAG, nelogovat, ze resetujem port FLAG=/tmp/ronja_dead #IP adresa protistrany IP=10.107.0.245 LOG=/tmp/ronjadog.log ping -q -c 1 $IP > /dev/null if [ $? -ne 0 ]; then et -i eth1 speed 10full [ -e $FLAG ] || { echo $(date "+%d.%m.%y %H:%M:%S") Resetting eth1 >> $LOG touch $FLAG } else [ -e $FLAG ] && { echo $(date "+%d.%m.%y %H:%M:%S") eth1 link OK >> $LOG rm $FLAG } fi
Skript spouštím takto
sh -c "while sleep 2s; do /usr/local/sbin/ronjadog; done"&
Pokud tedy dojde ke spadnutí WAN portu, je oživen v nejhorším případě do 2-3s. V logu je zapsán čas, kdy bylo zjištěno, že port spadl a byl resetován. Obvykle to je taky čas, kdy byl port úspěšně oživen. To se ale testuje až při dalším cyklu (proto se z logu může zdát, že každý výpadek trvá 2-3 sekundy). Pokud ale dojde k delšímu výpadku, je krásně vidět jeho délka. Když dojde k packetlossu na ronje kvůli mlze apod., bude skript resetovat WAN port pokaždé, co se ztratí testovací paket. To ovšem tolik nevadí - během ping floodu z protistrany a resetnutí portu se ztratily 2 pakety o velikosti 56 byte.
Skript napsal Lada z JNetu. Od Kendyho jsem převzal příkaz pro oživení portu.
"Monitoring" sítě
Tento skriptík není dokonalý, neumí žádné logování. Je tu od toho, když vypadne internet, aby uživatelé mohli otevřít jednu stránku, kde uvidí, jaký kus trasy je dostupný. Pokud je dostupné alespoň něco, měli by být poučeni, že problém je v jiné oblasti a týká se jiného správce.
Nejprve je třeba zprovoznit webserver, návod je dole.
Následující skript pingá na d-network, pmw a seznam.cz, upravte dle libosti
/usr/local/sbin/inetstats
#!/bin/sh ping -q -c 4 10.107.3.1 > /dev/null if [ $? -ne 0 ]; then color=red else color=green fi first="<font color=$color>d-network</font><br>" ping -q -c 4 10.107.0.129 > /dev/null if [ $? -ne 0 ]; then color=red else color=green fi second="<font color=$color>pmv</font><br>" ping -q -c 4 212.71.131.225 > /dev/null if [ $? -ne 0 ]; then color=red else color=green fi third="<font color=$color>internet</font><br>" echo $first > /tmp/inetstats.txt echo $second >> /tmp/inetstats.txt echo $third >> /tmp/inetstats.txt
skript pro www server /usr/local/web/cgi-bin/inetstats
#!/bin/sh echo "Content-type: text/html" echo "" echo "<HTML>" # echo "<TITLE>JNet.HKFree.org</TITLE>" echo "<table width=100% height=100% border=0><tr><td><CENTER>" # echo "Stav trasy do internetu:" cat /tmp/inetstats.txt # echo "<a href=../info.html target=_blank></a>" echo "</CENTER></td></tr></table>" echo "</HTML>"
Teč už jenom stačí spouštět pravidelně monitorovací skript. V Olegově firmwaru do post-boot přidejte
watch -n 60 /usr/local/sbin/inetstats&
a v OpenWRT
crontab -e
a přidat řádek
* * * * * /usr/local/sbin/inetstats
Pak stačí do prohlížeče zadat vaši IP a cestu /cgi-bin/inetstats. Pokud chcete statistiku nějak pěkně integrovat do vašeho webu, asi nezbyte nic jiného, než šikovně použít frames.
Zebradog
Tenhle skript jsem vytvořil poté, co mi několik uživatelů popisovalo výpadky, které nesly příznaky toho, že zebra ztratila default routu. Tento skript se to pokouší řešit a hlavně píše kdy a na jak dlouho ke ztrátě routy došlo...
#!/bin/sh GW="10.107.0.129" ip route | grep -q default || { route add default gw $GW echo $(date "+%d.%m.%y %H:%M") ROUTE LOST, setting static route >> /tmp/zebradog.log while sleep 30s; do route del default if ip route|grep default>/dev/null;then echo $(date "+%d.%m.%y %H:%M") ROUTE RESTORED >> /tmp/zebradog.log exit else echo $(date "+%d.%m.%y %H:%M") ROUTE STILL LOST >> /tmp/zebradog.log route add default gw $GW fi done }
Maškaráda
Pár skriptů, které usnadní maškarádování některých IP do internetu - správce může snadno dočasně povolit internet některému připojenci.
- /usr/local/sbin/acc_enable
#!/bin/sh if [ "$1" != "" ]; then iptables -t nat -A POSTROUTING -o eth2 -d 10.107.4.100 -s $1 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth2 -d ! 10.107.0.0/16 -s $1 -j MASQUERADE echo $1 byl povolen přístup do internetu. else echo "Použití: enable IP.AD.RE.SA" fi
- /usr/local/sbin/acc_disable
#!/bin/sh if [ "$1" != "" ]; then iptables -t nat -D POSTROUTING -o eth2 -d ! 10.107.0.0/16 -s $1 -j MASQUERADE iptables -t nat -D POSTROUTING -o eth2 -d 10.107.4.100 -s $1 -j MASQUERADE echo $1 byl zakázán přístup do internetu. else echo "Použití: disable IP.AD.RE.SA" fi
- /usr/local/sbin/acc_list
#!/bin/sh iptables -t nat -L POSTROUTING
Databáze
Možná je tento nadpis trochu nadnesený, ale v podstatě jde o jede soubor, ve kterém je shromaždiště všech potřebných údajů pro generování konfiguráků. Vychází z ní několik mých skriptů.
databáze je soubor uložený v /usr/local/root/db má následující formát:
xx:xx:xx:xx:xx:xx 10.107.3.66 0 013 Lada Pecho \ xx:xx:xx:xx:xx:xx 10.107.3.67 0 013 TOM Pecho \ atd...
MAC adresa, IP adresa, maškarádovat, ID, DNS, pravé jméno, lomítko
můžeme vytvořit konfiguráky pro DHCP server, DNS server, rychlé dočasné puštění internetu trubkou správce, změna MAC adres...
dbparse
#!/bin/sh db=/usr/local/root/db tmp=/tmp/tmp accscript=/usr/local/sbin/acc_script hosts=/etc/hosts ethers=/etc/ethers # OpenWRT hostsprev=/etc/hosts_tmp ethersprev=/etc/ethers_tmp # Oleguv #hostsprev=/usr/local/etc/hosts_tmp #ethersprev=/usr/local/etc/ethers_tmp #hosts2=/usr/local/etc/hosts #ethers2=/usr/local/etc/ethers # echo "#!/bin/sh" > $accscript echo "iptables -t nat -F POSTROUTING" >> $accscript chmod +x $accscript rm $hosts > /dev/null rm $ethers > /dev/null cp $hostsprev $hosts > /dev/null cp $ethersprev $ethers > /dev/null read db < $db echo $db > $tmp while read MAC IP ACC ID DNS NAME rest < $tmp && [ "$MAC" != "" ]; do echo $MAC $IP >> $ethers echo $IP $DNS.JNet.hkfree.org >> $hosts if [ "$ACC" -eq "1" ]; then echo "/usr/local/sbin/acc_enable $IP" >> $accscript fi echo $rest > $tmp; done rm $tmp # Oleguv # cp $ethers $ethers2 # cp $hosts $hosts2 /usr/local/sbin/acc_script killall -HUP dnsmasq
Vygeneruje konfiguráky pro dnsmasq. Pro Olegův firmware odstraňte komentáře. Aby se v Olegově firmwaru změny projevily i po rebootu, je potřeba do post-boot přidat:
# backup the original content of /etc mkdir /etc/bak cp /etc/* /etc/bak # copy customized /etc and parse db cp /usr/local/etc/* /etc # /usr/local/sbin/dbparse boot # restart DHCP & DNS killall dnsmasq /usr/sbin/dnsmasq -l /etc/linuxigd/dnsmasq.log
V OpenWRT není třeba dělat nic!
Aby se zaplo i maškarádování, tak dejte do post-firewall pro Oleguv firmware, nebo
/etc/init.d/S44post-firewall
# process masquerading script /usr/local/sbin/acc_script
cgi-bin/mac
Tento skript umožní uživatelům si změnit svou MAC adresu. Je důležité, aby s cizí MAC dostali IP, ze které mohou kontaktovat web server a spustit skript. Ten zkontroluje, jestli je jejich MAC neznámá a jestli mají název počítače nastaven tak, jak mají - to je hlavní identifikátor. tenhle skript neřeší moc bezpečnost, ale spíše pohodlí uživatelů.
Uložte ho do složky cgi-bin, kde máte web server. V ASUSu ho nahodíte příkazem httpd nebo busybox_httpd.
#!/bin/sh maclog=/tmp/mac.log tmp=/tmp/tmpmac # OpenWRT log=/tmp/dnsmasq.leases # Oleg #log=/etc/linuxigd/dnsmasq.log db=/usr/local/root/db ethers=/etc/ethers dbbak=/tmp/dbbak echo "Content-type: text/plain" echo "" if [ "$REMOTE_ADDR" = "" ]; then echo Spoustej POUZE pres www rozhrani !!!! exit fi grep $REMOTE_ADDR $log > $tmp read TIME MAC IP DNS BADMAC < $tmp rm $tmp if [ "$MAC" = "" ]; then echo "Vasi aktualni MAC se nepodarilo zjistit, pouzijte DHCP server!" echo $(date "+%d.%m.%y %H:%M:%S") $REMOTE_ADDR unknown MAC >> $maclog exit fi if [ "$DNS" = "*" ]; then SEARCH=$MAC else SEARCH=$DNS fi grep -i $SEARCH $db > $tmp read DBMAC DBIP ACC ID DBDNS DBNAME < $tmp rm $tmp if [ "$MAC" = "$DBMAC" ]; then echo "Vase MAC adresa $DBMAC je jiz v systemu zanesena." echo $(date "+%d.%m.%y %H:%M:%S") $REMOTE_ADDR $MAC $DNS already in db >> $maclog exit else # echo "Vase MAC byla zjistena..." NOMAC=1 fi if $(echo "$DNS" |grep -i -q "$DBDNS"); then # if [ "$DNS" = "$DBDNS" ]; then # echo "Vase PC bylo identifikovano podle jmena." IDOK=1 else echo "Vas pocitac nelze identifikovat! (Mate spravne nastaveny nazev pocitace?)" echo "Nastaveni najdete v sekci \"Pro nove uzivatele\" -> \"Nastaveni pocitace\"" echo $(date "+%d.%m.%y %H:%M:%S") $REMOTE_ADDR $MAC $DNS name unknown >> $maclog fi if [ "$NOMAC" = "1" ] && [ "$IDOK" = "1" ]; then sed "s/$DBMAC $DBIP/$MAC $DBIP/" $db > $tmp mkdir -p $dbbak cp $db $dbbak/$(date +%y.%m.%d_%H:%M:%S) cp $tmp $db rm $tmp sed "s/$DBMAC $DBIP/$MAC $DBIP/" $ethers > $tmp cp $tmp $ethers rm $tmp killall -HUP dnsmasq echo "Vase MAC adresa sitove karty byla uspesne zanesena do databaze." echo "$DBMAC -> $MAC" echo "Zmena se projevi do 20 minut." echo $(date "+%d.%m.%y %H:%M:%S") $REMOTE_ADDR $MAC $DNS success, old mac was $DBMAC >> $maclog fi
QoS shaper
Poměrně rozsáhlý návod o QoS už napsal jezz zde na wiki. Nejdůležitější věci se mi povedlo rozchodit za pomoci martink z JNetu.
Na OpenWRT jsme rozchodili prio, sfq, tbf, htb. Esfq se rozchodit nepodařilo.
Pokusil jsem se instalaci potřebných patchů co nejvíce zjednodušit. Bude vám stačit, když si do routeru stáhnete skript install_shaper.sh do flash paměti.
wget http://charon.hkfree.org/~okoun/shaper/install_shaper.sh chmod +x install_shaper.sh
a přidáte jej do nějakého skriptu, který se bude spouštět po rebootu ASUSe. Install stáhne z charona potřebné .o moduly, načte je, smaže a spustí standardní skript, který používám já. Je založený na skriptu od pavkrize a jezz. Pokud si budete chtí vytvořit vlastní, uložte ho opět někam na flash a upravte install_shaper.sh tak, aby po instalaci modulů spustil váš skript. Doporučuji alespoň zkusit experimentovat s maximálním limitem neznámeho trafficu.
V balíčku je nově přidán také skript htb.sh - musíte si ho ale pro svoji oblast poupravit. Umožňuje dělení se o určitý interface rovným dílem, jsem s ním spokojený ještě více, než s tím předchozím :-)
Zalohovani
Takže máte všechno nastavené... no jo, ale co když přijde povodeň, požár, nebo se někdy uklepnete a místo "ls" napíšete "rm -Rf /" a co potom? Samozřejmě, že není problém - kdo zálohuje, ten spí klidně :-)
Tento skriptík nahrajte do adresáře cgi-bin ve vašem web serveru v ASUSu. Pojmenujte ho třeba zaloha.tar.gz
#!/bin/sh cd / rm /tmp/zaloha.tar.gz > /dev/null tar czf /tmp/zaloha.tar.gz `find etc usr lib -type f` > /dev/null echo "Content-type: application/octet-stream" echo "" cat /tmp/zaloha.tar.gz
A teč když budete chtít zálohovat, tak jednoduše stáhnete soubor cgi-bin/zaloha.tar.gz a je to! Dobrý nápad je udělat nějaký skriptík třeba na charonu a ten dát do crontabu, aby jednou za čas zálohu udělal sám. Pochopitelně můžete zálohovat i jiné adresáře než etc, usr a lib. Parametr -type f slouží k tomu, aby se nearchivovaly symlinky, které jsou v OpenWrt skoro všude, takže se uloží pouze změny, které jste provedli vy.
AP - wewimo
#!/bin/sh # velmi jednoduchy wewimo pro ASUS wl500b/g by Lada JNet, hkfree.org # html ozdoby pridal Kendy # laden pod OpenWrt firmwarem # pokud neco zlepsite, dejte mi vedet na lada@hkfree.org pripadne kendy@hkfree.org # verze 14.3.2005 0.32 # zobrazeni nekterych udaju # 0 - nezobrazi # 1 - zobrazi # 2 - vypise IP adresu x.x.x.x, nebo MAC xx:xx:xx:xx:xx:xx SHOW_MAC="0" SHOW_IP="1" SHOW_DNS="1" # broadcast IP adresa - puzije se ke zjisteni IP neaktivnich HW krabicek BROADCAST="10.107.3.159" # tady konci nastavitelne promenne.... dal uz nema cenu cokoliv cist echo "Content-type: text/html" echo "" HN=`uname -n` echo "<h2>$HN</h2><hr>" echo "<body><table border=0 cellpadding=0 cellspacing=0>" echo "<tr>" if [ "$SHOW_IP" != "0" ]; then echo "<td><b>IP Adress</b></td>"; fi if [ "$SHOW_MAC" != "0" ]; then echo "<td><b>MAC Adress</b></td>"; fi echo "<td><b>Signal</b></td>" if [ "$SHOW_DNS" != "0" ]; then echo "<td align=center><b>DNS Record</b></td>"; fi echo "</b></tr>" # pingnem broadcast, v ARP se snad objevi vsechny MAC a IP HW krabicek # windowsy na to neodpovidaji ping -c 1 $BROADCAST >/dev/null wl assoclist | awk -v SHOW_MAC="$SHOW_MAC" -v SHOW_IP="$SHOW_IP" -v SHOW_DNS="$SHOW_DNS" \ ' BEGIN{ getline <"/proc/net/arp" while (getline <"/proc/net/arp"){ IP[$4]=$1; } close("/proc/net/arp"); } { MAC=$2; "wl rssi "MAC |getline SIGNAL=$3 IP=IP[MAC]; if (IP=="") { IP=" "; DNS=""; }else{ "nslookup " IP" |grep Name:" |getline DNS=$2 } if (COL=="1") {printf "<tr>";COL=0} else {printf "<tr bgcolor=#dddddd>";COL=1} if (DNS=="") DNS="unknown" if (SHOW_IP=="1") printf "<td>%s </td>",IP if (SHOW_IP=="2"){IP="x.x.x.x";printf "<td>%s </td>",IP} if (SHOW_MAC=="1") printf "<td>%s </td>",MAC if (SHOW_MAC=="2"){MAC="xx:xx:xx:xx:xx:xx";printf "<td>%s </td>",MAC} printf "<td align=right>%sdB </td>",SIGNAL if (SHOW_DNS=="1") printf "<td>(%s)</td>",DNS printf "</tr>" printf "\n" } ' echo "</table></body><hr>" echo "Version 0.32 for HKfree developed by lada [at] hkfree [dot] org. Small hmtl extension by kendy [at] hkfree [dot] org"
Oleguv firmware
Pro základní nastavení použít web rozhraní.
Kam přidat vlastní nastavení:
/usr/local/sbin/post-boot /usr/local/sbin/post-firewall (inicializace iptables)
(u FW starších než 1.8.x.x je místo sbin init)
Pro pravidelné provádění skriptů, stačí do post-boot přidat
watch -n 60 /usr/local/sbin/skript
kde 60 je 60 sekund
OpenWrt
Pro základní nastavení použít telnet a příkaz setup. Heslo se mění příkazem passwd.
Kam přidat vlastní nastavení:
/etc/init.d/ vlastní skripty pojmenovat jako SXXNazev kde XX je číslo
Jako ekvivalenty k Olegovýmu firmwaru doporučuju
/etc/init.d/S44post-firewall /etc/init.d/S60post-boot
Ale je to viceméně jedno.
Pro pravidelné spouštění skriptů slouží crontab (nezapomeňte v setupu mezi services přidat crond)
crontab -e
spustí vi editor, řadky mají tento formát:
* * * * * příkaz
kde místo hvězdiček mohou být i čísla oddělené čarkami, nebo rozsah čísel v pomlčkách. Pořadí čísel je minuta (0-59), hodina (0-23), den v měsíci (1-31), měsíc (1-12), den v týdnu (1-7)
Pozor! Čas je v OpenWRT posunutý o hodinu dozadu.
Samba
K čemu? Bude se chovat jako browse master a obsluhovat procházení sítí. Nikdy se pak nestane, že člověk s nahozeným firewallem shodí síť Microsoft.
V Olegově firmwaru stačí nadefinovat hostname, upravit správně konfigurační soubor /etc/smb.conf
Já používám tento:
[global] netbios name = nameserver workgroup = JNET guest account = nobody security = share browseable = yes guest ok = yes guest only = yes #log level = 1 max log size = 100 encrypt passwords = no dns proxy = no #wins support = yes #wins proxy = yes domain master = yes os level = 99 preferred master = yes
hodnotu "netbios name" a pracovní skupinu si nastavte podle své situace. Dále je důležité mít nadefinovaný hostname v routru a mít pro něj správný záznam v /etc/hosts.
V /etc/hosts musíte mít řádek
IP.AD.RE.SA hostname
Oleguv FW by to měl mít automaticky, ale raději to omrkněte. (pokud máte mojí databázi, tak to už neplatí ;))
A pak spustit nmbd a smbd (obojí je kupodivu potřeba pro správné procházaení sítě)
nmbd -D -d 3 smbd -D
parametr -d 3 zapne vypisování logů do
/var/log/
Pozorovali jsme jev, kdy některé XP počítače ze seznamu okolních PC zmizely za 4 hodiny provozu. Po znovuspuštění samby se opět oběvují, proto jsem napsal skript:
/usr/local/sbin/sambakill
#!/bin/sh killall nmbd killall smbd /tmp/nmbd -D -d 3 /tmp/smbd -D -d 3
Ten spouštějte každou půlhodinu tak, že do post-boot přidáte řádku
watch -n 1800 /usr/local/sbin/sambakill
pro OpenWRT otevřít crontab -e a přidat řádek
0,30 * * * * /usr/local/sbin/sambakill
Pro OpenWRT je nastavení obdobné, ale je potřeba sambu zkompilovat. Díky za to zaslouží martink, protože mi sambu pro OpenWRT zkompiloval on, wiki návod snad bude brzy ;) Binárky mám na charonu. Jak jsem předpokládal, tak se binárky do OpenWRT nevejdou, takže zbývá je po bootu stáhnout do RAM, nebo přechovávat na flashdisku.
vytvořte skript /usr/local/sbin/sambadl
#!/bin/sh wget -P /tmp http://charon.hkfree.org/~okoun/smb/smbd && \ wget -P /tmp http://charon.hkfree.org/~okoun/smb/nmbd && \ chmod +x /tmp/smbd /tmp/nmbd && \ touch /tmp/samba if [ ! -e /tmp/samba ]; then sleep 60 . $0& else mkdir /tmp/lock /usr/local/sbin/sambakill fi
A třeba do /etc/init.d/S60post-boot přidejte řádku
/usr/local/sbin/sambadl&
takže se skript spustí po bootu a pokusí se stáhnout binárky každou minutu dokuč se to nepovede. Pak vytvoří složku /tmp/lock a sambu spustí.
Webserver
Předpokládejme, že kořenový adresář pro web server je v /usr/local/web. Skripty umisťujte do /usr/local/web/cgi-bin. Nezapomeňte jim dát právo pro spouštění (viz. pozn. dole) a první řádek musí být #!/bin/sh.
Olegův FW
Nejprve nastavíme přesměrování portu nového serveru na port 80 do post-firewall zapíšeme
# allow only localhost (or SSH) HTTP session... iptables -I INPUT -p tcp --dport 80 -s ! 127.0.0.1 -j DROP iptables -I INPUT -p tcp --dport 80 -s XX.XX.XX.XX -j ACCEPT # redirect from admin pages to public pages iptables -t nat -A PREROUTING -p tcp -s ! 127.0.0.1 -d AA.AA.AA.AA --dport 80 -j DNAT --to-destination AA.AA.AA.AA:81 iptables -t nat -I PREROUTING -d AA.AA.AA.AA -p tcp --dport 81 -j DROP
Kde místo XX.XX.XX.XX dejte IP adresu klientského počítače, kterým často přistupujete k admin stránkám a místo AA.AA.AA.AA dejte IP adresu, která bude zobrazovat web server. Vzhledem k tomu, že ASUS bude mít určitě alespoň 2 IP adresy, tak adresa XX.XX.XX.XX při otevření jiné IP adresy než je AA.AA.AA.AA zobrazí admin stránky. Z jiné IP se k admin stránkám dá dostat třeba forwardnutím portu 80 přes SSH tunel.
do post-boot přidáme
busybox_httpd -p 81 -h /usr/local/web
OpenWRT
do spouštěcího skriptu (např. /etc/init.d/S60post-boot přidáme řádku
httpd -p 80 -h /usr/local/web
A je to.
Poznámka na konec - všechny skripty musejí mít právo se spustit - to se dělá příkazem chmod +x skript.
Upload firmware
co delat kdyz nejde ani win klient
tftp.exe -i -v -t60 IP_ASUSE GET ASUSSPACELINK
tftp.exe -i -v -t60 IP_ASUSE PUT firmware.trx ASUSSPACELINK
Asus se rozblika
Funkcni upload s atftp (v Linuxu)
- atftp
- tftp> connect 192.168.1.1
- tftp> GET ASUSSPACELINK
- tftp> PUT openwrt-brcm-2.4-squashfs.trx ASUSSPACELINK
A hotovo