Laczenie 2 sieci?
|
|
Jak połączyć 2 sieci (routing w Linuxie)Pewnie wielu z Was, posiadaczy sieci lokalnych, zastanawiało się, jak można połączyć dwie sieci tak, by przekroczyć barierę 185 m bez stosowania kart firmy 3Com. Otóż niezbędnym akcesorium do takiej pracy jest wolnostojący serwer, który musiałby chodzić non-stop. Lokalizacja takiego serwera to najlepiej koniec sieci, by maksymalnie mógł ją wydłużyć. Poza tym serwer nie musi mieć ani klawiatury, ani monitora - wystarczy go tylko raz skonfigurować i zostawić na pastwę losu. Co do mocy takiego komputera to wszystko zależy od systemu operacyjnego. Do prostego rozwiązania na Linuxie wystarczy jakieś 486 i 8 MB RAMu choć to absolutne minimum. Poza tym pewnie użytkownicy sieci chcieliby, aby serwer oprócz łączenia sieci obsługiwał także wewnętrzny e-mail, WWW, FTP i inne usługi. Dlatego rozsądna praca zaczyna się od 486 DX2/4, 16 MB RAM i 200 HDD. Gdy już złożycie serwer ze starych części należy kupić do niego dwie karty sieciowe (do każdej sieci jedna). Konfiguracja Linuxa dla niedoświadczonego użytkownika jest dość trudna, więc zakładam, że czytający ten artykuł ma o tym pojęcie.
Podstawą łączenia dwóch sieci jest transmisja pakietów z jednej karty sieciowej do drugiej. Nosi to nazwę tzw. routingu. Tabela routingu jest automatycznie tworzona na podstawie parametrów kart sieciowych. Można ją obejrzeć poleceniem /sbin/route. Jednak routing załatwia jedynie sprawę pakietów adresowanych. Jednak wiele pakietów to tzw. broadcasty, czyli adresowane do wszystkich (np. Microsoft Network, różne gierki używają tego do znajdywania serwerów, programy do rozmawiania przez sieć, np. LANChat). Sprawą przenoszenia takich pakietów zajmuje się tzw. bridging. Są dwie możliwości łączenia sieci ze względu na adres IP. Można zmienić przedostatnią wartość w adresie sieci, np. 192.168.0.X i 193.168.1.X lub podzielić sieć 192.168.0.X na dwie sieci - 193.168.0.(0-127) oraz 193.168.0.(128-255). Drugie rozwiązanie jest bardziej uniwersalne ponieważ nie zmienia się klasa adresowa C w całej połączonej sieci, a niektóre programy nie tolerują klasy B (np. LANChat). Podział klasy C IP na dwie części
By skonfigurować karty sieciowe edytujemy pliki /etc/sysconfig/network-scripts/ifcfg-eth0 i ifcfg-eth1 (w dystrybucji Red Hat). Oto przykładowy plik ifcfg-eth0 dla sieci z rozdzieloną klasą C: DEVICE="eth0" I analogiczny plik dla eth1: DEVICE="eth1" W komputerach w sieci trzeba ustawić bramkę (gateway) i tu wpisać KONIECZNIE adres IP karty sieciowej serwera z naszej sieci, np. dla komputera o adresie 192.168.0.7 należy wpisać 192.168.0.1 (jeśli akurat .1 jest serwerem), a dla komputera 192.168.0.163 wpisać 192.168.0.129 (jeśli .129 to druga sieciówka serwera). Oczywiście adresy, które tu przytaczam są przykładowe i nie narzucam adresu rozpoczynającego się 192.168.0, ponieważ może być inny, lecz ostatnia wartość w adresie IP jest niesamowicie ważna. Należy też pamiętać by w pliku /etc/sysconfig/network wpisać GATEWAYDEV="lo" i GATEWAY="127.0.0.1" by nie występowały inne problemy. Po poprawnym skonfigurowaniu wszystkie pakiety (zarówno normalne jak i broadcasty) powinny być poprawnie kierowane. Poprawność działania można sprawdzić z poziomu systemu Windows za pomocą polecenia tracert (lub traceroute w Linuxie), które powinno pokazać trasę pakietów do drugiej sieci poprzez serwer. Uruchamianie dwóch interfejsówAby kernel szukał następnego interfejsu sieciowego gdy już znajdzie jeden do pliku /etc/lilo.conf dopisujemy następującą linijkę append = "ether=0,0,eth1" lub ewentualnie gdy chcemy zrobić bridge'a obsługującego trzy karty sieciowe: append = "ether=0,0,eth1
ether=0,0,eth2" zwiekszając liczbę parametrów ether można dodać większą liczbę urządzeń sieciowych. Jeżeli sterowniki kart sieciowych mamy skompilowane jako moduły wtedy edytujemy plik /etc/conf.modules odpowiednio go modyfikując np: alias eth0 ne lub gdy mamy karty takiego samego typu: alias eth0 ne Warto zaznaczyć, że adresy IP są przydzielane dla urządzeń sieciowych, a nie dla hostów, tzn. że komputer z 3 kartami sieciowymi ma trzy adresy IP a jest jeden jako fizyczny host. Zarówno adresy sieci jak i adresy broadcast są specjalnymi adresami, których hosty nie mogą przyjmować. Uruchamianie Bridge'aAby uruchomić bridge'a jądro systemu musimy skompilować wraz z opcją CONFIG_BRIDGE=y (jak na razie opcja ta jest w fazie eksperymentalnej) i oczywiście CONFIG_NET=y. Aby uruchomić bridge'a musimy zdobyć jego konfigurator, który można ściągnąć z ftp://shadow.cabi.net/pub/Linux. Ponieważ mamy bridge'a na interfejsach musimy nasłuchiwać wszystkich pakietów, także tych nie przeznaczonych dla danej karty, aby to zrobić przełączmy interfejsy w tryb 'promisc': ifconfig promisc eth0 Bridge'a uruchamiamy poprzez jego konfigurator wpisując brcfg -enable Można także poeksperymentować włączając lub wyłączając porty: brcfg -port 0 -disable / -enable Samo polecenie brcfg pokazuje w danej chwili raport. Jeżeli wszystko jest OK to na każdym z interfejsów powinien być inny ruch - sprawdzamy to poleceniem tcpdump -i eth0 Jeżeli chcemy zobaczyć pakiety, które przeszły przez bridge'a do drugiej karty z wewnętrznej sieci uruchamiamy: tcpdump -i eth1 -e host (adres IP hosta) Teraz jeżeli wyślemy jakis pakiet do podanego hosta informacje o nim poda nam tcpdump. Polecenia inicjalizujące bridge'a i przełączające karty w odpowiedni tryb można dodać do rc.local aby uruchamiały sie za każdym razem po boocie. Jeżeli przy uruchamianiu brcfg zobaczymy komunikat Autorzy:
|
Wyślij E-mail MMalinow@bigfoot.com z pytaniami lub
komentarzem.
|