Crmgo Blog

wprowadzenie

wprowadzenie

Zapobieganie wyciekom IPv6 W naszych eksperymentach będziemy korzystać z globalnych adresów IPv6 z zakresu przeznaczonego do użytku w Internecie. Obecnie, gdy dostawcy usług nie obsługują ani nie przydzielają adresów IPv6 swoim klientom, takie eksperymenty nie powinny powodować żadnych problemów. Jednak dla pewności,...

wprowadzenie

Zapobieganie wyciekom IPv6

W naszych eksperymentach będziemy korzystać z globalnych adresów IPv6 z zakresu przeznaczonego do użytku w Internecie. Obecnie, gdy dostawcy usług internetowych nie obsługują ani nie przydzielają adresów IPv6 swoim klientom, takie eksperymenty nie powinny powodować żadnych problemów. Jednak dla pewności zablokuj na swoim routerze przepuszczanie pakietów IPv6 na zewnątrz. Jeśli Twój router działa pod kontrolą systemu Linux, możesz zablokować cały ruch IPv6 za pomocą następujących poleceń:

1
2
3
# ip6tables -P OUTPUT DROP
# ip6tables -p INPUT DROP
# ip6tables -p FORWARD DROP
Przydzielanie globalnych adresów IPv6

Adresy link-local, których używaliśmy w pierwszym artykule, są dość ograniczone w zastosowaniu. W rzeczywistym środowisku będziemy potrzebować globalnych adresów unicast. Takimi adresami są adresy z zakresu 2000::/3. Osoby ciekawe mogą wiedzieć, że adresy z zakresu 2001:0DB8::/32 są przeznaczone do użytku w eksperymentach, więc to właśnie ich będziemy używać. Przypiszmy rzeczywisty adres IPv6 do interfejsu sieciowego eth0:

1
# ip -6 addr add 2001:0db8::1/64 dev eth0
Uwaga: /64 to nie notacja CIDR, lecz liczba bitów prefiksu. Poniższa diagram pomoże zrozumieć, o co chodzi:

1
2
3
2001:db8:0000:0000:0000:0000:0000:0001
_____________|____|___________________
ID sieci Podsieć ID interfejsu
ID sieci jest określany przez dostawcę, gdy przydziela blok adresów IPv6. Ty możesz zarządzać wartościami Podsieć i ID interfejsu. W naszym przypadku 64 bity są przeznaczone na ID sieci + Podsieć, a kolejne 64 bity na ID interfejsu. Pamiętaj, że w IPv4 na cały adres przydzielano 32 bity, więc przydzielony blok adresów o takim rozmiarze wystarczy Ci na bardzo długo!

Teraz możesz pingować interfejs w obrębie lokalnego systemu, używając przypisanego mu adresu IPv6. Tutaj tylko dla przykładu wpisuję długi adres IPv6 w pełnym formacie, abyś zobaczył, jak program ping6 automatycznie go skróci:

1
2
3
$ ping6 2001:db8:0:0:0:0:0:1
PING 2001:db8:0:0:0:0:0:1(2001:db8::1) 56 data bytes
64 bytes from 2001:db8::1: icmp_seq=1 ttl=64 time=0.043 ms
Jednak ping z innego hosta nie przejdzie, ponieważ do tego, podobnie jak w przypadku IPv4, potrzebny jest router.

Dodawanie adresów

Możesz dodawać dowolną liczbę adresów interfejsom swoich systemów. Po prostu liczyń w systemie szesnastkowym: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, 10, 11 itd., uzyskując w ten sposób nowe adresy:

1
2
3
4
5
6
7
8
2001:db8::1
2001:db8::2
2001:db8::3
...
2001:db8::18
2001:db8::19
2001:db8::1a
2001:db8::1b
Routing

Oczywiście Twój router musi obsługiwać IPv6. Jeśli Twoim routerem jest system Linux, włączenie routingu można następującym poleceniem:

1
# sysctl -w net.ipv6.conf.all.forwarding=1
Sprawdzenie, czy routing IPv6 jest włączony, można za pomocą polecenia:

1
2
# cat /proc/sys/net/ipv6/conf/eth0/forwarding
1
„1” oznacza, że wszystko jest w porządku i routing wersji szóstej protokołu IP jest włączony w Twoim urządzeniu. Teraz zainstaluj radvd – demon reklamowania routera (router advertisement daemon) i w jego pliku konfiguracyjnym /etc/radvd.conf umieść poniższą konfigurację, zmieniając nazwę interfejsu eth0, jeśli jest to konieczne:

1
2
3
4
5
6
7
interface eth0
{
AdvSendAdvert on;
prefix 2001:db8::/64
{
};
};
Następnie dodaj do interfejsu swojego routera adres IPv6:

1
# ip address add 2001:db8::1a/64 dev eth0
Sprawdź, czy wszystko poszło zgodnie z planem, za pomocą poleceń

1
2
3
$ ifconfig eth0 | grep inet6
inet6 addr: 2001:db8::1a/64 Scope:Global
inet6 addr: fe80::20e:2eff:feb9:cbad/64 Scope:Link

1
2
3
$ ip -6 route show
2001:db8::/64 dev eth0 metric 1024 mtu 1500 advmss 1440 hoplimit 0
fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0
I teraz można uruchomić radvd:

1
# /etc/init.d/radvd start
Powinieneś bez problemu pingować interfejs swojego routera. Zwróć uwagę, że w przypadku adresu globalnego, w przeciwieństwie do link-local, nie musisz podawać nazwy interfejsu:

1
2
3
$ ping6 2001:0db8::1a
PING 2001:db8::1a(2001:db8::1a) 56 data bytes
64 bytes from 2001:db8::1a: icmp_seq=1 ttl=64 time=1.73 ms
Wszystkie komputery znajdujące się na tym samym przełączniku (switchu) co router powinny teraz automatycznie uzyskać adresy z zakresu 2001:0db8::/64. Aby dodać do tabel routingu twoich hostów domyślny router, użyj polecenia:

1
# ip -6 route add default via 2001:db8::1a
Można pozbyć się ręcznego dodawania tego wpisu do tabel routingu hostów, nieco uzupełniając konfigurację swojego radvd:

1
2
3
4
5
6
7
8
9
10
11
12
13
interface eth0
{
AdvSendAdvert on;

prefix 2001:db8::/64
{
AdvOnLink on;
AdvAutonomous on;
};
route ::/0
{
};
}
Teraz w tabelach routingu IPv6 twoich hostów zobaczysz następujące:

1
2
3
4
$ ip -6 route show
...
default via 2001:db8::1a dev eth0 metric 1024 mtu 1500 advmss 1440 hoplimit 0
...
Co zrobić, jeśli nie chcesz, aby radvd przydzielał adresy IPv6 wszystkim z rzędu w twojej sieci? W pliku konfiguracyjnym demona wypisz link-local adresy tych stacji, którym chcesz przydzielać adresy, a żądania od pozostałych zostaną po prostu zignorowane:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
interface eth0
{
AdvSendAdvert on;

prefix 2001:db8::/64
{
AdvOnLink on;
AdvAutonomous on;
};
route ::/0
{
};

clients
{
fe80::20d:b9ff:fe05:25b4;
fe80::20b:6aff:feef:7e8d;
fe80::221:97ff:feed:ef01;
};
};
Kalkulator adresów IPv6

Zrozumienie arytmetyki binarnej jest bardzo ważne dla zrozumienia zasad adresacji w IP. Obliczanie adresów ręcznie bywa dość męczące i często prowadzi do błędów. Dlaczego nie powierzyć tych obliczeń komputerowi? Istnieje mnóstwo narzędzi online do tego celu, wybierz dowolne! Ponadto w większości dystrybucji znajdziesz w repozytoriach narzędzie ipv6calc, które przyda się do użytku lokalnego.

Serwisy nazw

Ogólnie rzecz biorąc, konfiguracja DNS dla IPv6 to temat na osobny, obszerny artykuł, jednak mam nadzieję, że niektóre z opisanych tutaj elementów wskażą Ci właściwy kierunek.

Pomysł leżący u podstaw autokonfiguracji interfejsów sieciowych IPv6 (adresy link-local i reklamy routerów) ma na celu eliminację konieczności utrzymywania serwera DHCP, jednak nadal musisz utrzymywać serwer DNS, aby hosty mogły wykonywać konwersję nazw na adresy IP i odwrotnie. BIND9 obsługuje już IPv6, ale jak zawsze w przypadku BIND, będziesz musiał się natrudzić, edytując kilka plików konfiguracyjnych znajdujących się w różnych miejscach. W innych demonach DNS wymagałoby to mniejszego nakładu pracy, jednak żaden z nich nie obsługuje jeszcze IPv6 w pełni. Jeśli zainteresowała Cię konfiguracja IPv6 w BIND, możesz zapoznać się z dokumentacją BIND.

W poprzednim artykule rozważaliśmy opcję użycia tradycyjnego pliku /etc/hosts. Alternatywnie możesz użyć Dnsmasq, który jest moim ulubionym narzędziem do obsługi DNS w sieciach lokalnych. Obsługuje on DNS dla IPv6 i TFTP, jednak nie posiada funkcji DHCP, co uniemożliwia mu bycie uniwersalnym rozwiązaniem. Dnsmasq udostępnia zawartość pliku /etc/hosts w sieci, wykorzystując protokół DNS. Najpierw skonfiguruj interfejsy IPv6 swoich hostów do używania adresów statycznych, a następnie umieść mapowanie adresów na nazwy w pliku /etc/hosts swojego serwera Dnsmasq i zrestartuj demona Dnsmasq. Następnie zainstaluj rdnssd – demona do wyszukiwania rekurencyjnych serwerów DNS – na tym samym hoście, gdzie zainstalowany jest radvd, a następnie dodaj do pliku konfiguracyjnego /etc/radvd.conf wiersz wskazujący adres Twojego serwera Dnsmasq:

1
RDNSS 2001:0db8::1b
Zrestartuj radvd. Projekty radvd i rdnssd są w fazie rozwoju, więc możliwe, że możesz napotkać pewne problemy, choć na moich systemach Debian działają one bez zarzutu.

Uwaga: wpis mógł powstać z pomocą AI i redakcji. Odpowiedzialny: Dmytro Lomaka, Kaltenkirchen.