DD-WRT działa na moim D-Linku DIR-320 już jakiś czas a konfiguracja nieco się zmieniła. Warto więc napisać kilka słów na ten temat. Będzie bardziej technicznie niż w ostatnim odcinku, ale też treściwie.
Po tygodniu około obcowania, router pozwala mi teraz połączyć się z zewnątrz i bezpiecznie korzystać z Internetu. Co ważne, DIR-320 z DD-WRT, póki co, pracuje bardzo stabilnie. Nie podłączyłem jeszcze do niego dużego dysku twardego, więc ściąganie danych z sieci przez FTP czy torrenty nie ma chwilowo większego sensu, ale to tylko kwestia czasu (i znalezienia sensownej promocji na dyski). Podłączona jest za to drukarka (Canon iP4000), która dzięki temu stała się dostępna dla wszystkich komputerów w sieci.
USB
Przede wszystkim, zgodnie z wcześniejszym planem, wykorzystałem port USB. Jest to krok, bez którego ciężko cokolwiek sensownego zrobić, poza prostymi zabawami. Ponieważ port jest jeden, a potrzeb wiele, więc pierwszą rzeczą, którą zrobiłem, było podłączenie do routera huba USB.
Co podłączyć do huba? Niejako naturalna wydaje się drukarka, przynajmniej jeżeli mamy w domu kilka komputerów, które mogą ją współdzielić. Aby zainstalować drukarkę trzeba jednak mieć jakieś oprogramowanie, więc przyda się miejsce, gdzie można zainstalować programy. Ja użyłem klucza USB (lub penrive, jak niektórzy wolą). Wiadomo, że dla Linuksa najlepszy jest system plików linuksowy, więc przed podłączeniem klucza, utworzyłem na nim partycję z ext3 – po podłączeniu pendrive do laptopa uruchomiłem fdiska a potem mkfs.ext3.
Przez interfejs web dd-wrt uruchomiłem obsługę USB, dysków, ext2/ext3 i zaleciłem automatyczne mountowanie dysku w katalogu /opt. Po podłączeniu klucza USB do DIR-320, partycja /opt została automatycznie podmountowana.
Także po zalogowaniu przez ssh możemy zobaczyć, że partycja /opt jest widoczna:.
root@home:/opt/config# mount
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro)
none on /dev type devfs (rw)
proc on /proc type proc (rw)
ramfs on /tmp type ramfs (rw)
/dev/discs/disc0/part1 on /opt type ext3 (rw)
Optware
/opt jest dostępny do zapisu, /tmp podobnie (ten jednak rezyduje w pamięci ram), możemy więc zainstalować optware. Na dobry początek:
wget http://www.wlan-sat.com/boleo/optware/optware-install-ddwrt.sh -O - | tr -d '\r' > /tmp/optware-install.sh
root@home:/tmp# chmod a+x /tmp/optware-install.sh
root@home:/tmp# /tmp/optware-install.sh
Checking system config ...
Using 217.173.190.1 as default gateway.
Using the following nameserver(s):
nameserver 192.168.150.1
Installing package uclibc-opt_0.9.28-13_mipsel.ipk ...
Connecting to ipkg.nslu2-linux.org (140.211.169.169:80)
uclibc-opt_0.9.28-13 100% |*******************************| 832k 00:00:00 ETA
Updating /opt/etc/ld.so.cache
Installing package ipkg-opt_0.99.163-10_mipsel.ipk ...
Connecting to ipkg.nslu2-linux.org (140.211.169.169:80)
ipkg-opt_0.99.163-10 100% |*******************************| 75810 00:00:00 ETA
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/Packages.gz
Updated list of available packages in /opt/lib/ipkg/lists/optware
Successfully terminated.
Installing uclibc-opt (0.9.28-13) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/uclibc-opt_0.9.28-13_mipsel.ipk
package uclibc-opt suggests installing ipkg-opt
Configuring uclibc-opt
Updating /opt/etc/ld.so.cache
Successfully terminated.
Installing ipkg-opt (0.99.163-10) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/ipkg-opt_0.99.163-10_mipsel.ipk
Configuring ipkg-opt
Successfully terminated.
Pierwszy sukces! Upewnimy się jeszcze czy /opt jest w ścieżce wykonywania programów:
root@home:/tmp# env | grep PATH
LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib:/mmc/lib:/mmc/usr/lib:/opt/lib:/opt/usr/lib
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/mmc/sbin:/mmc/bin:/mmc/usr/sbin:/mmc/usr/bin:/opt/sbin:/opt/bin:/opt/usr/sbin:/opt/usr/bin
Jak widać jest, więc możemy przejść dalej. Zaczniemy od sprawdzenia, jakie programy są dostępne do zainstalowania: ipkg-opt list | more
. Lista jest całkiem imponująca. Wszak możliwość zainstalowania Apache z php to już nie są żarty. My jednak tak ekstremalnie bawić się nie będziemy, skupimy się na użytecznych rzeczach.
ncftp
Dla próby, czy zarządzanie pakietami działa poprawnie, zainstalujemy ncftp:
root@home:/tmp# /opt/bin/ipkg-opt --tmp-dir /tmp install ncftp
Installing ncftp (3.2.2-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/ncftp_3.2.2-1_mipsel.ipk
Installing ncurses (5.7-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/ncurses_5.7-1_mipsel.ipk
Configuring ncftp
Configuring ncurses
update-alternatives: Linking //opt/bin/clear to /opt/bin/ncurses-clear
Successfully terminated.
Poszło gładko, a co najważniejsze – działa:
root@home:/tmp# ncftp
NcFTP 3.2.2 (Aug 09, 2008) by Mike Gleason (http://www.NcFTP.com/contact/).
Copyright (c) 1992-2008 by Mike Gleason.
All rights reserved.
ncftp> quit
Dobry plan to podstawa
Pierwszy prawdziwy program zainstalowany. Pora zrobić plan działania. Chciałbym mieć możliwość zalogowania się do routera z zewnątrz przez ssh i utworzenia tunelu ssh do lokalnego proxy oraz uruchomienie bezpiecznego połączenia VPN, żeby bezpiecznie korzystać z pozostałych usług (np. poczty przez IMAP, itp).
Dla bezpieczeństwa nie chcę na routerze otwierać zbyt wielu portów, jeden dla ssh powinien wystarczyć, resztę przepuści się przez tunel utworzony przy połączeniu przez ssh.
Konfiguracja SSHd
W zakładce Administration/Management webowego interfejsu odnajdujemy sekcję „Remote Access”. Web GUI oczywiście wyłączone, SSH Management włączony, port SSH 443 (tak najlepiej, dzięki temu często uda nam się połączyć z sieci, z której nie wyjdziemy inaczej niż przez proxy na porty 80 i 443), telnet oczywiście wyłączony, a dozwolone IP wg uznania (w moim przypadku wszystkie). Zapisujemy.
Żeby nie było za łatwo, potrzebna będzie jeszcze jedna opcja – z zakładki Services/Services i sekcji Secure Shell. Włączamy SSH TCP Forwarding. Oczywiście SSHd jest także załączone. Mamy też możliwość wklejenia do pola tekstowego swojego klucza publicznego SSH, co pozwoli logować się bez użycia hasła. Ponownie zapisujemy.
Proxy
Pora pomyśleć o proxy. Wyborem, który tutaj się sam narzuca jest tinyproxy. Niestety z nieznanej mi przyczyny, dostępna wersja tinyproxy nie działa poprawnie. Obrazki przechodzą bez problemu, podobnie część stron, ale przy większości plików tinyproxy zamyka połączenie zaraz po przesłaniu nagłówków. Skutkiem tego jest serwowanie pustych stron www. Brzydko, ale nie płaczmy. Ponieważ nie znalazłem na razie rozwiązania tego problemu, postawiłem na privoxy – proxy, które filtruje serwowane strony wg naszych wytycznych.
Instalujemy więc privoxy:
/opt/bin/ipkg-opt --tmp-dir /tmp install privoxy
Installing privoxy (3.0.11-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/privoxy_3.0.11-1_mipsel.ipk
Configuring privoxy
Successfully terminated.
Ponieważ filtrowanie nie jest naszym celem, po zainstalowaniu wyłączymy wszystkie filtry, mając na uwadze, że w każdej chwili będziemy mogli je włączyć, aby np. wyciąć reklamy, zadbać o bezpieczeństwo i prywatność (lub raczej o ich złudne poczucie…). Przechodzimy więc do konfiguracji modyfikując plik /opt/otc/privoxy/config. Pierwsze co robimy, to włączamy nasłuch na interfejsach 127.0.0.1 (na potrzeby połączeń tunelowanych przez ssh) i interfejsie sieci wewnętrznej (przyjmijmy, że mamy sieć 192.168.130.0). Modyfikujemy linię w pliku konfiguracyjnym:
listen-address 127.0.0.1:8118 192.168.150.1:8118
Potem jeszcze, zgodnie z założeniem, wyłączamy domyśle filtry komentując dwie linie:
#actionsfile match-all.action # Actions that are applied to all sites and maybe
#actionsfile default.action # Main actions file
Pora na mały test, uruchamiamy privoxy:
/opt/sbin/privoxy /opt/etc/privoxy/config &
Sprawdzamy, czy uruchomił się i nasłuchuje na porcie 8118:
root@home:/opt/config# netstat -a | grep 8118
Jeżeli wszystko w porządku, konfigurujemy przeglądarkę do obsługi nowego proxy. Żeby nie przedłużać zrobimy to od razu dla tunelu ssh. Adres proxy to 127.0.0.1, port 8118. Następnie łączymy się przez ssh z zadaniem tunelu od portu 8118 lokalnego komputera do portu 8118 na 127.0.0.1 routera. Jeżeli łączymy się z zewnątrz, dodajemy -p 443 (używając Windowsa także możemy zestawić tunel wybierając odpowiednie opcje np. w Putty):
ssh -p 443 -l root -L 8118:127.0.0.1:8118 naszrouter.dyndns.org
Oczywiście zakładam, że dyndns jest już skonfigurowany. Jeżeli nie, podajemy zamiast tego IP routera (wewnętrzne lub zewnętrzne, zależnie skąd się łączymy). Po zalogowaniu, przeglądarka internetowa powinna dostawać strony od naszego proxy.
Skrypty startowe
Skrypty startowe (czyli lista zadań/programów do uruchomienia po włączeniu lub restarcie routera) definiujemy z poziomu web GUI routera, bo tak jest najłatwiej. W zakładce Administration/Commands wpisujemy /opt/config/startup.sh &
i klikamy „Save Startup”. Co to za skrypt? Na razie żaden. Dlaczego w ten sposób, zamiast podać po prostu /opt/sbin/privoxy /opt/etc/privoxy/config &
? Tak też można, ale ja preferuję jeden skrypt startowy, który będę modyfikował dodając kolejne usługi zamiast za każdym razem klikać co ma być uruchomione. Poza tym ma to też inne zalety – szybciej można odtworzyć działający system po wymianie routera na inny, robiąc kopię zapasową pendrive backupujemy też skrypty startowe, jeżeli wyjmiemy pendrive to router nie próbuje uruchamiać wielu rzeczy, stwierdza niepowodzenie już przy pierwszym i jedynym skrypcie. Nie przekonuje Cię to? Tak jest dla mnie wygodniej.
Tworzymy więc katalog /opt/config i plik startup.sh, do którego wpisujemy:
/opt/sbin/privoxy /opt/etc/privoxy/config &
Następnie nadajemy prawa do wykonywania chmod a+x /opt/config/startup.sh
i dla sprawdzenia uruchamiamy ponownie router przez reboot
. Logujemy się ponownie do routera i widzimy, że privoxy działa.
Podsumowanie
Mamy więc podłączoną zewnętrzną pamięć masową i potrafimy instalować programy. Teraz także będąc w sieci, której nie ufamy, możemy bezpiecznie surfować po stronach www. Co więcej ustawiając tunel ssh do komputera, który jest w naszej sieci wewnętrznej, możemy połączyć się z nim np. przez vnc, ssh czy rdp, nie wystawiąc na zewnątrz portów innych niż ssh routera. A wszystko to przy jednym, cichym, wszechstronnym urządzeniu wiszącym spokojnie w szafce.
To oczywiście nie wszystko, pozostało jeszcze uruchomienie drukarki i zestawienie połączenia OpenVPN (bo PPTP dostępny od ręki mnie nie satysfakcjonuje), także przez tunel ssh. O tym napiszę następnym razem, jeżeli komuś uda się przebrnąć przez mój techniczny tekst i nadal będzie potrzeba, żeby coś wyjaśnić.
Zapraszam więc do komentowania i wymiany uwag.
Super artykuł! Tak się zastanawiam jak postawić na pendrive serwer shoutcast do internetowego radia.Chodzi mi o funkcje autopilota. Czy dałoby się zrobić coś takiego?
Genialna seria!
Od dłuższego czasu zastanawiam się nad zmianą routerka, żebym mógł podłączyć drukarkę i w przyszłości jakiś dysk, ale ceny ciągle mnie odstraszały, a tutaj proszę – da się to zrobić tanio i dobrze :). Jutro biegnę do sklepu :)…
Dzięki i nie przestawaj pisać o tym routerze!
super sprawa ten router z dd-wrt 🙂 chociaż przydał by się dodatkowy port usb, żebym mógł bez problemu podłączyć drukarkę i pendrive 😉
no to tak jak napisal autor, potrzebujesz huba USB.
Wszystko ładnie (super artykuł), ale jakie prędkości są osiągalne na tak podłączonym dysku flash? Czytałem, że na routerze asusa nie są one wysokie (do 10 MB/s) a jak tutaj sprawa wygląda ?
Prędkości potestuję jak podłączę dysk twardy do routera. Przy flashu i tak większość zależy od szybkości pendrive.
Rodzaj technicznego bloga tu widzę! Super! 🙂
Idąc za Twoim przykładem wgrałem DD-WRT do Linksysa WRT54GSv6, ale że ma mało pamięci, więc tylko mam wersję micro. Kupiłem jednak Asusa i zajmę się tym na poważniej, bazując na tym, co Ty tutaj piszesz. Dzięki, tak w ogóle!
Na marginesie, nie widzę tylko w moim Linksysie z DD-WRT v24-sp1 (07/27/08) micro, tych opcji, o których Ty piszesz, ze je masz!
Chodzi mi o SSH. W sekcji „Remote Access” mam tylko „GUI Management” i „Telnet Management”. Nie mam opcji na „SSH Management”.
Nie mam też tej opcji dla SSH w „Services”, o której piszesz.
Widać, że to „uroki” okrojonej wersji micro. Ale i tak jestem zadowolony, bo firmowy firmware Linsysa był trefny, bo jak ustawiałem jakieś filtry, to różne dziwne rzeczy się działy, a teraz jest bardzo stabilnie i żadnych problemów, póki co. Jedyne co mnie zastanawia, to przybywające nieustannie błędy TX, przy transmisji wi-fi. Ale ponoć, to normalne.
Pozdrawiam i czekam na następne odcinki 🙂
Jesli masz ASUAa to proponuje openWRT – to dopiero mozliwosci i zabawa 🙂
Pozdrawiam !
Czy można prosić o zamieszczenie jakiegos opisu (dla użytkowników windowsowych) jak wykozystać USB jako zwykłą pamięć masową podłączona do Portu USB Dlinka DIR-300. DD-WRT zainstalowany wg powyzszego opisu. Działa super. Pendrive chciałbym wykozystywac jako dodatkowy dysk do kopii danych komputerów peacujacych pod windowsem.
Na jakim etapie powinien się zacząć opis? Czy podłączony dysk już działa i pozostaje wrzcucanie tam danych? Z Windowsem generalnie jest taki problem, że ja go nie używam (choć trochę pamiętam)…
Doszedłem do „…Poszło gładko, a co najważniejsze – działa:
root@home:/tmp# ncftp
NcFTP 3.2.2 (Aug 09, 2008) by Mike Gleason (http://www.NcFTP.com/contact/).
Copyright (c) 1992-2008 by Mike Gleason.
All rights reserved.
ncftp> quit
…”
Niestety po wydaniu komendy ncftp pojawia się ntcftp: not found
A ncftp zainstalowało się prawidłowo? /opt/bin jest w ścieżce?
spróbuj wywołać ipkg-opt update a następnie ponownie zainstaluj ncftp 🙂 powinno działać