ASUS: Porovnání verzí
Řádek 72: | Řádek 72: | ||
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 === |
Verze z 20. 3. 2005, 17:55
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.
"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.