[Company Logo Image]  

Home ] Up ] News ] Szukaj ] Index ] NetMapa ] Ankieta ] Sprawy GroszNetu ] Forum ] FAQ ] Download ]

Laczenie 2 sieci?

 

 

Home
Up

Email

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.

Routing

 

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

  Segment pierwszy sieci Segment drugi sieci
Adresy IP X.X.X.1-126
(zalecane 1 - serwer)
X.X.X.129-254
(zalecane 129 - serwer)
Maska podsieci (netmask) 255.255.255.128 255.255.255.128
Broadcast X.X.X.127 X.X.X.255
Sieć (network) X.X.X.0 X.X.X.128

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"
IPADDR="192.168.0.1" ; adres IP serwera
NETWORK="192.168.0.0" ; sieć [0-127]
NETMASK="255.255.255.128" ; mamy tylko połowę sieci więc 128 zamiast 0
BROADCAST="192.168.0.127" ; w połowicznej sieci broadcast ma się tak
ONBOOT="yes"
BOOTPROTO="none"

I analogiczny plik dla eth1:

DEVICE="eth1"
IPADDR="192.168.0.129" ; adres IP serwera (pierwszy dostępny w sieci 128)
NETWORK="192.168.0.128" ; sieć [128-255]
NETMASK="255.255.255.128"
BROADCAST="192.168.0.255" ; w tej połowicznej sieci broadcast ma się inaczej
ONBOOT="yes"
BOOTPROTO="none"

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ów

Aby 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
alias eth1 3c509
options ne irq=5 io=0x300
options ne irq=10 io=0x220

lub gdy mamy karty takiego samego typu:

alias eth0 ne
alias eth1 ne
options ne io=0x300,200

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'a

Aby 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
ifconfig promisc eth1
itd

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
brcfg -port 1 -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
tcpdump -i eth1

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
"ioctl(SIOCGIFBR) failed: Package not found"
to znaczy, że zapomnieliśmy wkompilować w jądro opcji bridge.

Autorzy:
GORO goro@vc.pl
Melun melun@friko2.onet.pl




 

 

Wyślij E-mail MMalinow@bigfoot.com z pytaniami lub komentarzem.
Copyright © 2000 GroszNet Osiedlowa Sieć Komputerowa
Ostatnia modyfikacja: March 01, 2000