ASUS: Porovnání verzí
| (Není zobrazeno 24 mezilehlých verzí od 11 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ě === | ||
| + | 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 === | === Maškaráda === | ||
| Řádek 170: | Řádek 348: | ||
fi | fi | ||
| − | if [ "$DNS" = "$DBDNS" ]; then | + | if $(echo "$DNS" |grep -i -q "$DBDNS"); then |
| + | # if [ "$DNS" = "$DBDNS" ]; then | ||
# echo "Vase PC bylo identifikovano podle jmena." | # echo "Vase PC bylo identifikovano podle jmena." | ||
IDOK=1 | IDOK=1 | ||
| Řádek 197: | Řádek 376: | ||
fi | fi | ||
| + | |||
| + | === QoS shaper === | ||
| + | Poměrně rozsáhlý [[QoS|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 [http://charon.hkfree.org/~okoun/shaper/htb.sh 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&nbsp;&nbsp;</td>",IP | ||
| + | if (SHOW_IP=="2"){IP="x.x.x.x";printf "<td>%s&nbsp;&nbsp;</td>",IP} | ||
| + | if (SHOW_MAC=="1") printf "<td>%s&nbsp;&nbsp;</td>",MAC | ||
| + | if (SHOW_MAC=="2"){MAC="xx:xx:xx:xx:xx:xx";printf "<td>%s&nbsp;&nbsp;</td>",MAC} | ||
| + | printf "<td align=right>%sdB&nbsp;&nbsp;</td>",SIGNAL | ||
| + | if (SHOW_DNS=="1") printf "<td>(%s)</td>",DNS | ||
| + | printf "</tr>" | ||
| + | printf "\n" | ||
| + | } | ||
| + | |||
| + | ' | ||
| + | echo "</table></body><hr>" | ||
| + | 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 204: | Řádek 501: | ||
/usr/local/sbin/post-boot | /usr/local/sbin/post-boot | ||
/usr/local/sbin/post-firewall (inicializace iptables) | /usr/local/sbin/post-firewall (inicializace iptables) | ||
| − | (u FW starších než 1.8.x.x je místo sbin init) | + | (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 | Pro pravidelné provádění skriptů, stačí do post-boot přidat | ||
| Řádek 215: | Řádek 512: | ||
Kam přidat vlastní nastavení: | Kam přidat vlastní nastavení: | ||
/etc/init.d/ | /etc/init.d/ | ||
| − | vlastní skripty pojmenovat jako SXXNazev kde XX je | + | 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 | + | Pro pravidelné spouštění skriptů slouží crontab (nezapomeňte v setupu mezi services přidat ''crond'') |
crontab -e | crontab -e | ||
spustí vi editor, řadky mají tento formát: | spustí vi editor, řadky mají tento formát: | ||
| Řádek 249: | Řádek 550: | ||
preferred master = yes | preferred master = yes | ||
| − | "netbios name" | + | 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 | V /etc/hosts musíte mít řádek | ||
| − | IP.AD.RE.SA | + | 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 | + | A pak spustit nmbd a smbd (obojí je kupodivu potřeba pro správné procházaení sítě) |
nmbd -D -d 3 | nmbd -D -d 3 | ||
smbd -D | smbd -D | ||
| Řádek 260: | Řádek 562: | ||
/var/log/ | /var/log/ | ||
| − | Pro '''OpenWRT''' je nastavení obdobné, ale je potřeba sambu zkompilovat. | + | 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 | ||
| − | + | ==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