Routing :: DHCP :: NAT-PT czyli brama pomiędzy IPv6 a IPv4 :: Inne ustawienia i uwagi

Router - przekazywanie pakietów, DHCP itp

Routing

Istotną funkcją w różnych systemach opartych o protokół IP jest routing. Często jest on realizowany przez wyspecjalizowane urządzania (routery sprzętowe), ale równie często jego realizację przeprowadza się software'owo. Zaczęcam do zapoznania się z zestawem skryptów do konfiguracji routingu i podziału pamsa mojego autorstwa.

W tym miejscu warto wspomnieć o dość interesującej alternatywie w stosunku co do IMQ jaką jest obecne standardowo w jądrze IFB. Inną alternatywą jest lokalne tunelowanie ruchu (tunel na interfejsie lo). Więcej na jego temat takich rozwiązań znaleźć można w: jak radzić sobie bez IMQ? i IMQ bez IMQ HOWTO.

Warto zaznaczyć iż do przekierowywania usług/portów mogą być realizowane z wykorzystaniem xinetd (zobacz konfigurację) a nie DNAT - co nie rodzi problemów z IPv6 oraz dwiema sieciami IP na jednym interfejsie Kolejnym popularnym zastosowaniem NATu jest chęć skierowania ruchu z jakiś adresów do danego hosta (wyświetlającego np. komunikat odnośnie przerwy w dostępie do Internetu). W przypadku IPv6, gdzie (na linuxie) nie mamy do dyspozycji NATu, możemy to zrobić modyfikując działanie DNS (odpalając sfałszowany DNS) tak aby na każde zapytanie odpowiadał adresem naszego hosta z komunikatem. Sam serwer DNS może identyfikować czy hosta należy przekierować czy nie lub możemy to oprzeć np. na różnych adresach DNS wysyłanych przez DHCP do wybranych grup hostów.

Wspomniana technologia NAT (o której troszkę więcej w artykule o sieciach IP) korzysta z tablicy w której przechowuje śledzone połączenia (pamiętanie NATowanych połączeń jest konieczne aby wykonywać NAT). Aktualną ilość wpisów w tej tablicy można sprawdzić poprzez wc -l < /proc/net/ip_conntrack. Gdy tablica ta się zapełni nie jest możliwe nawiązywanie nowych połączeń, gdy występuje taki problem możemy zmienić jej rozmiar lub zmniejszyć czas przechowywania połączeń poprzez ustawienie odpowiednich wartości odpowiednio w /proc/sys/net/ipv4/netfilter/ip_conntrack_max /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established. Interesujący wydaje się także patch umożliwiający wybór typu NAT przy konfiguracji jądra.

Częstym aspektem przy konfiguracji bramek (jednak tutaj praktycznie pominiętym) jest autoryzacja klientów uprawnionych do dostępu do sieci. Najpopularniejszym rozwiązaniem tego typu jest stosowanie PPPoE, spotkać się można także z wykorzystaniem autoryzacji proxy, stosowania VPN w tym celu. W systemach BSD możliwe jest także dopuszczanie użytkowników którzy nawiążą z serwerem połączenie SSH - poprzez mechanizm Authpf.

W IPv6 niezaniedbywalnym elementem routingu jest rozgłaszanie inforamacji routingowych poprzez mechanizm typu radv - może do tego posłużyć serwer "radvd", a jego przykładowa konfiguracja (/etc/radvd.conf) może wyglądać np. następująco:

interface eth0
{
	# konfiguracja adresów stateful (TAK)
	AdvManagedFlag on;
	# konfiguracja innych parametrów stateful (NIE)
	AdvOtherConfigFlag off;

	# wysylamy MTU
	AdvLinkMTU 1280;

	# wysylamy okresowo
	AdvSendAdvert on;

	#AdvSourceLLAddress off
	prefix 2001:db8:1000:3b::/64
	{
		# pytanie czy i jak da się skutecznie rozgłosić sieć z prefiksem np. /48 ?
		# tak aby jej wybrany fragment stanowił sieć autokonfigurowaną ale maska dla global-scope była /38 ...
		AdvOnLink on;
		AdvAutonomous on;
	};

	#route 2001:db8:1000::1/48 {
	#	AdvRoutePreference medium;
	#};
	route 0::/0 {
		AdvRoutePreference medium;
	};
};

Kożystanie z protokołów routingowych takich jak SPF, BGP, czy też korzystanie z routingu multicastowego wymaga stosowania deamonów zajmujących się obsługą tych protokołów i ustawiających w oparciu o nie odpowiednich jądrowych tablic routingu. Dla różnych systemów POSIXowych Quagga (Quagga jest nieoficjalnym kontynuatorem projektu GNU Zebra), xorp, bird, dla OpenBSD (i z drobnymi łatami dla innych *BSD) jest to na przykład OpenBGPD. Dla protokołów multicastowych są to np. mrd6, Multi-threaded Routing Toolkit, mrouted i pimd.

Zobacz w Sieci: Nftables: a new packet filtering enginekopia lokalna, Jak podróżuje pakiet przez router linuxowy, HTB, filtry u32 i inne, Linux-Mrouted-MiniHOWTO.

DHCP

Zamieszaczam przykładowe konfigi dla DHCP zarówno w wersji dla IPv4 - /etc/dhcp3/dhcpd.conf (konfig przystosowany jest do współpracy z systemem konfiguracji przez użytkownika):

default-lease-time 600;
max-lease-time 7200;
authoritative;
option classless-static-route code 121 = array of { integer 8, ip-address, ip-address };
option classless-static-route-win code 249 = array of { integer 8, ip-address, ip-address };

subnet 192.168.0.0 netmask 255.255.0.0 {
	range 192.168.28.1 192.168.28.100;
	option subnet-mask 255.255.0.0;
	option broadcast-address 192.168.255.255;
	option routers 192.168.0.1;
	option domain-name-servers 192.168.0.1;
	# przydatne gdy w sieci lokalnej mamy adresy prywatne i publiczne
	option classless-static-route MASKA_KROTKA IP_SIECI_PUB 0.0.0.0;
	option classless-static-route-win 32 ADRES_HOSTA_PUB ADRES_HOSTA_PRIV, 32 ADRES_HOSTA_PUB ADRES_HOSTA_PRIV;
}

# konfiguracja centralna ...
host h1{
	hardware ethernet XX:XX:XX:XX:XX:XX; 
	fixed-address YYY.YYY.YYY.YYY;
}

# konfiguracja generowana z plików użytkowników
include "/var/user_config/dhcpd.conf";

A także dla IPv6 - /etc/wide-dhcpv6/dhcp6s.conf:

option domain-name-servers 2001:db8:1000:3a::1000;
option domain-name "n17.waw.pl"

# jako klient najprzyjemniejszy wydaje się dibbler-client
# ale serwer wide-dhcpv6 jest bardziej elegancki w konfiguracji (zwłaszcza stały adres dla wskazanego hosta)

host robert {
	duid unik:alnyident:yfika:tor:dhcp;
	# UWGA: nie jest to MAC adres !!!
	# jest on stały dla systemu a nie katrty sieciowej (czyli w większości wypadków mniej stały niż MAC)
	address 2001:db8:1000:3a::2 infinity;
	# z jakiś przyczyn adres zostanie przyjęty jako pochodzący z sieci /64 i na ddatek nie ma niestyety:
	# * jawnej mozliwości rozgłaszania długości prefiksu :-(
	# * rozgłaszania konfiguracji routingu
};

interface eth0 {
	address-pool pool1 3600;
};

pool pool1 {
	range 2001:db8:1000::1 to 2001:db8:1000::100 ;
};

NAT-PT czyli brama pomiędzy IPv6 a IPv4

Przynajmniej w okresie przejściowym wdrażania IPv6 konieczne może się okazać zapewnienie sieci IPv6-only dostępu do zasobów sieci IPv4. W tym celu stosuje się rozwiązania typu NAT-PT, wykonujące translację adresów pomiędzy IPv6 i IPv4. W odróżnieniu od zwykłych NATów muszą one także podmieniać zapytania i odpowiedzi DNS tak aby mapować adres IPv4 hosta docelowego w przestrzeni adresowej IPv6 i zwracać ten zamapowany adres jako odpowiedź na rządanie AAAA.

Przykładem realizacji takiego mechanizmu jest daemon (mechanizm ten - chyba nawet w BSD oferującym w odróżnieniu od Linuxa NAT dla IPv6 - realizowany jest poza jądrem systemu) naptd. Instalacja i konfiguracja jest szczegółowo opisana w załączonej dokumentacji. Należy jednak zwrócić uwagę blokadę przekazywania prefixu używanego przez NAT-PT na routerach IPv6 - ip6tables -I FORWARD 1 -d 2000:ffff::/96 -j DROP (na wszystkich routerach dających wyjście na świat po ipv6) oraz odrzucanie pakietów innych niż ESTABLISHED oraz NEW na uruchomione usługi (ptrzedewszystkim ssh) na routerze robiącym NAT-PT. Na hostach klienckich należy z koleji ustawić trasę routingu dla sieci wykorzystywanej przez NAT-pT - ip -6 route add 2000:ffff::/96 via ipv6:hosta:robiacego:nat::pt dev eth0 oraz ustawić DNS będący adresem DNSu IPv6 zamapowanym na adres IPv6 urzywany przez NAT-PT (2000:ffff::ip.ip.dns.v4). Zamieszczam też łatkę na wersję 0.4 umożliwiającą skompilowanie jej pod Debianem Lenny.

Inne ustawienia i uwagi

Mogłoby się wydawać iż oprócz logowania ruchu przechodzącego (omawianego w części dotyczącej routingu) warto rozważyć logowanie tablicy arp (odpowiedniości numerów sprzętowych i IP) - realizuje to np. następujący skrypcik - arp_log.sh, jednak po bliższym przyjżeniu się logom ruchu zauważyć w nich można oprócz adresów IP MAC adresy kart, więc jest to zbędne. Na koniec proponuję dodanie do /etc/cron.daily/ skryptu wywołującego ntpdate (uwaga: aby skrypt był wykonywany przez crona konieczne może okazać się zrezygnowanie z niektórych znaków w jego nazwie np. kropki).

Przydatne może być też zmienienie portu na którym słucha SSH ze względu na boty próbujące się logować i zaśmiecające nam logi. Niekiedy warto także logować połączenia SSH w lastlogu, aby to uczynić należy do /etc/pam.d/sshd dodać session optional pam_lastlog.so.

W przypadku problemów z wstaniem mysql po przenoszeniu syustemu pomocne moze byc jego odinstalowanie i ponowne zainstalowanie oraz zaimportowanie sql (przy usuwaniu kasujemy takze pliki z bazai danych). W przypadku problemów z logowaniem do phpmyadmin należy usunąć ciasteczka.

Zachęcam także do zapoznania się z moimi artykułami o: konfiguracji sieci i konfiguracji systemów operacyjnych (w szczególności o konfiguracji logów systemowych).



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/usage_and_config/network_services/router) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2015-10-10 11:34:21 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).