Projekt przygotowany na Pracownię Specjalistyczną - Praktikum komputerowo-sieciowe 2002/2003
Autor: Tomasz Perlik
mój adres: perl (at) phys (dot) uni (dot) torun (dot) pl
Temat ćwiczenia:
Jednodyskietkowy Router Ethernetowy
opiekun zadania:
dr Norbert Jankowski
Problem który tutaj będę poruszał jest z życia wzięty i pojawił się niedawno, kiedy wykupiłem łącze stałe przez gniazdko telewizjne. Ponieważ wpadł mi dodatkowo w ręce "staruszek" 486DX 16 MB RAM (niestety bez dysku i CD-ROMu - no cóż w końcu za darmo go dostałem ;-) , postanowiłem postawić sobie router (najlepiej z firewallem i maskaradą adresów - pojęcia zostaną wytłumaczone przy omawianiu FreeSCO). Poniższy tekst opisuje co na razie przetestowałem i jak to zrobiłem.
Jak widać pierwszym ograniczeniem jest
sprzęt, na którym chciałbym
uruchomić router, czyli musi chodzić z procesorem 486DX, z 16MB RAMu
oraz być jednodyskietkowy (bo dysku jak narazie nie mam). Drugim
ograniczeniem jest
"kasa", ponieważ chciałbym aby
router miał darmowe oprogramowanie. Gdybym nie miał tych dwóch
ograniczeń to postawiłbym sobie router na Win2000 Server (zobacz tutaj
- najprostsze rozwiązanie), ze względu na prostote obsługi (co do
bezpieczeństwa to sprawa sporna co wybrać ;P). Kolejnym
ograniczeniem jest to że router powinien posiadac przynajmniej
klienta DHCP
(najlepiej również serwera tej usługi), dlatego że mój dostawca
usługi internetowej przydziela mi automatycznie adres IP (nie jest on
statycznie przydzielony).
Oto sprzęt na którym postanowiłem zbudować router:
Internet dostarczony jest przez gniazdko telewizyjne, do którego podłaczony jest modem Motorola. Modem z komputerem komunikuje się za pomocą karty sieciowej. Jak widać router ten jest routerem Ethernetowym (ponieważ bedzie jakby pomostem miedzy siecią domową a siecią mojego dostawcy usługi).
Zanim jeszcze przejdę do mojego przypadku (tzn. ograniczenia sprzętowego), chciałbym wspomnieć jak w bardzo prosty sposób stworzyć co prawda bardzo prosty (tzn. bez możliwości ingerencji w jego działanie) router w Windows 2000/XP. Wytarczy wybrać w "Panelu Sterowania" - "Połączenia sieciowe i telefoniczne", następnie kliknąć prawym przyciskiem na ikone "Połaczenia internetowe", z manu podręcznego wybieramy "Właściwości". Klikamy na zakładke "Udostępnianie", po czym odchaczamy "Włacz udostępnianie połączniea internetowego dla tego połączenia". Po naciśnięciu "OK" system zapyta nas czy drugą karte sieciową ma ustawić na adres IP 192.168.0.1 naciskamy "Tak", musimy jednak pamiętać, że tej karcie sieciowej został przypożądkowany statyczny adres IP i jeżeli wcześniej mieliśmy ustawione połączenia z innymi komputerami przy pomocy tej karty to teraz należy je uaktualnić (tzn. albo ustawić aby adresy były przydzielane automatycznie - systemy Windows mają DHCP wbudowane w system, lub też ustawić je od nowa pamiętając że inne komputery powinny kożystać z tej samej klasy adresów IP).
FreeSCO (skrót od Free ciSCO :-) został napisany przez Serge Strozhevykhego i jest jednodyskietkowym routerem linuksowym (bazuje na jądrze 2.0.38). Autor położył szczególną uwagę na prostote instalacji routera jak również łatwość jego konfiguracji. Z tego właśnie względu przedstawię go jako pierwszą propozycję routera i przy jego pomocy wytłumaczę pojęcia występujące podczas instalacji i konfiguracji również w trudniej konfigurowalnych routerach linuksowych.
WAŻNE!!! Przed instalacją którejkolwiek dystrybucji linuksa wyłącz w BIOSie opcje PNP OS Installed (ustaw ją na wartość NO).
W przeciwnym przypadku karty mogły zostać źle albo w ogóle nie rozpoznane przez dystrybucje.
Upewnij się że w BIOSie ustawiony jest start ze stacji dyskietek.
Dystrybucje jednodyskietkowe rozprowadzane są najczęściej w postaci "obrazów" (lub też archiwów z obrazem) - "idiot image" (są to pliki binarne przy pomocy których możemy wykonać wierny duplikat dyskietki). Na końcu tego paragrafu znajdują się linki plików do wszytkich dystrybucji jakie w tym tekście omówie.
Oto jakie kroki należy wykonać gdy już posiada się plik z obrazem:
w DOSie:
w Linuksie:
Pliki i obrazy do pobrania:
Pytania podczas instalacji:
Muszę przyznać, że FreeSCO pozytywnie mnie zaskoczył, nie dośc że instalacja była naprawdę prosta to i wymagania sprzętowe są bardzo niskie (można nawet odpalić na 386DX 4MB RAMu - pytanie tylko z czym ;-). Przychylam się do sloganu twórców tej dystrybucji, że jest ona darmowym odpowiednikiem komercyjnych rozwiązań w dziedzinie routerów. Ponadto wspiera do 3 kart sieciowych (ethernet/arcnet/token_ring/arlan.network) oraz do 2 modemów w jednym komputerze. Freesco ma jeszcze jedną dobrą cechę - możliwośc konfiguracji i zarządzania z przeglądarki internetowej (co prawda żeby ustawić najważniejsze rzeczy trzeba zalogować sie jako root ale i tak jestem pod wrażeniem tego co można było upchnąć na jedną dyskietkę). Aby konfigurować router wystarczy w przeglądarce wpisać numer IP routera z portem komunikacji (w naszym przypadku: http://192.168.0.1:82) następnie logujemy się na router i już możemy diagnozować prace urządzenia.
UWAGA!!! FREESCO nie obsługuje WinModemów jak również urządzeń podłączanych przez PC Card Slot (takich jak zewnętrzne FDD czy karty sieciowe do Notebooków).
Linux Router Project (w skrócie LRP, bazujący na jądrze 2.0.36) jest podobnie jak FreeSCO małą dytrybucją Linuxa mieszczącą się na jednej dyskietce(więcej o tym czym jest LRP znajduje się tutaj). Podobnie jak FeeSCO przy jego pomocy można skonfigurować router sieciowy (mój komputer mieści się w minimalnych wymaganiach tego systemu). LRP jest trudniej konfigurowalną dystrybucją od FreeSCO (jeżeli chodzi o dobre skonfigurowanie klienta i serwera DHCP, natomiast jako serwer połączenia komutowanego - Dialupa może pracować praktycznie po minimalnej korekcie). LRP ma jednak pewna przewagę nad FreeSCO ponieważ jest w pełni modularny począwszy od SYSLinuxa aż po sterowniki. Właśnie dzięki temu doczekał się wielu przekształceń i modyfikacji przez użytkowników. Najsłynniejsze i najlepsze to modyfikacje zaproponowane przez Charlesa Steinkuehler'sa: Dachstein (bazujący na jądrze 2.2.19), EigerStein (bazujący na jądrze 2.2.16). Z innych bardzo znanych dystrybucji LRP można wymienić: Materhorn (bazujący na jądrze 2.2.13) albo Eiger (na jądrze 2.2.16). Dystrybucje te były opracowywane przez użytkowników, przez nich również testowane.
Linux Router Project w wersji 2.9.4 jest główną gałęzią tego projektu. W standardowej wersji (tzn. w standardowym pliku obrazu) nie znajduje się ani klient ani serwer DHCP (pliki: dhclient.lrp - klient i dhcpd.lrp - serwer; możesz pobrać z tej strony).
UWAGA!!! W związku z tym że wyszło tak wiele odmian LRP, do odpowiednich odmian LRP są odpowiednie moduły *.lrp oraz sterowniki *.o (sterowniki były kompilowane na różnych jądrach i dlatego nie pasuja wymiennie)
Nie musimy sie przejmować tym że w network.conf mamy w eth0 przypisany adres statycznie, ponieważ dhclient nadpisze te ustawienia.
W moim przypadku byłem zmuszony doinstalować (nie tylko w LRP 2.9.4 lecz także w EigerStein oraz w Materhornie) sterownik karty sieciowej (rtl8139.o - tak jak wcześniej wspomniałem dla każdej dystrybucji był to inny plik, ponieważ każda z dystrybucji posiadała inne jądro). Oto w jaki sposób można to zrobić:
UWAGA!!! Instalacja którą przeprowadziliśmy jest tylko w pamięci RAM jeżlei chcemy, żeby zmiany odniosły skutek przy następnym starcie systemu należy zrobić Backup systemu (w lrcfg).
Oprócz sterowników w dystrybucji LRP 2.9.4 musiałem dołożyć klienta i serwer DHCP (można to wykonać z poziomu Windowsa):
Edytor pico jest edytorem tekstowy, można go uruchamiać prosto z programu konfiguracyjnego lrcfg oraz z lini poleceń ae.
Zapis zmian do pliku F3 (lub ALT+W)
Wyjście z programu F2
---------------- Begin first network.conf ----------------------- ########################################################### # Auto configuration bypass (Say NO to use this file) ########################################################### DIRECT_SETTINGS_ONLY=NO ########################################################### # Network Settings # # May be overridden by DHCP client scripts, if present # ########################################################### VERBOSE=YES MAX_LOOP=6 # Forward IP's IPFWDING_KERNEL=YES IPFWDING_FW=YES # Set a hostname below... CONFIG_HOSTNAME=YES # The hosts and DNS are not essential... # CONFIG_HOSTSFILE=NO # CONFIG_DNS=NO ########################################################### # Interfaces ########################################################### IF0_IFNAME=eth0 IF0_IPADDR=24.136.35.51 IF0_NETMASK=255.255.248.0 IF0_BROADCAST=24.136.39.255 # Protect against spoofed IP's... IF0_IP_SPOOF=YES IF1_IFNAME=eth1 IF1_IPADDR=192.168.1.1 IF1_NETMASK=255.255.255.0 IF1_BROADCAST=192.168.1.255 # Protect against spoofed IP's... IF1_IP_SPOOF=YES ########################################################### # Hosts ########################################################### # Don't need this stuff... #HOST0_IPADDR=24.136.0.1 #HOST0_GATEWAY_IF=default #HOST0_GATEWAY_IP=24.136.0.1 #HOST0_IPMASQ=NO #HOST0_IPMASQ_IF=default ########################################################### # Networks ########################################################### NET0_NETADDR=24.136.32.0 NET0_NETMASK=$IF0_NETMASK NET0_GATEWAY_IF=default NET0_GATEWAY_IP=default # No need to masq external, legitimate IP's... NET0_IPMASQ=NO NET0_IPMASQ_IF=default NET1_NETADDR=192.168.1.0 NET1_NETMASK=$IF1_NETMASK NET1_GATEWAY_IF=default NET1_GATEWAY_IP=default # Must masq internal illegit IP's... NET1_IPMASQ=YES NET1_IPMASQ_IF=default ########################################################### # Gateways (Default Routes) ########################################################### GW0_IPADDR=24.136.32.1 GW0_IFNAME=$IF0_IFNAME GW0_METRIC=1 ########################################################### # Hostname Requires: CONFIG_HOSTNAME=YES ########################################################### HOSTNAME=lobotomy ########################################################### # Hosts file (Static domainname entires) Requires: CONFIG_HOSTSFILE=YES ########################################################### # IP FQDN hostname alias1 alias2.. #HOSTS0="$IF0_IPADDR $HOSTNAME.21stcentury.net $HOSTNAME mrrtr" #HOSTS1="192.168.1.22 host2.somewhere.net host2 h2" ########################################################### # Domain Search Order and Name Servers Requires: CONFIG_DNS=YES ########################################################### # Currently not used.... DOMAINS="21stcentury.net" DNS0=24.136.0.3 DNS1=24.136.0.2 ########################################################### # End ########################################################### ---------------- End first network.conf -----------------------
---------------- Begin second network.conf ----------------------- ########################################################### # Auto configuration bypass (Say NO to use this file) ########################################################### DIRECT_SETTINGS_ONLY=NO ########################################################### # Network Settings # # May be overridden by DHCP client scripts, if present # ########################################################### VERBOSE=YES MAX_LOOP=6 # Forward IP's IPFWDING_KERNEL=YES IPFWDING_FW=YES # Set a hostname below... CONFIG_HOSTNAME=YES # We now have things working to the point that we can turn these on.... CONFIG_HOSTSFILE=YES CONFIG_DNS= YES ########################################################### # Interfaces ########################################################### # Keep the same as above, in first example. Deleted to avoid confusion ########################################################### # Hosts ########################################################### # Still don't need this stuff...same as above ########################################################### # Networks ########################################################### # Keep the same as above, in first example. Deleted to avoid confusion ########################################################### # Gateways (Default Routes) ########################################################### # Keep the same as above, in first example. Deleted to avoid confusion ########################################################### # Hostname Requires: CONFIG_HOSTNAME=YES ########################################################### # Keep the same as above, in first example. Deleted to avoid confusion ########################################################### # Hosts file (Static domainname entires) Requires: CONFIG_HOSTSFILE=YES ########################################################### # IP FQDN hostname alias1 alias2.. # The following have now been uncommented to make entries in /etc/hosts # for internal machines HOSTS0="$IF0_IPADDR $HOSTNAME.21stcentury.net $HOSTNAME mrrtr" HOSTS1="192.168.1.10 byron.21stcentury.net byron" HOSTS2="192.168.1.11 hesse.21stcentury.net hesse h" HOSTS3="192.168.1.12 poe.21stcentury.net poe" ########################################################### # Domain Search Order and Name Servers Requires: CONFIG_DNS=YES ########################################################### # This is now used.... DOMAINS="21stcentury.net" DNS0=24.136.0.3 DNS1=24.136.0.2 ########################################################### # End ########################################################### ---------------- End second network.conf -----------------------
---------------- Begin network_direct.conf ----------------------- ########################################################### # Direct Network Settings # # Do not set any of these until AFTER you have a working configuration # ########################################################### # Potential HTTP port forwarding, currently not done # ipportfw -A -t external_IP/80 -R internal_IP/80 #Extensive firewall rules # Avoid MS NetBIOS over IP passing out of LAN echo " Denying NetBIOS..." ipfwadm -F -a deny -P tcp -S 0/0 137:139 ipfwadm -F -a deny -P udp -S 0/0 137:139 # -- Begin commands designed to eliminate # -- false PortSentry alarms # Ignore incoming NetBIOS from external LAN ipfwadm -I -a deny -W eth0 -P tcp -S 0/0 137:139 ipfwadm -I -a deny -W eth0 -P udp -S 0/0 137:139 # Avoid packets from misconfigured hosts echo " Denying reserved IP's on eth0..." ipfwadm -I -a deny -W eth0 -P tcp -S 192.168.0.0/16 ipfwadm -I -a deny -W eth0 -P udp -S 192.168.0.0/16 ipfwadm -I -a deny -W eth0 -P tcp -S 10.0.0.0/8 ipfwadm -I -a deny -W eth0 -P udp -S 10.0.0.0/8 # Avoid hosts that seem to flood the net echo " Denying problem hosts..." ipfwadm -I -a deny -W eth0 -P tcp -S 4.0.0.3/32 ipfwadm -I -a deny -W eth0 -P udp -S 4.0.0.3/32 # Avoid packets from external net to common protocols echo " Denying problem ports using network 24.136.32.0/19..." ipfwadm -I -a deny -W eth0 -P tcp -S 24.136.32.0/19 512:520 ipfwadm -I -a deny -W eth0 -P udp -S 24.136.32.0/19 512:520 ipfwadm -I -a deny -W eth0 -P tcp -S 24.136.32.0/19 -D 0/0 111 ipfwadm -I -a deny -W eth0 -P udp -S 24.136.32.0/19 -D 0/0 111 # -- End commands designed to eliminate # -- false PortSentry alarms ---------------- End network_direct.conf -----------------------
Instalacja tych dystrybucji jest w zasadzie identyczna (szczegóły tutaj) jak LRP 2.9.4 z tym, że już mamy wyodrębnione wersje na statyczny adres IP oraz na przydział dynamiczny (zobacz tutaj). Ważne w tym wypadku jest to żebyśmy odpowiednio dobrali sterowniki do karty sieciowej (w przeciwnym przypadku klient DHCP jak i serwer nie rozpoznają urządzeń i nieprawidłowo się zainstalują). Dystrybucja Materhorn, Eiger i EigerStein zawierają już w sobie klienta i serwer DHCP jak również dnscache tak więc nie musimy ściągać i konfigurować usługi DHCP (tylko musimy przeprowadzić konfigurację związaną z naszymi kartami sieciowymi). Moduły DHCP powinny automatycznie się uruchomić i zaktualizować pliki konfiguracyjne (które zostaną nadpisane). Jeżeli wystąpiły jakieś błędy to w tym miejscu znajduje się opis problemów występujących przy instalacji DHCP.
Pomimo iż początkowo nie byłem zbyt zadowolony z procesu instalacji i konfiguracji Linux Router Projectu, to jednak im bardziej go poznawałem tym bardziej sie do niego przekonywałem. Szczególnie spodobała mi się dystrybucja EigerStein Dynamic IP, która praktycznie po paru kosmetycznych poprawkach zaczęła poprawnie działać. Materhorn i EigerStein mają również wbudowany firewall (Sangomy) do LRP 2.9.4 możemy też dodać moduł firewall (np. Sangomy albo Seawall). Minusem jest brak konfigurowalnosci z poziomu przeglądarki internetowej (ale z tego co czytałem jest już moduł dzięki któremu można to zrobić niestety jeszcze do niego nie dotarłem). FreeSCO jak i LRP są moim zdaniem bardzo dobrymi produktami, które z powodzeniem mogą powalczyć z urządzeniami komercyjnymi. Zawierają w sobie maskarade adresów (czyli maechanizm NAT - Network Adress Translation) oraz dobrego firewalla, co więcej pracują na "starych sprzętach" przez co stają się bardzo dobrą ofertą dla małych i średnich sieci jako tanie routery i zapory ogniowe dla pojedynczych komputerów domowych podłączonych do sieci.
Przepraszam za wszystkie błędy ortograficzne i literówki.
Strona czeka na zaktualizowanie, bądźcie cierpliwi ;-)