List

Linux jako ruter

Naszym celem będzie skonfigurowanie systemu linux jako urządzenia przesyłającego pakiety. W tym celu będziemy potrzebowali:

  1. uruchomić infrastrukturę (w naszym przypadku wirtualną)
  2. skonfigurować interfejsy oraz tablicę rutingu
  3. ustawić opcję przekazywania pakietów
  4. opcjonalnie dodać translację adresów

1. Infastruktura

Potrzebujemy uruchomić co najmniej dwie maszyny wirtualne:

  • RT1 – działająca jako brama domyślna
  • SRV1 – klient w lokalnej sieci, który będzie korzystał z bramy domyślnej.

Naszą infrastrukturę skonfigurujemy zgodnie z poniższym obrazkiem:

Default router with NAT

Default router with NAT

Dla naszego przykładu wykorzystamy VMWare Workstatione (dawny VMWare Player).

Uwaga:

  • powyższy obrazek zawiera również pokazane w jaki sposób wykonana zostanie translacja adresów dla 3 stopniowego nawiązywania połączenia (np. przy wysłaniu żądania HTTP GET).

1.1. Uruchomienie maszyn:

Pierwszy wariant to instalacja z gotowych obrazów. 

W celu uruchomienia maszyny można skorzystać z gotowego obrazu systemu dostępnego w moim Contact.dir (podkatalog Kalkowski Maciej).  Plik ten można skopiować dwukrotnie do lokalnego katalogu (w przypadku studentów WMI – dysk P:). W tym przypadku dla bezpieczeństwa należy usunąć wszystkie interfejsy sieciowe – Network Adapters (VMware VWorkstation -> Virtual Machine Setting -> Hardware), a następnie dla:

  • RT1: dodać dwa nowe interfejsy – jeden typu NAT, drugi typu Host-only, po czym zmienić jego ustawienia na CUSTOM i zgodnie z propozycją z obrazka wirtualny przełącznik sieciowy VMNet5,
  • SRV1 zmienić interfejs z typu NAT na Custom i wybrać przełącznik VMNet5.

Alternatywnie, zamiast uruchomić VMWare Workstation z gotowych skopiowanych obrazów można zainstalować systemy od nowa. 

Możliwe jest też przejście instalacji dwóch serwerów od początku. W tym przypadku interfes sieciowy typu NAT do obu serwerów zostanie dodany automatycznie.  W tym przypadku w RT1 należy dodać interfejs typu Host-only, po czym zmienić jego ustawienia na CUSTOM i zgodnie z propozycją z obrazka wirtualny przełącznik sieciowy VMNet5. Dla SRV1 należy zmienić interfejs z typu NAT na Custom i wybrać przełącznik VMNet5.

Po tym kroku powinniśmy mieć poprawnie skonfigurowane środowisko wirtualne.

Uwaga:

  • W dalszej części ćwiczenia korzystamy z tego, że pierwszy interfejs sieciowy wykrywany w systemie RT1 eth0 jest typu NAT. Jednym z najczęstszych błędów jest odwrotne przypisanie interfejsów – tj. NAT do eth1 i VMNet5 do eth0. W tym przypadku należy zweryfikować który MAC adres jest przypisany do karty sieciowej. W celu weryfikacji czy nasza konfiguracja jest poprawna możemy sprawdzić jaki jest MAC adres karty sieciowej w VMware Workstation -> Virtual Machine Setting -> Hardware klikając na wybraną kartę sieciową (np. typu NAT) i przycisk Advanced. Następnie w systemie wykonujemy polecenie ip a i weryfikujemy czy adres karty sieciowej eth0 jest taki sam jak karty sieciowej typu NAT. W przypadku gdy są źle przypisane zmieniamy konfigurację w Virtual Machine Settings tak by przypisanie było poprawne.

2. Konfiguracja interfejsów oraz ruting

2.1. RT1

Na RT1 należy skonfigurować kartę sieciową eth0 tak aby korzystała z ustawienia dhcp otrzymanego od VMWare oraz dla karty sieciowej eth1 adresu 192.168.100.1/24.

Pierwszym krokiem będzie “położenie” interfejsów poleceniami ifdown eth0 oraz ifdown eth1 (jeśli nie były wcześniej skonfigurowane polecenie może zwrócić błąd).

Następnie w pliku /etc/network/interfaces należy wprowadzić następujące linie (uwaga: interfejs eth0 może być już wcześniej skonfigurowany):

Następnie należy podnieść interfejsy poleceniami ifup eth0 oraz ifup eth1.

Po wykonaniu tych poleceń, RT1 będzie miał dostęp do internetu przez interfejs eth0 oraz będzie miał poprawnie skonfigurowaną l (w tym dodane trasy w tablicy rutingu).

2.2 SRV1

Na SRV1 należy skonfigurować kartę sieciową eth0 tak aby miała przypisany adresu 192.168.100.100/24.

Pierwszym krokiem będzie “położenie” interfejsu poleceniem ifdown eth0 (jeśli nie był wcześniej skonfigurowany polecenie może zwrócić błąd).

Następnie w pliku /etc/network/interfaces należy wprowadzić następujące linie (uwaga: interfejs eth0 może być już wcześniej skonfigurowany):

Następnie należy podnieść interfejsy poleceniami ifup eth0.

Po wykonaniu tych poleceń, RT1 będzie miał komunikację z interfejsem sieciowym eth1 na RT1 tak jak by były wpięte do zwykłego przełącznika (VMNet5). Powyższa konfiguracja ustawia zarówno dostęp do sieci 192.168.100.0/24 jak i bramę domyślną.

 

3. Przekazywanie pakietów

W trybie domyślnym system Linux odbiera od karty sieciowej tylko te ramki, które mają adres MAC w polu destination w nagłówku ethernet ustawiony na MAC przypisany do swojej karty sieciowej (można to zmienić ustawiając kartę sieciową w tryb PROMISC i wówczas odbierane są wszystkie ramki, ale nie będzie to potrzebne do wykonania niniejszego ćwiczenia).

Następnie analizowane są pakiety IPv4 i jeśli w polu dst w nagłówkach IPv4 jest ustawiony adres przypisany do naszego interfejsu sieciowego (lub adres broadcast) analizowane są warstwy wyższe. W przypadku gdy nasz system operacyjny ma działać jako ruter konieczna będzie zmiana tego trybu działania. Zmiana tego trybu dla wszystkich interfejsów możliwa jest z wykorzytaniem polecenia:

Uwaga:

  • Powyższe polecenie należy wykonać na RT1 (czy coś się zmieni jeśli wykonamy je przypadkiem na SRV1?)
  • W poniższym ćwiczeniu wykorzystujemy globalną zmianę ustawienia tego trybu, ale możliwe jest też zmiana parametru pracy konkretnego interfejsu modyfikując plik /proc/sys/net/ipv4/conf/eth0/forwarding (gdzie za eth0 wstawiamy nazwę interfejsu dla którego dokonujemy zmianę).

4. Translacja adresów.

Ostatnim krokiem to ustawienie translacji adresów na RT1.

Uwaga:

  • adres 192.168.47.129 należy podmienić na adres IPv4 przypisany w naszym RT1 do interfejsu eth0,
  • pierwsze polecenie dokonuje wyczyszczenia wszystkich wpisów w tablicy NAT,
  • drugie polecenie dodaje regułę wykonywaną po podjęciu decyzji routingu przez system (parametr -A POSTROUTING), do tablicy NAT (-t nat), która będzie podmieniała wszystkie adresy źródłowe (-j SNAT) z sieci 192.168.100.0/24 (parametr -s), zaadresowane do dowolnego innego adresy (parametr -d), na adres źródłowy 192.168.47.129 (parametr –to-source),
  • ostatnie polecenie pokazuje zawartość tablicy nat.

 

Po wykonaniu tych kroków SRV1 powinien mieć komunikację z Internetem poprzez bramę domyślą RT1 (można to przetestować uruchamiając np. polecenie ping 150.254.78.79) lub traceroute albo mtr na adres 150.254.78.79.