Zdobądź konfigurator do bridge'a BRCFG.tgz.
Przeczytaj Multiple-Ethernet, żeby się dowiedzieć jak rozpoznać i skonfigurować więcej kart sieciowych.
Więcej szczegółów na temat magii startowania, które możesz potrzebować jest w BootPrompt-HOWTO.
Może obędzie się bez NET-3-HOWTO. Jest to dobry i długi dokument i będziesz musiał wybrać sobie to czego potrzebujesz.
Po przeczytaniu powyższego dowiesz się, że musisz skompilować
jądro, żeby rozpoznało drugie urządzenie ethernet-owe podczas
startu oraz, że musisz dodać linię do pliku
/etc/lilo.conf
i uruchomić lilo:
append = "ether=0,0,eth1"
Zauważ, że jest tu eth1. eth0 jest pierwszą kartą a eth1 jest drugą kartą. Zawsze możesz podać parametry podczas startu kiedy lilo ich oczekuje. Oto przykład dla trzech kart:
linux ether=0,0,eth1 ether=0,0,eth2
Ja używam loadlin.exe, aby uruchomić Linux-a:
loadlin.exe c:\vmlinuz root=/dev/hda3 ro ether=0,0,eth1 ether=0,0,eth2
Zauważ, że to zmusza jądro do szukania podczas startu. Nie będzie
to miało miejsca jeśli załadujesz sterowniki ethernet-owe jako
moduły (ze względów bezpieczeństwa ponieważ kolejność szukania nie
może być określona). Więc jeśli używasz modułów, to będziesz musiał
dodać parametry określające IRQ i port w pliku
/etc/conf.modules
- to jest mój przykład:
alias eth0 3c509 alias eth1 de620 options 3c509 irq=5 io=0x210 options de620 irq=7 bnc=1
Możesz sprawdzić czy używasz modułów przez ps -aux i
zobaczenie czy jest proces kerneld i czy w katalogu
/lib/modules/`uname -r`
są pliki *.o. (w miejsce
uname -r wstaw wynik tego polecenia). Jeśli masz proces
kerneld albo w podanym katalogu są pliki *.o, to wyedytuj plik
/etc/conf.modules
i przeczytaj uważnie stronę podręcznika
systemowego na temat depmod.
Zauważ też, że do niedawna (2.0.25) sterownik 3c509 nie mógł być użyty jako moduł dla więcej niż jednej karty. Widziałem gdzieś łatę, która naprawia tę niedogodność. Może on być w jądrze kiedy to czytasz.
Skompiluj jądro z włączoną opcją bridge.
CONFIG_BRIDGE=y
Ja skompilowałem także z włączonymi opcjami firewalling, IP-forwarding, IP-masquerading i resztą. Ale tylko jeśli chcesz mieć także firewall.
CONFIG_FIREWALL=y CONFIG_NET_ALIAS=y CONFIG_INET=y CONFIG_IP_FORWARD=y CONFIG_IP_MULTICAST=y CONFIG_IP_FIREWALL=y CONFIG_IP_FIREWALL_VERBOSE=y CONFIG_IP_MASQUERADE=y
Nie potrzebujesz tego wszystkiego. To czego potrzebujesz, to standardowa konfiguracja sieci:
CONFIG_NET=y
i nie sądzę, żebyś się musiał przejmować innymi opcjami związnymi z siecią. Wszystkie opcje, których właściwie nie wkompilowałem w jądro mam dostępne jako moduły i mogę je dodać później.
Zainstaluj nowe jądro, uruchom lilo i zresetuj z nowym jądrem. W tym momencie nic się nie powinno zmienić.
Chris twierdzi, że bridge nie powinien mieć adresu IP, ale to nie jest to ustawienie opisane tutaj.
Będziesz chciał używać tej maszyny do łączenia się z siecią więc potrzebujesz adresu i musisz się upewnić, że masz skonfigurowane poprawnie urządzenie "loopback", tak żeby twoje oprogramowanie mogło komunikować się z miejscamu, z którymi spodziewa się, że będzie się mogło porozumieć. Jeśli nie będzie tego urządzenia, to serwis nazw albo inny serwis sieciowy może nie działać. Przeczytaj NET-3-HOWTO, ale twoja standardowa konfiguracja powinna już to za ciebie zrobić:
ifconfig lo 127.0.0.1 route add -net 127.0.0.0
Będziesz musiał nadać adres obojgu kartom. Ja dopasowałem swój
/etc/rc.d/rc.inet1
w Slackware 3.x, aby ustawić moje dwie
karty. A ty powinieneś także poszukać gdzie jest konfiguracja sieci
u ciebie i podwoić instrukcje. Załóżmy, że masz już adres:
192.168.2.100 (jest to prywatny zarezerwowany adres sieciowy, ale
nieważne - nikomu nie zaszkodzi jeśli uzyjesz tego adresu przez
pomyłkę) wtedy masz już pewnie linię:
ifconfig eth0 192.168.2.100 netmask 255.255.255.0 metric 1
w swojej konfiguracji. Pierwsze co pewnie będziesz chciał zrobić to podzielić przestrzeń adresową na pół, tak że możesz potem te dwie połowy bridge'ować. Więc dodaj linię. która zredukuje maskę tak, że będzie ona adresować mniejszą ilość maszyn:
ifconfig eth0 netmask 255.255.255.128
Spróbuj tego też. Powoduje to obcięcie przestrzeni adresowej do zakresu od .0 do .127.
Teraz możesz ustawić swoją drugą kartę w drugiej połowie adresów. Upewnij się, że nikt jeszcze takiego adresu nie ma. Dla symetrii ja ustawiłem ją na 228 (128+100=228). Każdy adres będzie się tak zachowywał dopóki nie znajdzie się w masce tej pierwszej karty - a nawet wtedy, no może. Unikaj adresów specjalnych takich jak .0, .1, .128 o ile naprawdę wiesz co robisz.
ifconfig eth1 192.168.2.228 netmask 255.255.255.128 metric 1
To powoduje zmniejszenie zakresu adresów drugiej karty do .128 do .255.
Powyższe może być wystarczającą konfiguracją dla działającego bridge'a, ale ja będę miał także firewall i chcę kontrolować fizyczne przeznaczenie niektórych pakietów. Nawet wtedy trzeba się pilnować przed spoofingiem.
Mam małą sieć maszyn dołączonych do hub-a na eth0, więc konfiguruję tam sieć:
route add -net 192.168.2.128 netmask 255.255.255.128 dev eth0
128 byłoby 0 gdybym miał pełną klasę C. "dev eth0" nie jest tu potrzebne ponieważ adres karty zalicza się do tej sieci, ale może być potrzebne dla ciebie.
Na drugiej karcie mam linię idącą prosto do dużego rutera, któremu ufam.
client 129 __ | __ client 1 \ .0 .128 | / net 1 client 2 --- Hub - eth0 - Kernel - eth1 - Hub - Router --- net 2 client 3 __/ .100 .228 .2 | \__ net 3 | client 254
Dołączam adres tego rutera do tej karty jako statyczny ponieważ inaczej zaliczałby się on do maski tej pierwszej karty i jądro źle kierowałoby pakiety do tego dużego rutera.
route add 192.168.2.2 dev eth1
Ja go nie potrzebuję ponieważ nie mam więcej maszyn w tej połówce przestrzeni adresowej, ale deklaruję sieć także na tej drugiej karcie
route add -net 192.168.2.128 netmask 255.255.255.128 dev eth1
Muszę także wysłać wszystkie nie lokalne pakiety w świat, więc informuję jądro, żeby wysyłało je do dużego rutera:
route add default gw 192.168.2.2
To tyle odnośnie standardowego ustawiania sieci, ale my mamy bridge więc musimy na obydwu (?) kartach słuchać pakietów, które nie są przeznaczone dla nas. Następujące dwie linie powinny się znaleźć w pliku konfigurującym sieć:
ifconfig promisc eth0 ifconfig promisc eth1
Na stronie podręcznika systemowego napisane jest, że allmulti=promisc, ale u mnie to nie działało.
Jedno co zauważyłem, to to, że musiałem przynajmniej drugą kartę ustawić w tryb, w którym odpowiadałaby ona dużemu ruterowi jakie maszyny chowam w swojej sieci.
ifconfig arp eth1
Na wszelki wypadek zrobiłem to samo dla pierwszej karty.
ifconfig arp eth0.
Umieść włączanie bridge'owania w swoim pliku konfiguracyjnym:
brcfg -enable
Powienieneś to próbować w czasie rzeczywistym cały czas oczywiście! Konfigurator bridge'a poda parę liczb. Możesz poeksperymentować włączając i wyłączając porty - jeden za każdym razem.
brcfg -port 0 -disable/-enable brcfg -port 1 -disable/-enable
Polecenie brcfg pokaże ci raport w każdej chwili. Zobaczysz, że bridge słucha, dowiaduje się i potem przekazuje pakiety. (Nie rozumiem dlaczego kod powtarza te same adresy sprzętowe dla obu moich kart, ale nieważne ... HOWTO Chrisa mówi, że to dobrze)
Jeśli cały czas wszystko u ciebie działa, to wypróbuj swoją konfigurację w rzeczywistości - wyłącz obie karty i uruchom swój plik konfiguracyjny:
ifconfig eth0 down ifconfig eth1 down /etc/rc.d/rc.inet1
Jeśli masz szczęście, to różne podsystemy (nfs, ypbind, itp) nie zauważą tej zmiany. Nie próbuj tego o ile nie siedzisz przy klawiaturze.
Jeśli chcesz być bardziej ostrożny niż teraz, powinieneś wyłączyć tyle demonów ile się da i odmontować katalogi nfs. Najgorszym co może się stać, to to, że będziesz musiał zrestartować komputer w trybie jednego użytkownika (parametr "single" dla lilo lub loadlin) i zmienić wszystko na stan taki jaki był przed zmianą konfiguracji.
Sprawdź czy na każdym interfejsie jest inny ruch:
tcpdump -i eth0 (w jednym oknie) tcpdump -i eth1 (w drugim oknie)
Powienieneś się przyzwyczaić do używania tcpdump do szukania przyczyn niektórych zdarzeń, które nie powinny mieć miejsca a mają.
Na przykład szukanie pakietów, które przeszły przez bridge do drugiej karty z wewnętrznej sieci. W tym przykładzie szukam pakietów z maszyny o adresie .22:
tcpdump -i eth1 -e host 192.168.2.22
Potem wyślij ping-a z maszyny .22 do rutera. Powinieneś zobaczyć raport o tym pakiecie.
W tym momencie powinieneś mieć w pełni działający bridge z dwoma adresami. Sprawdź czy możesz je pingować z zewnątrz i z wewnątrz sieci oraz, że możesz się łączyć z jednej sieci do drugiej i z zewnątrz.