Routing i NAT to generalnie zagadnienia z sieci komputerowych. Aby dokładnie poczytać o tym, czym są i jak je konfigurować na urządzeniach CISCO, odsyłam do obszernych dokumentów mojego autorstwa z tego zakresu.
Tutaj - w tym wstępie teoretycznym, tylko zasygnalizuję czym w ogóle są routing i NAT. Routing (trasowanie) to po prostu optymalny wybór trasy pakietu, a najczęściej funkcję ustalania tras przejmują routery,
rozsiane w sieci WAN. Ich obecność w sieciach jest niejednokrotnie kluczowa. Każdy pakiet, a nawet i części tego samego pakietu, mogą bowiem wędrować od źródła do celu różnymi trasami.
Na poziomie algorytmicznym realizowane jest to przez algorytm najkrótszej ścieżki (SPF, Shortest Path First) Dijkstry, który bierze pod uwagę wagi oraz algorytm Bellmana-Forda, niewrażliwy na wagi,
o czym szerzej piszę w dokumencie odnośnie algorytmów i struktur danych.
Z kolei NAT (Network Address Translation) to translacja prywatnych adresów sieciowych na jeden adres publiczny widoczny na zewnątrz. Z tego względu na poziomie Internetu nikt nie pozna naszego
źródłowego adresu IP, bowiem "stoi za NATem". Dlatego też taki schemat postępowania zwany jest też czasem maskaradą IP.
Czynności wstępne
Zaktualizuj repozytoria i pakiety na Ubuntu Server poleceniami sudo apt update i sudo apt upgrade. Pierwsze z tych poleceń sprawdza czy są dostępne paczki do aktualizacji, a drugie instaluje aktualizacje.
Uruchamianie routingu
Pierwszą rzeczą jaką powinniśmy zrobić po czynnościach wstępnych jest uruchomienie serwera DHCP poleceniem
sudo systemctl start isc-dhcp-server. Dopiero po nim uruchamiamy routing. Przeprowadzamy również przekierowanie pakietów dla adresów IPv4. Robimy to dlatego,
ponieważ domyślnie system odrzuca wszystkie pakiety, które nie są skierowane do tego systemu, natomiast my chcemy tę sytuację zmienić. Innymi słowy chcemy, aby wszystkie pakiety, które nie są skierowane do samego serwera nie były odrzucane.
Aby dokonać ww. zmian musimy edytować plik /etc/sysctl.conf poleceniem sudo nano /etc/sysctl.conf. W pliku tym odkomentowujemy wiersz zawierający linijkę net.ipv4.ip_forward=1
po czym zapisujemy zmiany.
Samo zapisanie zmian nie wystarczy, ponieważ musimy je jeszcze zatwierdzić. Wydajemy więc polecenie sudo sysctl -p. Po wydaniu tego polecenia wyświetlona zostanie linijka do zatwierdzenia - ta, którą
przed chwilą odkomentowaliśmy.
Uruchamianie NATu
Teraz zajmiemy się NATem. W tym celu posłużymy się programem iptables, aby dodać regułę do firewalla. Jej zadaniem będzie aktywacja maskarady IP na interfejsie WAN serwera. W tym miejscu należałoby przypomnieć czym jest maskarada. Otóż jest to maskowanie (ukrywanie) adresów IP komputerów danej sieci przez router podłączony do Internetu. Dzięki temu hosty nie posiadające publicznego adresu IP mogą mieć dostęp do sieci zewnętrznych (de facto najczęściej do Internetu). Związana jest więc ona z NATem. Maskarada pozwala również na ochronę hostów, nawet wtedy, gdy posiadają one publiczne adresy IP i pełni wtedy funkcję firewalla.
Polecenie, które należy użyć w tym kroku ma postać:
sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE. Wyjaśnijmy je nieco.
W pierwszej części tego polecenia, tzn. -t nat mamy określoną tabelę do której dodajemy wpis.
Dalej część określona jako -A POSTROUTING informuje, że dodawana reguła będzie znajdować zastosowanie tylko do pakietów, który wychodzą w kierunku OD serwera NA ZEWNĄTRZ, przy czym
nie interesuje nas czy to NA ZEWNĄTRZ to sieć lokalna czy globalna.
Następnie -o enp0s3 informuje o tym, że reguła dotyczy pakietów wysyłanych z interfejsu enp0s3. Akurat ten nasz interfejs graniczy między siecią WAN a LAN serwera
(patrz, ćwiczenie z instalacji serwera Ubuntu), a co za tym idzie między Internetem
a wszystkim co jest podpięte do sieci lokalnej.
Fraza -j MASQUERADE z kolei informuje o rodzaju działań podjętych dla pakietów, które spełnią wcześniejsze warunki. W tym przypadku ma być to maskarada IP.
Sam program iptables jest rozbudowany i może posiadać różnorakie warunki oraz metody wykonawcze z nimi powiązane. Po szczegóły odsyłam do dokumentacji. Ten zrzut ekranu należy włączyć do sprawozdania
Program iptables nie wprowadza zmian na stałe. Oznacza to, że po restarcie serwera, wszystkie one zostają cofnięte. Wypadałoby więc - w warunkach produkcyjnych - mieć serwer uruchamiony cały czas i nigdy go nie wyłączać. Z pomocą jednak przychodzi
program iptables-persistent, dzięki któremu po każdorazowym ponownym uruchomieniu serwera zmiany zostają zapisane na nowo. Program ten instaluje się poleceniem sudo apt install iptables-persistent. My jednak nie będziemy tego robić.
Testowanie na kliencie
Uruchamiamy teraz system Lubuntu i pingujemy dowolny adres w Internecie. Jak widać w dwóch pierwszych przypadkach, gdy pingujemy adres stackoverflow.com i google.pl wydając polecenia ping stackoverflow.com i
ping google.pl otrzymujemy komunikat o tym, że odwzorowanie nazwy jest chwilowo niemożliwe. W naszej aktualnej sytuacji jest to prawidłowy komunikat, bowiem podczas konfiguracji serwera DHCP
wprowadziliśmy też adres DNS będący adresem naszego własnego serwera, ale na tym serwerze nie uruchomiliśmy póki co usługi DNS (zrobimy to w dalszym ćwiczeniu). Pingujemy więc adresy 8.8.8.8 i 1.1.1.1 wydając polecenia ping 8.8.8.8 i
ping 1.1.1.1. W tym przypadku połączenie dochodzi do skutku. Ten zrzut ekranu należy włączyć do sprawozdania