Home Up
Email
| |
Ruting IP w Linuxie 2.2
Pawe│ Krawczyk
<kravietz@ceti.pl>
1 WstΩp
1.1 O czym jest ten artyku│?
Tekst ten omawia wiΩkszo£µ nowo£ci dotycz╣cych obs│ugi sieci IP, kt≤re
pojawi│y siΩ w j╣drze Linuxa 2.2. Nie jest to vademecum dla os≤b
pocz╣tkuj╣cych ani HOWTO. Jego zadaniem jest zapoznanie z u┐ytecznymi
funkcjami os≤b zajmuj╣cych siΩ ruterami dzia│aj╣cymi na Linuxie i posiadaj╣cych
podstawowe pojΩcie o dzia│aniu protoko│u IP.
1.2 Nowo£ci w j╣drze
Pocz╣tki wielkich zmian w Linuxie, dotycz╣cych protoko│u IP, to koniec 1996
roku, kiedy pojawi│a siΩ wersja 2.1.17. Zawiera│a ona pierwsz╣ wersjΩ
przepisanego praktycznie od nowa kodu obs│uguj╣cego IP. Nowo£ci╣ by│a
zgodno£µ z RFC 1812 [12]
i ruting rozszerzony (policy routing). Do konfiguracji nowych funkcji s│u┐y│
program iproute, potem pojawi│ siΩ pakiet iproute2, zawieraj╣cy
program ip. Kolejne wersje j╣dra wprowadzi│y tak┐e mechanizmy
sterowania przep│ywem danych (traffic control), obs│ugiwane za pomoc╣
oddzielnego programu tc i opisane w osobnym artykule 1.
Rozwijanie tej czΩ£ci j╣dra Linuxa oraz pakietu iproute2 to przede
wszystkim zas│uga Aleksieja N. Kuƒniecowa <kuznet@ms2.inr.ac.ru>
z moskiewskiego Instytutu Fizyki J╣drowej.
1.3 Nowo£ci w iproute2
Obs│uga iproute2 r≤┐ni siΩ zasadniczo od dotychczas stosowanych
narzΩdzi -- ifconfig i route. W programach tych adres IP oraz
maska podsieci by│y podawane oddzielnie, przy czym ta ostania by│a tradycyjnie
zapisywana w postaci aaa.bbb.ccc.ddd. Program ip przyjmuje
natomiast maskΩ podsieci w formacie skr≤conym aaa.bbb.ccc.ddd/nn,
gdzie nn jest kt≤r╣ okre£la siΩ jako liczbΩ bit≤w jedynkowych w
masce. Przyk│adowo, maska sieci C zapisywana tradycyjnie jako 255.255.255.0 ma
24 bity jedynkowe, podsieci 255.255.255.240 -- 28 itp.
Wi╣┐e siΩ z tym tak┐e mo┐liwo£µ u┐ywania skr≤conych postaci adres≤w IP,
gdzie brakujace bajty s╣ zastΩpowane zerami. Przyk│adowo:
Notacja skr≤cona |
Notacja pe│na |
127/8 |
127.0.0.0/8 |
192.168/16 |
192.168.0.0/16 |
0/0 |
0.0.0.0/0 |
Nale┐y podkre£liµ, ┐e jest to notacja zgodna z filozofi╣ CIDR ([2],
[3])
oraz IPv6 i zalecana przez RFC 1812 ([12]),
gdzie tradycyjn╣ konstrukcjΩ adresu IP (adres sieci, adres podsieci, adres
hosta) zastΩpuje siΩ przez adres prefiksu i adres hosta. W konsekwencji wy┐ej
opisana notacja maski podsieci odpowiada po prostu d│ugo£ci prefiksu w bitach.
1.4 Konfiguracja adres≤w interfejs≤w
Ka┐dy interfejs mo┐e posiadaµ wiΩcej ni┐ jeden adres IP. Dodatkowe adresy s╣
po prostu adresami, r≤┐ni╣cymi siΩ od podstawowego adresu tylko flag╣ secondary,
a nie samodzielnymi pseudointefejsami, jak to by│o w j╣drach 2.0 i wcze£niejszych.
Do ustawiania adresu intefejsu s│u┐y polecenie ip addr:
ip addr add ADRES dev INTERFEJS
[ ( peer | remote ) P-T-P ]
[ ( broadcast | brd ) BROADCAST ]
[ anycast ANYCAST ] [ label NAZWA ]
[ scope ZASI╩G ]
Parametr ADRES jest adresem dodawanym do interfejsu. Nale┐y zaznaczyµ,
┐e w odr≤┐nieniu od programu ifconfig adresy IPv4 podaje siΩ razem
z mask╣ podsieci jako aaa.bbb.ccc.ddd/nn.
Adresy IPv6 podaje siΩ standardowo jako aa:bb:...:zz/nnn, gdzie /nnn
to d│ugo£µ prefiksu (maski podsieci).
W przypadku intefejs≤w point-to-point (na przyk│ad PPP) parametr ADRES
okre£la adres lokalny intefejsu, natomiast adres drugiego ko±ca nale┐y podaµ
po parametrze peer (akceptowane jest r≤wnie┐ s│owo remote).
Do ustawiania adresu rozg│oszeniowego (broadcast) s│u┐y parametr broadcast
(lub kr≤cej brd). W nowych wersjach iproute parametr +
spowoduje adresu obliczonego automatycznie na podstawie d│ugo£ci prefiksu.
Adres anycast stosowany w IPv6 ustawia sie parametrem anycast. 2
ZasiΩg adresu (scope) okre£la siΩ parametrem scope, kt≤ry mo┐e
byµ jednym ze standardowych zasiΩg≤w, albo nazw╣ (lub numerem) zasiΩgu
zdefiniowanego przez u┐ytkownika. 3
Interfejsowi mo┐na nadawaµ nazwy za pomoc╣ parametru label, co jest
przydatne w przypadku dodawania kolejnych adres≤w do interfejsu (eth0:1,
eth0:2,...). W ten spos≤b do dodatkowych adres≤w mo┐na siΩ tak┐e odwo│ywaµ
za pomoc╣ starszych wersji polecenia ifconfig.
2 Konfiguracja parametr≤w interfejsu
Dodanie adresu do interfejsu nie powoduje jego automatycznej aktywacji (flaga UP)
Jest to zachowanie odmienne od znanego z j╣der 2.0 Do konfigurowania tego -- i
innych -- parametr≤w intefejsu s│u┐y polecenie ip link:
ip link set INTERFEJS [ ( up | down ) ]
[ arp ( on | off ) ]
[ multicast ( on | off ) ]
[ ( txqueuelen | txqlen ) PKT ]
[ name NAZWA ]
- Flagi up i down powoduj╣ odpowiednio aktywacjΩ lub
deaktywacjΩ interfejsu. W momencie aktywacji interfejsu kernel dodaje do
tablicy rutingu trasy kieruj╣ce na ten interfejs pakiety do sieci do niego
przy│╣czonej. Jest ona umieszczana w specjalnej tablicy local.
Warto zauwa┐yµ, ┐e w j╣drach 2.0 i wcze£niejszych tak╣ trasΩ trzeba
by│o dodaµ explicite za pomoc╣ polecenie route, obecnie
nie jest to ju┐ konieczne.
- Opcja arp w│╣cza lub wy│╣cza protok≤│ ARP dla danego
interfejsu. Oznacza to, ┐e interfejs nie bΩdzie odpowiada│ na pytania ARP,
nawet je£li pytanie dotyczy jego adresu IP. 4
- Opcja multicast w│╣cza lub wy│╣cza obs│ugΩ pakiet≤w multicast
na danym interfejsie.
- Parametr txqueulen (akceptowany jest skr≤t txqlen) okre£la
wielko£µ kolejki wyj£ciowej danego interfejsu w pakietach. Wielko£µ ta
jest ustawiana przez system automatycznie na podstawie domy£lnej warto£ci
-- innej dla ka┐dego rodzaju interfejsu -- a zale┐nej od jego przepustowo£ci.
Z regu│y ustawienie domy£lne jest wystarczaj╣ce, jego zmiana mo┐e byµ
czasem korzystna na przyk│ad do poprawienia wsp≤│dzielenia wolnego │╣cza
PPP. 5
3 Komunikacja host≤w w obrΩbie sieci lokalnej
3.1 Wprowadzenie
W IPv4 informacja o adresie w warstwie │╣cza (link layer address)
interfejsu posiadaj╣cego dany adres IP jest uzyskiwana za pomoc╣ protoko│u
ARP (Address Resolution Protocol, RFC 826 [1]),
korzystaj╣cego z rozg│aszania w warstwie │╣cza i r≤┐ni╣cego siΩ
implementacj╣ dla ka┐dego rodzaju sieci fizycznej (ARP dla Ethernetu r≤┐ni
siΩ od ARP dla ATM). W IPv6 s│u┐y do tego protok≤│ wyszukiwania host≤w s╣siaduj╣cych
(Neighbor Discovery), oparty o pakiety multicast i dzia│aj╣cy
nad warstw╣ IP. Dok│adny jego opis -- oraz terminologiΩ -- mo┐na znaleƒµ w
RFC 2461 [6].
W zwi╣zku z tym, kernel tablica s╣siednich host≤w, przechowywana przez kernel,
jest niezale┐na od protoko│u i zawiera informacje uzyskane albo za pomoc╣ ARP
albo za pomoc╣ ND. S│u┐y ona tak┐e jako baza danych do wprowadzonego jako
standard przez IPv6, ale dzia│aj╣cego tak┐e dla IPv4, mechanizmu weryfikacji
osi╣galno£ci hosta (Neighbor Unreachability Discovery).
Tablica s╣siednich host≤w zawiera nastΩpuj╣ce informacje: adres IP hosta,
adres hosta w warstwie │╣cza (link layer address) oraz aktualny stan
rekordu. Dodatkowo s╣ w niej przechowywane takie informacje jak ilo£µ odwo│a±
do danego rekordu oraz czas ostatniego odwo│ania. G│≤wne stany rekord≤w to: incomplete
(┐aden host nie odpowiedzia│ na pytanie o dany adres), reachable (host
jest osi╣galny) oraz stale (host by│ osi╣galny, lecz rekord jest
przeterminowany). Ponadto istniej╣ dwa stany specjalne: noarp (rekord
nie jest uaktualniany przez ARP ani ND) oraz permanent (rekord dodany rΩcznie
przez administatora). Oba nie s╣ nigdy zmieniane przez kernel, nie jest w
stosunku do nich u┐ywany ARP, ND ani NUD, a rekordy w stanie permanent
nie s╣ usuwane podczas okresowego czyszczenia tablicy (garbage collecting).
3.2 Obs│uga tablicy s╣siad≤w
Do manipulacji tablic╣ zawieraj╣c╣ informacje o adresach fizycznych host≤w i
odpowiadaj╣cych im adresach IP s│u┐y polecenie ip neigh:
ip neigh ( add | del )
(ADRES [ lladdr LLADDR ] | proxy PROXY )
[ nud ( permanent | noarp | stale | reachable ) ]
dev INTERFEJS
Polecenie ip neigh mo┐e dodawaµ dwa typy rekord≤w do tablicy:
- Adres rzeczywisty Parametr ADRES jest wtedy adresem IPv4
lub IPv6, kt≤rego rekord chcemy dodaµ lub usun╣µ z tablicy host≤w s╣siaduj╣cych.
Adres warstwy │╣cza zwi╣zany z dodawanym adresem IP podajemy natomiast w
parametrze lladdr.
- Adres Proxy ARP Parametr PROXY okre£la adres IP hosta,
dla kt≤rego dany interfejs ma po£redniczyµ w protokole ARP. WiΩcej
informacji o technice ,,Proxy ARP'', kt≤rej nie bΩdziemy tutaj opisywaµ,
mo┐na znaleƒµ na przyk│ad w ,,Network Administrator's Guide'' [10]
w rozdziale Configuring TCP/IP Networking, sekcja Checking the
ARP Tables.
4 Ruting
4.1 WstΩp.
W kernelach 2.0 by│a tylko jedna podstawowa tablica rutingu. W kernelach 2.2
tablic tych mo┐e byµ do 250 zdefiniowanych tablic, z czego domy£lnie aktywne
s╣ trzy:
- local (255)
- main (254)
- default (253)
Tablica local zawiera trasy dodawane automatycznie przez kernel, takie
jak trasy do lokalnych interfejs≤w oraz trasy broadcastowe. Trasy w tej tablicy
maj╣ z regu│y zasiΩg host lub link.
Tablica main odpowiada starej tablicy rutingu w kernelach 2.0 i do niej
trafiaj╣ trasy dodawane przez u┐ytkownika, je£li nie poda on innej tablicy.
Do niej dodawane s╣ r≤wnie┐ trasy tworzone automatycznie przez kernel w
momencie aktywacji interfejsu.
Tablica default jest domy£lnie pusta.
Ponadto istnieje tak┐e tablica cache, kt≤ra jest tworzona automatycznie
i traktowana w odmienny spos≤b ni┐ wy┐ej wymienione tablice. W szczeg≤lno£ci,
jej zawarto£µ jest uzupe│niana automatycznie przez kernel i nie jest ona dostΩpna
do zapisu przez u┐ytkownika. Jej zawarto£µ mo┐na natomiast przegl╣daµ, co
jest opisane poni┐ej.
Tablice s╣ przegl╣dane w kolejno£ci: local, main, default.
Pozosta│e tablice nie s╣ przeszukiwane automatycznie, znajduj╣
natomiast zastosowanie w rutingu rozszerzonym (policy routing).
Zasady nazewnictwa poszczeg≤lnych tablic nieco siΩ zmieni│y w kolejnych
wersjach iproute2. W chwili obecnej odwzorowanie nazw na numery tablic
jest definiowane w pliku /etc/iproute2/rt_tables. Domy£lnie znajduj╣
siΩ tam w│asnie take nazwy jak powy┐ej, nic nie stoi jednak na przeszkodzie,
by definiowaµ i dodawaµ w│asne.
4.2 Obs│uga tablic rutingu.
Do operacji na tablicach tras s│u┐y polecenie ip
route. Jego sk│adnia jest bardzo rozbudowana, wiΩc w tej sekcji
ograniczymy siΩ tylko do om≤wienia g│≤wych funkcji polecenia ip route .
Szczeg≤│owe om≤wienie parametr≤w znajduje siΩ w dodatku C.
Dodawanie oraz usuwanie tras z tablicy odbywa siΩ za pomoc╣ polecenia ip
route add (lub del ), kt≤rego argumentem jest specyfikacja
trasy. W najprostszym przypadku sk│ada siΩ ona z adresu sieci docelowego oraz
adresu rutera do tej sieci prowadz╣cego (next hop). Poni┐ej
ograniczymy siΩ do om≤wienia mniej lub bardziej typowych przypadk≤w.
ip route add 192.168.2.0/24 via 192.168.1.1
Powy┐sze polecenie dodaje do g│≤wnej
tablicy rutingu trasΩ prowadz╣c╣ do sieci 192.168.2.0/24
przez ruter o adresie 192.168.1.1 .
ip route add 192.168.2.0/24
via 192.168.1.1 table default
Dodaje tak╣ sam╣ trasΩ, ale do tablicy default.
ip route add 0/0 via 192.168.0.1
Dodaje trasΩ domy£ln╣ (default)
przez ruter 192.168.0.1 .
Warto zwr≤ciµ uwagΩ na skr≤tow╣ formΩ zapisu sieci przeznaczenia 0.0.0.0/0 ,
oznaczaj╣cej trasΩ domy£ln╣ i zapisanej skr≤towo jako 0/0 .
ip route add 10.1/16 via 192.168.1.1
src 10.2.2.1
Trasa, kt≤r╣ to polecenie dodaje nie jest
tak interesuj╣ca jak wystΩpuj╣cy w nim parametr src .
Powoduje on, ┐e pakiety wychodz╣ce z hosta t╣ tras╣, bΩd╣ mia│y adres ƒr≤d│owy
ustawiony jako 10.2.2.1 .
Dotyczy to tylko pakiet≤w inicjowanych przez host lokalny (tj. przy po│╣czeniach
wychodz╣cych).
Taka konfiguracja mo┐e byµ przydatna na przyk│ad je£li nasza sieµ jest pod│╣czona
do kilku provider≤w (multi-homed) bez rutingu dynamicznego i chcemy by
pakiety wysy│ane do jednego z nich wraca│y t╣ sam╣ tras╣. W przeciwnym
razie wraca│yby one tras╣ podyktowan╣ przez adres ƒr≤d│owy wynikaj╣cy z
adresu naszego g│≤wnego interfejsu.
ip route add unreachable 10.1.2/24
Specjalny rodzaj trasy. Pakiety kierowane do
sieci docelowej 10.1.2.0/24
zostan╣ odrzucone, a w odpowiedzi zostanie odes│any komunikat ICMP ,,Host
unreachable''. DostΩpne s╣ tak┐e inne tego rodzaju trasy: prohibit
i blackhole . Pierwsza z
nich zwraca pakiet ,,Packet administratively prohibited'', a druga usuwa pakiet
bez zwracania ┐adnej informacji.
Trasy te mo┐na efektywnie wykorzystaµ przynajmniej na trzy sposoby:
- Jako znacznie szybsze wersje czΩ£ci regu│ek filtruj╣cych
firewall, co jest dok│adniej opisane w rozdziale 6
(str. X).
- Do translacji adres≤w (Network Address Translation)
przez trasΩ
nat .
Patrz rozdzia│ 5.3
(str. X).
- Wykorzystanie trasy
unreachable
dla unikniΩcia pΩtli rutingu powstaj╣cych przy dynamicznie tworzonych
interfejsach typu PPP. Przypadek ten jest dok│adniej opisany w dodatku 7.2
(str. X).
5 Ruting rozszerzony
5.1 WstΩp
W tradycyjnym modelu ruter dokonuje wyboru trasy tylko na podstawie adresu
przeznaczenia pakietu. Kryteria wyboru trasy dla konkretnego pakietu, z kilku o
r≤┐nym zasiΩgu, okre£la RFC 1812 [12].
Na przyk│ad, je£li w tablicy rutingu znajduj╣ siΩ dwie trasy -- jedna na
podsieµ i druga na hosta w tej podsieci -- to pierwsze±stwo bΩdzie mia│a
trasa bardziej szczeg≤│owa, na hosta. Jest to tzw. regu│a ,,najd│u┐szego
dopasowania'' trasy (longest match). Pozosta│e regu│y wyboru tras
przez ruter mo┐na znaleƒµ w sekcji 5.2.4.3 RFC 1812 [12].
Linux 2.2 spe│nia wszystkie zdefiniowane przez ten dokument wymagania wobec
ruter≤w internetowych. Poza podstawowymi funkcjami posiada on potΩ┐ny
mechanizm w postaci rutingu rozszerzoneg (policy routing).
5.2 Ruting rozszerzony
Routing rozszerzony pozwala na wybranie trasy wed│ug
wymienionych poni┐ej selektor≤w, kt≤re mog╣ byµ │╣czone w dowolnych
kombinacjach. Selektory te, jak widaµ, odpowiadaj╣ poszczeg≤lnym polom
pakietu IP:
Parametr |
Selektor |
Adres ƒr≤d│owy |
from |
Adres docelowy |
to |
Typ us│ugi (Type of Service) |
tos |
Interfejs z kt≤rego przychodzi pakiet |
iif |
Oznakowanie nadane przez firewall |
fwmark 6 |
Do ka┐dej regu│ki, bΩd╣cej grup╣ selektor≤w , przypisany jes priorytet (pref )
oraz akcja. Priorytet okre£la kolejno£µ sprawdzania regu│ek -- regu│ki o ni┐szym
priorytecie s╣ sprawdzane wcze£niej. Akcja jest to spos≤b w jaki zostanie
potraktowany pakiet pasuj╣cy do danej regu│ki. DostΩpne s╣ nastΩpuj╣ce
podstawowe akcje:
- table TABLICA Pakiet jest kierowany wed│ug tradycyjnego
algorytmu wyboru trasy, na podstawie tablicy rutingu okre£lanej
identyfikatorem TABLICA.
- nat SIEC/MM Adres ƒr≤d│owy pakietu jest t│umaczony na
adres z sieci podanej w parametrze SIEC. Poniewa┐ t│umaczenie
jest w stosunku 1:1, wiΩc rozmiar nowej sieci okre£lany mask╣ MM
musi byµ taki sam jak rozmiar sieci t│umaczonej. Nale┐y podkre£liµ, ┐e
za pomoc╣ rutingu rozszerzonego t│umaczy siΩ jedynie adresy ƒr≤d│owe
pakiet≤w. Translacji w drug╣ stronΩ dokonuje siΩ za pomoc╣
odpowiedniego wpisu w tablicy rutingu, co jest opisane w sekcji 5.3
(str. X).
- unreachable, prohibit, reject Odrzucaj╣ pakiety na r≤┐ne
sposoby, analogicznie jak trasy specjalne opisane w sekcji 4.2
(str. X).
- realms
Nale┐y pamiΩtaµ o dw≤ch rzeczach. Po pierwsze, regu│ka nakazuj╣ca
przeszukiwanie tablicy local ma zawsze pierwsze±stwo i nie jest mo┐liwe
zmiana jej priorytetu. Z tego powodu nie bΩd╣ dzia│aµ regu│ki w kt≤rych
selektorem jest adres docelowy jednego z interfejs≤w danego hosta. Takie
przypadki mo┐na jednak rozwi╣zaµ dodaj╣c stosown╣ trasΩ do tablicy local.
Po drugie, pierwsze±stwo maj╣ tak┐e trasy znajduj╣ce siΩ w tablicy cache.
W zwi╣zku z tym, po dodaniu nowych regu│ek nale┐y tΩ tablice wyczy£ciµ
poleceniem ip route flush table cache.
5.3 Translacja adres≤w
Linux umo┐liwia translacjΩ adres≤w IP na dwa sposoby:
- dynamicznie, w stosunku ,,wiele do 1'',
- statycznie, w stosunku ,,1 do 1''
Pierwszy algorytm by│ dostΩpny ju┐ w Linuxie 2.0 jako maskowanie adres≤w (masquerading).
Jest to zaawansowana funkcja, pozwalaj╣ca na schowanie nawet bardzo du┐ej
sieci komputer≤w posiadaj╣cych adresy prywatne (zdefiniowane w RFC 1918 [4])
za ruterem maskuj╣cym. Istnieje wiele opis≤w dzia│ania i konfiguracji
maskowania adres≤w IP 7.
Linux 2.2 umo┐liwia tak┐e statyczne t│umaczenie adres≤w w stosunku 1 do 1.
Oznacza to, ┐e okre£lonej podsieci adres≤w prywatnych musi byµ przyporz╣dkowana
podsieµ adres≤w publicznych o tej samej wielko£ci. NAT jest realizowany na
poziomie tablicy rutingu oraz rutingu rozszerzonego. T│umaczenie adres≤w ƒr≤d│owych
i docelowych konfiguruje siΩ oddzielnie.
T│umaczenie adres≤w docelowych konfiguruje siΩ za pomoc╣ polecenia ip
route i polega ono na stworzeniu specjalnej trasy nat . Sieµ
docelowa okre£la zakres adres≤w, kt≤re maj╣ byµ t│umaczone, a adres rutera
(via ) jest pierwszym adresem z sieci na kt≤r╣ maj╣ byµ t│umaczone
adresy docelowe. Trasa ta musi znaleƒµ siΩ w tablicy local :
ip route add nat 192.168.1.0/24 via 195.116.211.0 table local
T│umaczenie adres≤w ƒr≤d│owych ustawia siΩ za pomoc╣ odpowiedniej regu│ki
rutingu rozszerzonego. W tym wypadku selektor from okre£la sieµ,
kt≤ra ma byµ t│umaczona, a akcja nat -- adres pierwszego adresu
sieci, na kt≤r╣ maj╣ byµ t│umaczone adresy ƒr≤d│owe.
ip rule add from 195.116.211.0/24 nat 192.168.1.0
6 Optymalizacja
Podczas projektowania oraz konfiguracji ruter≤w, maj╣cych
obs│ugiwaµ du┐y ruch nale┐y braµ pod uwagΩ wydajno£µ systemu oraz op≤ƒnienia
powstaj╣ce podczas przeszukiwania du┐ych tablic rutingu lub d│ugich list
filtra pakiet≤w. Generalnie, przeszukiwanie tablic rutingu jest znacznie
szybsze ni┐ przeszukiwanie regu│ek filtra. To pierwsze odbywa siΩ z pomoc╣
funkcji haszuj╣cych, podczas gdy drugie jest zwyk│ym przeszukiwaniem liniowym 8.
6.1 Filtrowanie za pomoc╣ tablicy rutingu
Filtrowanie pakiet≤w przy pomocy ipchains zu┐ywa wiΩcej czasu
procesora ni┐ przeszukiwanie tablic rutingu. Je£li jedynymi kryteriami
filtrowania s╣ adresy ƒr≤d│owe lub docelowe pakiet≤w IP, to optymalniejsze
bΩdzie skorzystanie ze specjalnej trasy prohibit (opisanej w sekcji 4.2,
str. X).
Na przyk│ad, regu│kΩ ipchains:
ipchains -A input -d 192.168.0.0/24 -j REJECT
Mo┐na zast╣piµ przez:
ip route add prohibit 192.168.0.0/24
W przypadku regu│ek odrzucaj╣cych pakiety na podstawie adresu ƒr≤d│owego
nale┐y skorzystaµ z rutingu rozszerzonego i polecenia ip rule add from.
6.2 Optymalizacja filtra pakiet≤w
Czas przeszukiwania listy regu│ek filtra pakiet≤w mo┐na zredukowaµ uk│adaj╣c
je w odpowiedniej kolejno£ci. Dla ka┐dego sprawdzanego pakietu lista jest
przeszukiwana od pocz╣tku a┐ do pierwszej pasuj╣cej do niego regu│ki.
Po pierwsze, przy pomocy zliczania pakiet≤w nale┐y okre£liµ kt≤re regu│ki
maj╣ najwiΩcej trafie± i umie£ciµ je na pocz╣tku listy.
Po drugie, w przypadku protoko│u TCP mo┐na zaszczΩdziµ czas przeszukuj╣c
tablicΩ tylko dla pakiet≤w rozpoczynaj╣c po│╣czenie (wyr≤┐nionych flag╣ SYN).
Mo┐na to zrealizowaµ dodaj╣c na pocz╣tku listy regu│kΩ przepuszczaj╣c╣
wszystkie pakiety dla protoko│u TCP i nie opatrzone flag╣ SYN:
ipchains -A forward -p tcp ! -y
6.3 Optymalizacja tablicy rutingu
Je£li tablica rutingu danego rutera posiada lub ma w za│o┐eniu posiadaµ wiΩcej
ni┐ 100 pozycji, to podczas konfiguracji kernela nale┐y w│╣czyµ opcjΩ CONFIG_IP_ROUTE_LARGE_TABLES
(Networking options, IP: Advanced router, IP: large
routing tables). Spowoduje to przebudowanie struktur odpowiedzialnych za
szybkie wyszukiwanie pozycji w tablicy podczas ka┐dego dodawania do niej nowych
pozycji.
7 Dodatki
7.1 ZasiΩgi adres≤w
ZasiΩg (scope) mo┐na rozpatrywaµ w kontek£cie adres≤w interfejs≤w
oraz tras. Jako standardowy element protoko│u IP zasiΩg adresu jest
zdefiniowany jednoznacznie w IPv6 w RFC 2373 [8].
W adresie IPv6 zasiΩg determinuj╣ pierwsze 4 bity adresu. I tak, adres IPv6 moƒe
posiadaµ nastΩpuj╣cy zasiΩg:
- node--local
-
- host--local
- Adres lokalny oznaczaj╣cy tΩ sam╣ maszynΩ, tak jak adresy z klasy
127/8 w IPv4. Adres ten jest nadawany interfejsowi lokalnemu i nie mo┐e byµ
przesy│any przez rutery.
- link--local
- Adres lokalny, obowi╣zuj╣cy wy│╣cznie w sieci lokalnej, do kt≤rej
nale┐y dany host. Ka┐dy host IPv6 musi posiadaµ taki adres, konfigurowany
automatycznie przez system w momencie aktywacji interfejsu sieciowego.
Istnienie adres≤w typu
link-local jest bardzo wygodne, poniewa┐
pozwala na komunikacjΩ miΩdzy hostami le┐╣cymi w jednej sieci lokalnej
bez uprzedniego przydzielania i konfiguracji adres≤w. W oparciu o adresy link-local
mo┐na tak┐e tworzyµ sieci prywatne, do kt≤rych w IPv4 s│u┐y│y klasy
wydzielone z publicznej puli adres≤w (192.168/16 itp.). Pakiety z adresami
o tym zasiΩgu nie mog╣ byµ przekazywane przez rutery.
- site--local
- Adres lokalny, obowi╣zuj╣cy w ramach administratcyjnie okre£lonej sieci
prywatnej. Adresy o tym zasiΩgu nie s╣ konfigurowanie automatycznie i musz╣
byµ zdefiniowane przez administratora sieci. Jednak pakiety z adresami
site-local
mog╣ byµ przekazywane przez rutery, co pozwala na tworzenie sieci
prywatnych obejmuj╣cych wiele segment≤w LAN.
- global
- Adresy publiczne.
W przypadku IPv4 j╣dro Linuxa r≤wnie┐ rozr≤┐nia zasiΩgi adres≤w, nie s╣
one jednak czΩ£ci╣ standardu tylko raczej przeniesieniem wygodnej metody rozr≤┐niania
adres≤w z IPv6. Dla IPv4 j╣dro rozr≤┐nia nastΩpuj╣ce zasiΩgi:
- host--local
- Odpowiednik zasiΩgu
host--local w IPv6, zarezerwowany dla
adres≤w z klasy 127/8.
- link--local
- Odpowiednik zasiΩgu
link--local w IPv6. W przypadku IPv4
zasiΩg ten jest nadawany adresowi warstwy │╣cza danego interfejsu, czyli
np. adresowi MAC karty sieciowej w Ethernecie.
- site--local
- Odpowiednik zasiΩgu
site-local w IPv6. Poniewa┐ jednak
rezerwacja okre£lonych klas adres≤w IPv4 dla sieci prywatnych (RFC 1918 [4])
jest tylko umowna, zasiΩg site-local mo┐na nadaµ ka┐demu
adresowi, chocia┐ sens ma nadawanie go tylko adresom z klas
zarezerwowanych.
- universe, global
- Adresy publiczne.
Mo┐liwe jest definiowanie w│asnych warto£ci zasiΩg≤w. [11]
podaje przyk│ad zasiΩgu dla tras wewn╣trzsieciowych (interior), kt≤rym
przypisuje siΩ warto£µ zasiΩgu pomiΩdzy universe i link.
WiΩcej informacji na temat zasiΩg≤w mo┐na znaleƒµ w dokumentach RFC 2373 [8]
, RFC 2374 [5]
oraz RFC 2462 [7].
7.2 Wykorzystanie tras unreachable
Je£li mamy serwer dostΩpowy z pul╣ modem≤w, na kt≤re
po£wiΩcamy Podsieµ okre£lonej wielko£ci, to z regu│y na g│≤wnym ruterze
jest ustawiona trasa kieruj╣ca pakiety do tej podsieci na adres serwera dostΩpowego.
Je£li dany modem jest zajΩty to odpowiadaj╣cy mu adres IP posiada trasΩ w
tablicy rutingu, kieruj╣c╣ pakiety do niego na przydzielony dynamicznie
interfejs. Natomiast w momencie gdy jaki£ adres nie jest przydzielony wdzwaniaj╣cemu
siΩ klientowi, pakiet przeznaczony na dany adres IP zostanie skierowany wed│ug
trasy domy£lnej i wr≤ci do rutera. Ten z powrotem odbije go na serwer dostΩpowy,
i tak a┐ do wyczerpania czasu ┐ycia (TTL) pakietu.
Je£li na serwerze dostΩpowym stworzymy trasΩ unreachable dla
danej podsieci z -- co istotne -- du┐╣ miar╣ metric , to pakiety
kierowane na nieaktywne w danym momencie adresy IP zostan╣ odrzucone z
komunikatem ,,Host unreachable'', co bΩdzie zgodne z prawd╣.
7.3 Znakowanie pakiet≤w
Nowy kod filtra pakiet≤w Linuxa posiada przydatn╣ funkcjΩ
znakowania pakiet≤w pasuj╣cych do danej regu│ki. Oznakowanie jest liczb╣
32--bitow╣, kt≤rej warto£µ okre£la parametr -m polecenia ipchains.
Najpro£ciej opisaµ to na przyk│adzie. Tworzymy odpowiedni │a±cuch:
# ipchains -A forward -p tcp -d 192.168.1.1/32 25 -j ACCEPT
-m 0x1234
# ipchains -vL forward
Chain forward (policy ACCEPT: 315108 packets, 107748450 bytes):
pkts bytes target prot tosa tosx mark source destination ports
0 0 ACCEPT tcp 0xFF 0x00 0x1234 anywhere 192.168.1.1 any -> smtp
Wszystkie pakiety wysy│ane na port 25 hosta 192.168.1.1 zostan╣ przepuszczone
(docelowy │a±cuch ACCEPT) oraz opatrzone znakiem 0x1234. Jak
mo┐na wykorzystaµ takie oznakowanie? Jest to bardzo u┐yteczny mechanizm,
pozwalaj╣cy na zmianΩ zachowania rutera (dzia│aj╣cego w warstwie sieci)
wobec pakietu w zale┐no£ci od cech charakterystycznych dla protoko│≤w
warstwy transportowej. Czyli przede wszystkim numer≤w port≤w protoko│≤w TCP
oraz UDP, jak r≤wnie┐ typ≤w pakiet≤w ICMP. Mo┐na to wykorzystaµ
przynajmniej na dwa sposoby:
- W rutingu rozszerzonym, do kierowania r≤┐nymi trasami pakiet≤w nale┐╣cych
do r≤┐nych protoko│≤w, za pomoc╣ parametru fwmark (patrz rozdzia│ 5.2,
str. X).
- W kontroli przep│ywu danych, do przydzia│u pasma oraz priorytet≤w w
zale┐no£ci od protoko│u. S│u┐y do tego filtr fw oraz odpowiednio
zdefiniowane oznaczenia pakiet≤w: identyfikatorowi przep│ywu 1:1 odpowiada
oznaczenie 0x10001, 2:3 -- 0x20003 itd.
7.4 Weryfikacja adres≤w
Sekcja RFC 1812 [12]
sugeruje, by rutery posiada│y mo┐liwo£µ weryfikacji, czy pakiet przychodz╣cy
danym interfejsem posiada adres ƒr≤d│owy z sieci, kt≤ra jest przez ten
interfejs rutowana.
Wyobraƒmy sobie, ┐e dany ruter posiada dwa interfejsy eth0 i eth1.
Pierwszy z nich jest wyj£ciem na £wiat i skierowana jest na niego trasa domy£lna.
Na drugi interfejs jest ustawiona trasa 195.116.2111.0/24, kieruj╣ca do znajduj╣cej
siΩ za tym ruterem sieci LAN. W normalnej sytuacji pakiet z adresem ƒr≤d│owym
z sieci 195.116.211.0/24 nie ma prawa pojawiµ siΩ na zewnΩtrznym interfejsie eth0.
Pakiety z tej sieci mog╣ bowiem byµ generowane wy│╣cznie w sieci lokalnej,
znajduj╣cej siΩ za intefejsem eth1.
Ruter posiadaj╣cy filtr zgodny z RFC 1812 powinien takie pakiety przechwytywaµ
i kasowaµ. Z regu│y s╣ one efektem b│Ωdnej konfiguracji gdzie£ w odleg│ych
zak╣tkach sieci lub -- co gorsza -- pr≤by przeprowadzenia ataku przez sfa│szowanie
adres≤w IP (address spoofing).
W Linuxie weryfikacjΩ adres≤w w│╣cza siΩ za pomoc╣ interfejsu systcl,
czyli zapisuj╣c odpowiedni╣ warto£µ w pliku znajduj╣cym siΩ w systemie
plik≤w /proc. S╣ dostΩpne dwa poziomy weryfikacji -- silniejsza, w
pe│ni zgodna z RFC 1812 (warto£µ 2) i s│absza, dotycz╣ca tylko sieci
bezpo£rednio przy│╣czone do danego hosta (warto£µ 1). By zupe│nie wy│╣czyµ
weryfikacjΩ adres≤w nale┐y zapisaµ warto£µ 0, tak jak w poni┐szym
przyk│adzie:
echo 0 >/proc/sys/net/ipv4/conf/all/rp_filter
Weryfikacji adres≤w nie nale┐y w│╣czaµ w okre£lonych wypadkach, kiedy mog│aby
ona w og≤le uniemo┐liwiµ │╣czno£µ. Na przyk│ad, je£li ruting do jakiej£
sieci jest asymetryczny (pakiety wchodz╣ jednym interfejsem, wychodz╣ innym).
7.5 Ograniczenia prΩdko£ci odpowiedzi ICMP
Linux 2.2 posiada mo┐liwo£µ ograniczenia prΩdko£ci wysy│ania na okre£lone
pakiety ICMP. Ma to na celu zmiejszenie przeci╣┐enia sieci, zasob≤w rutera
oraz ograniczenie atak≤w polegaj╣cych na zalewaniu ofiary potokiem odpowiedzi
na fa│szywy pakiet ICMP. Jest to funkcja zalecana przez RFC 1812 w punkcie
4.3.2.8.
W przypadku Linuxa limity okre£la siΩ przez podanie minimalnego odstΩpu
czasowego pomiΩdzy dwoma odpowiedziami ICMP okre£lonego typu. Czas ten okre£la
siΩ w jiffies, czyli podstawowej wewnΩtrznej jednostce czasu j╣dra
Linuxa. W systemach opartych o procesory Intela i kompatybilne jest to 1/100
sekundy, a w przypadku procesor≤w Alpha -- 1/1024 sekundy.
Limitowaniu podlegaj╣ nastΩpuj╣ce pakiety ICMP wyliczone poni┐ej wraz z
odpowiadaj╣cymi im pozycjami w sysctl:
- Destination unreachable
/proc/sys/net/ipv4/icmp_destunreach_rate
- Parameter problem
/proc/sys/net/ipv4/icmp_paramprob_rate
- Time exceeded
/proc/sys/net/ipv4/icmp_timeexceed_rate
- Echo reply
/proc/sys/net/ipv4/icmp_echoreply_rate
Wszystkie wy┐ej wymienione limity s╣ domy£lnie ustawione na 1 sekundΩ, za
wyj╣tkiem icmp_echoreply_rate , kt≤re ma warto£µ 0 -- czyli brak
limitu.
W praktyce dzia│anie limit≤w objawia siΩ na przyk│ad brakiem odpowiedzi na
jedn╣ z pr≤bek polecenia traceroute , jak w poni┐szym przyk│adzie:
$ traceroute tau2
traceroute to tau2.ceti.com.pl (195.116.211.16), 30 hops max, 40 byte packets
1 tau2 (195.116.211.16) 0.282 ms * 0.256 ms
References
- [1]
- David C. Plummer, ,,An Ethernet Address Resolution Protocol'',
November 1982 (RFC 826)
- [2]
- Y. Rekhter, T. Li, ,,An Architecture for IP Address Allocation
with CIDR'', September 1993 (RFC 1518)
- [3]
- V. Fuller, T. Li, J. Yu, K. Varadhan, ,,Classless
Inter-Domain Routing (CIDR)'', September 1993 (RFC 1519)
- [4]
- Y. Rekhter et al., ,,Address Allocation for Private
Internets'', February 1996 (RFC 1918)
- [5]
- R. Hinden, M. O'Dell, S. Deering, ,,An IPv6 Aggregatable
Global Unicast Address Format'', July 1998 (RFC 2374)
- [6]
- W. Thomson, E. Nordmark, T. Narten, ,,Neighbor Discovery
for IP Version 6 (IPv6)'', December 1998 (RFC 2461)
- [7]
- W. Thomson, T. Narten, ,,IPv6 Stateless Address
Autoconfiguration'', December 1998 (RFC 2462)
- [8]
- R. Hinden, S. Deering, ,,IP Version 6 Addressing Architecture'',
July 1998 (RFC 2373)
- [9]
- Alexey N. Kuznetsov, ,,IP Command Reference'', April 14, 1999
- [10]
- Olaf Kirch, ,,The Network Administrators' Guide''
- [11]
- include/linux/rtnetlink.h
- [12]
- F. Baker, ,,Requirements for IP Version 4 Routers'', June 1995, (RFC
1812)
- [13]
- H. Endre, ,,CPU consumption of Linux firewalls'', June 1999, http://dawn.elte.hu/ endre/meres/index-en.rxml
Copyright 1999 by Pawe│ Krawczyk <kravietz@ceti.pl>
Warunki dystrybucji
Kopiowanie w formie elektronicznej dozwolone wy│╣cznie w niezmienionej
postaci, z zachowaniem informacji o autorze oraz warunkach dystrybucji i w
celach niekomercyjnych. Przedruk oraz sprzeda┐ dozwolone wy│╣cznie za pisemn╣
zgod╣ autora.
UWAGA: obecna wersja ma jeszcze masΩ b│Ωd≤w, niedor≤bek i nie£cis│o£ci,
wiΩc proszΩ czytaµ j╣ z krytycznym nastawieniem i nie wierzyµ we wszystko
co napisa│em.
Uwagi, poprawki i rozszerzenia mile widziane.
- 1
- Pawe│ Krawczyk, ,,Sterowanie przep│ywem danych w Linuxie 2.2''
- 2
- Patrz http://www.whatis.com/anycast.htm
- 3
- WiΩcej na temat zasiΩg≤w mo┐na przeczytaµ w Dodatku B.
- 4
- FlagΩ NOARP maj╣ ustawion╣ automatycznie na przyk│ad intefejsy
typu point-to-point (PPP, SLIP), interfejs dummy itp.
- 5
- Dla intefejs≤w PP wielko£ci╣ domy£ln╣ jest 10 pakiet≤w. Alan Cox
zaleca w takim wypadku zmniejszenie tej warto£ci do 3.
- 6
- Patrz dodatek 7.3
(str. X)
- 7
- Na przyk│ad ,,IP Masquerade mini HOWTO'', http://www.jtz.org.pl/Html/mini/IP-Masquerade.pl.html
- 8
- Interesuj╣ce opracowanie na ten temat mo┐na znaleƒµ w pracy [13]
This document was translated from LATEX by HEVEA.
|