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.

  Category: Computer Networks

12 posts
June 7th, 2016

DSIK, DASL – Brama domyślna

Linux jako ruter Naszym celem będzie skonfigurowanie systemu linux jako urządzenia przesyłającego pakiety. W tym celu będziemy potrzebowali: uruchomić infrastrukturę (w […]

April 26th, 2016

DSIK – Zajęcia 8 – Raw Sockets

Surowe gniazda Na wcześniejszych zajęciach poznaliśmy metodę wykorzystywania funkcji systemowych do tworzenia nagłówków IP oraz warstwy TCP i UDP. Dzięki wykorzystanym funkcjom system automatycznie […]

April 24th, 2016

DSIK – Zajęcia 8 – Projekt – podział na grupy, wybór tematów

Wybrane grupy projektowe i przypisane tematy. Lista: Rutka, Sosnowski – serwer HTTP Nojnam, Ciuk – klient IRC Soprych, Macutkiewicz – […]

April 18th, 2016

DSIK – Zajęcia 0 – Plan zajęć.

Plan przedmiotu Zajęcia 1-8: Część zgodna z dotychczasowym harmonogramem. Wprowadzenie teoretyczne do warstwy 2 i 3. Diagnostyka sieci – polecenia. Gniazda […]

April 18th, 2016

DSIK – Zajęcia 7 – Projekt określenie wymagań

Zasady zaliczenia: projekt tworzy grupa 2 osobowa projekt obejmuje: napisanie programu: zaimplementowanie znanego protokołu (może być REST API, może być protokół […]

April 11th, 2016

DSIK – Zajęcia 5 – UDP, aplikacje socket bezpołączeniowe

Komunikacja bezpołączeniowa UDP (z ang. User Datagram Protocol – protokół  datagramów użytkownika) to bardzo lekki protokół umożliwiający przesyłanie komunikatów między klientem […]

April 7th, 2016

DSIK – Zajęcia 2 – Stos TCP/IP – Warstwa 3, polecenia diagnostyczne.

April 7th, 2016

DSIK – Zajęcia 6 – Sockety Unix.

Opis problemu Komunikacja sieciowa jest bardzo elastycznym elementem komunikacji, jednakże niesie za sobą narzut obliczeniowy w postaci obsługi stosu TCP/IP po […]

April 4th, 2016

DSIK – Zajęcia 4 – Nieblokujące programowanie gniazd.

Opis problemu Załóżmy, że napisaliśmy program działający jako serwer pewengo protokołu (np. xmpp), który oczekuje na komunikaty od użytkownika, ale […]

April 4th, 2016

DSIK – Zajęcia 4 – Aplikacje wielowątkowe

Aplikacje przetwarzające wiele wątków Rozważmy sytuację, gdy aplikacja serwera jest dostępna do publicznego użytku i potrzebuje np. 30 sekund ciągłych obliczeń […]

March 14th, 2016

DSIK – Zajęcia 3 – Sieci komputerowe – programowanie gniazd, wstęp (TCP klient i serwer).

Programowanie gniazd. Funkcje: ssize_t send(int sockfd, const void *buf, size_t len, int flags); – możliwość wykorzystnia tylko gdy socket jest […]

March 14th, 2016

DSIK – Zajęcia 1 – Stos TCP/IP – Warstwa 2, polecenia diagnostyczne.

Stos TCP/IP TCP/IP to rodzina protokołów stanowiących podstawę do komunikacji między komputerami w sieciach komputerowych. Do rodziny tej zaliczmy protokoły zapewniające adresowanie i […]