przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
bio-sk
»
sieci_routing
bio-sk:sieci_routing
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Warstwa sieci ====== Warstwa **łącza danych** zapewnia komunikację między **bezpośrednio połączonymi** urządzeniami. Warstwa **sieci** zapewnia komunikację między **dowolnymi** urządzeniami. Wiadomości na warstwie sieci nazywa się **pakietami**. \\ Urządzenia warstwy sieci to trasowniki (routery). ===== Protokół IPv4 i IPv6 ===== IPv4 = Internet Protocol version 4 <small>([[https://tools.ietf.org/html/rfc791|RFC 791]]); czasami skracane do inet</small> \\ IPv6 = Internet Protocol version 6 <small>([[https://datatracker.ietf.org/doc/html/rfc8200|RFC 8200]]((Ten dokument jest trzecim z kolei RFC opisującym IPv6, pierwszy to [[https://datatracker.ietf.org/doc/html/rfc1883|RFC 1883]]))); czasami skracane do inet6</small> Budowa nagłówka IPv4 i IPv6:\\ {{:sk2:pakiet_ipv4_vs_ipv6.svg|}} \\ <html><div style="display:block; margin-top:-1.2em"></div></html> <html><div style="display:inline-block; width:20em"></div></html> <small>źródło: https://www.ripe.net/support/training/material/ripe-ncc-training-material</small> Pole //opcje// w IPv4 pozwala dodawać kolejne informacje do nagłówka IPv4. \\ W IPv6 zamiast tego po nagłówku IPv6 może znajdować się nagłówek z kolejnymi informacjami:\\ <html> <!--{{:sk2:pakiet_ipv6_naglowki.svg?x500}}--> <div style="display:inline-block; vertical-align: bottom;"> <a href="/jkonczak/_detail/sk2:pakiet_ipv6_naglowki.svg?id=bio-sk%3Asieci_routing" class="media" title="sk2:pakiet_ipv6_naglowki.svg"> <img src="/jkonczak/_media/sk2:pakiet_ipv6_naglowki.svg?w=500&tok=ffd7f3" class="media" alt="" width="500"> </a> </div> <div style="display:inline-block; width:15em;"></html> <small>źródło: https://www.ripe.net/support/training/material/ripe-ncc-training-material</small> <html></div></html> === Wskazanie protokołu warstwy transportu === Pole //protokół// w nagłówku IPv4 lub //następny nagłówek// w ostatnim nagłówku IPv6 wskazuje który protokół warstwy transportu jest w danych pakietu. Numery protokołów są powszechnie znanie – patrz http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml lub ''less /etc/protocols''. === Fragmentacja === Rozmiar pakietów IP jest ograniczany przez MTU warstwy niższej. Żeby przesłać porcję danych większą niż ten maksymalny rozmiar pakietu, dane trzeba podzielić na fragmenty, przesłać każdy z nich w osobnym pakiecie i złożyć u odbiorcy. \\ Pakiety przenoszące fragmenty tej samej wiadomości warstwy transportu mają ten sam //identyfikator// i odpowiednią //pozycję fragmentu// (offset). Poza ostatnim, fragmenty mają we flagach ustawiony bit //więcej fragmentów// (MF). \\ W IPv4 fragmentację może wykonać każde urządzenie na drodze pakietu, w IPv6 tylko nadawca. IPv4 w polu flag ma bit zabraniający fragmentacji (DF) \\ Fragmentacji, o ile to możliwe, należy unikać – często prowadzi do nieoptymalnego wykorzystania sieci. Dla przetestowania fragmentacji można wykorzystać komendę ''ping'', dodając przełącznik ''ping -s <rozmiar>'', np: \\ ''ping -s 5000 150.254.32.65'' ''ping -s 5000 2001:808:201:100::1'' === Ograniczanie skutków pętli na warstwie sieci === Żeby w powstałej na skutek błędnej konfiguracji sieci pakiet nie krążył w nieskończoność, każde urządzenie warstwy sieci zmniejsza o jeden wartość pola //TTL// / //hop limit//. Gdy ta wartość spadnie do 0, pakiet nie jest dalej przekazywany. ===== ICMP i IGMP ===== === ICMP === Protokół IP nie przewiduje informowania nadawcy o problemach. Funkcje diagnostyczne i kontrolne dla IP spełnia protokół ICMP (Internet Control Message Protocol). ICMP różni się w szczegółach między wersją dla [[https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol|IPv4 (ICMP)]] i dla [[https://en.wikipedia.org/wiki/ICMPv6|IPv6 (ICMPv6)]]. \\ ICMPv6 spełnia też dodatkowe funkcje (o których będzie osobno później). ICMP/v6 pozwala między innymi na: * wysłanie informacji zwrotnej o niedostarczeniu pakietu, z podaniem powodu, np: * nie ma takiej sieci, komputera, programu docelowego, … (//destination unreachable//) * zabroniono fragmentacji, a pakiet był za duży żeby go przesłać dalej (//packet too big//) * pakiet zrobił za dużo skoków i skończył się TTL/hop limit (//time exceeded//) * testowanie łączności (ping – //echo request// i //echo reply//) Aby zaobserwować komunikaty ICMP, można wykonać: * ''ping <//cel//>'' * ''traceroute [-q 1] -T <//cel//>'' (porównaj z ''traceroute -I <//cel//>'') * ''ping -s 1440 2001:470:647b::1'' (przed ponownym uruchomieniem wykonaj ''ip -6 r flush cache'') * połączenie do nieużywanego portu, np: ''host pl. lab-net-1'' (z lab-net) * połączenie do nieosiągalnego (np. nieistniejącego) adresu, np. ''host pl. lab-sec-33'' (z lab-net) <html><!-- (lub ''tftp lab-net-1 -c get readme.txt'') (lub ''tftp lab-sec-33 -c get readme.txt'') --></html> === IGMP === Do zarządzania przynależnością do grup multicastowych w IPv4 służy protokół [[https://en.wikipedia.org/wiki/Internet_Group_Management_Protocol|IGMP]]. \\ W IPv6 to samo zadanie włączono w protokół ICMPv6 (pod nazwą [[https://en.wikipedia.org/wiki/Multicast_Listener_Discovery|MLD]]). <small> Używając wiadomości protokołu IGMP/ICMPv6 urządzenie można ogłosić informację że chce otrzymywać wiadomości wysłane na konkretne multicastowe adresy IP. \\ Odpowiednio ustawione routery mogą przekazywać dalej te informacje (i wybrane pakiety multicastowe), a switche podsłuchują ([[https://en.wikipedia.org/wiki/IGMP_snooping|IGMP snooping]]) wymiany wiadomości IGMP/ICMPv6 żeby wiedzieć na które porty warto wysyłać wiadomości multicastowe. Wyświetlenie grup do których należy komputer [IP]: ''netstat -g'' / ''ip maddr'' \\ Wyświetlenie grup do których należy komputer [MAC]: ''cat /proc/net/igmp'' i ''cat /proc/net/igmp6'' / ''ip maddr'' \\ Oczekiwanie na wiadomość multicastową na adresie IPv4 można zasymulować przez: ''socat udp4-recv:0,ip-add-membership=//239.1.2.3//://br0// -'' \\ Oczekiwanie na wiadomość multicastową na adresie IPv6 można zasymulować przez: ''socat udp6-recv:0,ipv6-join-group=[//ff05::ace//]://br0// -'' ++++ Przykładowy wynik poleceń: | <html><pre> # netstat -ng IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- br0 1 <span title="Adres 224.0.0.251 odpowiada adresowi MAC 01:0E:00:00:FB" style="background-color:rgba(128,0,128,0.2)">224.0.0.251</span> br0 1 224.0.0.1 # ip maddr 4: br0 link 01:00:5e:00:00:01 link 01:00:5e:00:00:fb inet 224.0.0.1 inet 224.0.0.251 # cat /proc/net/igmp Idx Device : Count Querier Group Users Timer Reporter 3 br0 : 2 V3 <span title="Adres 224.0.0.251 odpowiada adresowi MAC 01:0E:00:00:FB, stąd FB0000E0" style="background-color:rgba(128,0,128,0.2)">FB0000E0</span> 1 0:00000000 0 010000E0 1 0:00000000 0 </pre></html> ++++ </small> ====== Trasowanie ====== ===== Wstęp ===== === Trasowanie === Zadaniem warstwy sieci jest dostarczenie danych do dowolnego wskazanego urządzenia w sieci. \\ **Jeśli cel nie jest bezpośrednio połączony, dane (pakiety) trzeba wysłać do wybranego z bezpośrednich sąsiadów.** Zauważ że adres źródłowy i docelowy warstwy sieci (adres IP) zostaje bez zmian od źródła do celu, a adres źródłowy i docelowy warstwy łącza danych (adres MAC) jest ustawiany na nowo przez każde kolejne urządzenie. **Trasowanie** (routing) to wyznaczenie następnego urządzenia do którego zostanie wysłany pakiet. \\ Na każdym urządzeniu wyznaczany jest **adres IP następnego skoku** i interfejs którym pakiet zostanie wysłany (nigdy cała trasa). === Tablica tras === Urządzenia podejmują decyzję dokąd dalej wysłać pakiet na podstawie **tablicy tras** ([[http://en.wikipedia.org/wiki/Routing_table|routing table]]). Tablicę tras można zbudować ręcznie (trasowanie statyczne), lub skonfigurować i uruchomić protokół trasowania dynamicznego który automatycznie zbuduje taką tablicę. Tablica tras to lista wpisów na które składają się przynajmniej: * cel – sieć docelową (np. 1.2.0.0/16, 192.168.2.0/24) * trasę – adres następnego skoku (np. 3.4.5.6, 192.168.1.1) lub/i port wyjściowy (slo1, tun2) * typowo podaje się tylko adres następnego skoku (czyli adres z bezpośrednio połączonej sieci) * dla sieci bezpośrednio podłączonych podaje się tylko urządzenie * metrykę – koszt wysłania daną trasą pakietu, używany do porównywania tras, (np. 0, 1, 10, 679842) * <html><small></html> w routerach CISCO (na których będą kolejne zajęcia) dodatkowo parametr //administrative distance// (AD), który jest używany do rozstrzygania wyboru trasy jeśli więcej protokołów routingu poda trasę do tej samej sieci<html></small></html> Przykład tablicy tras w Linuksie: <html><div style="margin-top:-1.2em;margin-bottom:-1.2em"></div></html> <html><pre> <span title="Trasa domyślna – będzie użyta jak żadna inna się nie dopasuje" style="background-color:rgba(255,0,255,0.1)">default</span> <span title="Wskazanie do kogo przekazać dalej pakiet idący na adresy IP ze wskazanej sieci" style="background-color:rgba(255,0,0,0.2)">via 150.254.32.65</span> dev br0 <span title="Trasę ustawił protokół DHCP" style="background-color:rgba(0,128,0,0.1)">proto dhcp</span> <span title="Wskazanie do których adresów IP prowadzi trasa" style="background-color:rgba(255,255,0,0.2)">10.0.0.0/8</span> <span title="Wskazanie do kogo przekazać dalej pakiet idący na adresy IP ze wskazanej sieci" style="background-color:rgba(255,0,0,0.2)">via 150.254.32.126</span> dev br0 <span title="Wskazanie do których adresów IP prowadzi trasa" style="background-color:rgba(255,255,0,0.2)">10.3.0.0/16</span> <span title="Wskazanie do kogo przekazać dalej pakiet idący na adresy IP ze wskazanej sieci" style="background-color:rgba(255,0,0,0.2)">via 150.254.32.65</span> dev br0 <span title="Wskazanie do których adresów IP prowadzi trasa" style="background-color:rgba(255,255,0,0.2)">10.8.0.0/16</span> <span title="Wskazanie do kogo przekazać dalej pakiet idący na adresy IP ze wskazanej sieci" style="background-color:rgba(255,0,0,0.2)">via 172.16.0.1</span> dev enp1s0 <span title="Koszt wysłania pakietu tą trasą" style="background-color:rgba(0,0,255,0.1)">metric 100</span> <span title="Wskazanie do których adresów IP prowadzi trasa" style="background-color:rgba(255,255,0,0.2)">10.8.0.0/16</span> <span title="Wskazanie do kogo przekazać dalej pakiet idący na adresy IP ze wskazanej sieci" style="background-color:rgba(255,0,0,0.2)">via 150.254.32.88</span> dev br0 <span title="Koszt wysłania pakietu tą trasą" style="background-color:rgba(0,0,255,0.1)">metric 200</span> 150.254.32.64/26 dev br0 <span title="Trasę automatycznie ustawił kernel przy dodaniu IP z tej sieci do interfejsu" style="background-color:rgba(0,128,0,0.1)">proto kernel</span> scope link src 150.254.32.75 172.16.0.0/16 dev enp1s0 <span title="Trasę automatycznie ustawił kernel przy dodaniu IP z tej sieci do interfejsu" style="background-color:rgba(0,128,0,0.1)">proto kernel</span> scope link src 172.16.0.10 <span title="Dodana ręcznie informacja że komputery z sieci 172.18.0.0/16 są bezpośrednio osiągalne przez urządzenie enp1s0" style="background-color:rgba(255,128,0,0.2)">172.18.0.0/16 dev enp1s0 scope link</span> </pre></html> === Wybór trasy === Schemat wyboru trasy: * z tras do sieci w których znajduje się docelowy adres wybiera się trasy do sieci o najdłuższej masce, np.:<code>172.21.0.0/16 via 172.16.0.16 dev eth2 172.21.0.0/24 via 172.16.0.24 dev eth2 172.21.0.0/28 via 172.16.0.28 dev eth2</code> pakiet kierowany do 172.21.0.15 zostanie wysłany przez 172.16.0.28, a \\ pakiet kierowany do 172.21.0.55 zostanie wysłany przez 172.16.0.24 * jeśli wybór nie jest jednoznaczny - trasa o najmniejszym koszcie, np.:<code>150.254.44.0/23 dev wlan0 proto kernel scope link src 150.254.45.39 metric 2003 150.254.44.0/23 dev wlan1 proto kernel scope link src 150.254.44.149 metric 1002</code>tu zawsze wybrana jest trasa przez 150.254.44.149, jako ta o niższym koszcie * jeśli wybór nie jest jednoznaczny - pierwsza w tablicy.<code>default via 150.254.44.1 dev wlan0 default via 150.254.130.42 dev eth0</code> Zwykle definiuje się w tablicy tras **trasę domyślną**. \\ Czasami jest ona traktowana "specjalnie" – pokazywana w osobnym miejscu lub opisana jako //default// (zamiast adresu sieci). \\ Jeśli nie – do zdefiniowania trasy domyślnej używa się adresu 0.0.0.0/0 ===== Trasowanie statyczne w Linuksie ===== ==== Wyświetlanie tablic routingu w systemie Linux ==== Narzędzia ''route'' (net-tools) i ''ip route'' (iproute2) Wypisanie trasy (uwaga, komendy wypisują zwykle osobno trasy do IPv4 i IPv6): * ''route [-6]'' * ''ip [-6] route [list|show]'' * <small>''ip route show table all'' pokaże wszystkie trasy naraz</small> <html><div style="margin-top:-1.2em"></div></html> Sprawdzenie adresu następnego skoku do podanego adresu docelowego: * ''ip route get <addr>'' ++++ Przykłady poleceń | <html><pre> <b>/ # ip route</b> <span title="Trasa domyślna (trasa do 0.0.0.0/0)" style="background-color:rgba(0,255,0,0.2)">default</span> via 10.0.1.2 dev br0 proto dhcp src 10.0.1.3 metric 3 <span title="Cel trasy - sieć 10.0.0.0/24" style="background-color:rgba(0,255,0,0.2)">10.0.0.0/24</span> <span title="Następny skok" style="background-color:rgba(255,0,0,0.2)">via 10.0.1.1</span> <span title="Urządzenie przez które dostępny jest adres następnego skoku" style="background-color:rgba(255,255,0,0.4)">dev br0</span> proto dhcp <span title="Adres używany jako źródłowy, ma znaczenie jeśli komputer ma wiele adresów IP" style="background-color:rgba(0,0,255,0.15)">src 10.0.1.3</span> <span title="Metryka (koszt) trasy" style="background-color:rgba(255,0,255,0.2)">metric 3</span> <span title="Trasa bez adresu IP następnego skoku oznacza, że komputery z tej sieci są bezpośrednio połączone do podanego interfejsu" style="background-color:rgba(255,0,0,0.2)">10.0.1.0/24 dev br0</span> proto dhcp scope link src 10.0.1.3 metric 3 10.0.2.0/24 via 10.0.1.254 dev br0 10.0.3.0/24 via 10.0.1.254 dev br0 metric 200 <span title="Przykład dodatkowej opcji trasy" style="background-color:rgba(0,0,0,0.1)">mtu 1480</span> <span title="Przykład specjalnego typu trasy (tutaj: zaznaczenie, że tych adresów nie ma w sieci)" style="background-color:rgba(0,0,0,0.1)">blackhole 10.0.4.0/24</span> <b>/ # route -n</b> Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface <span title="Trasa domyślna" style="background-color:rgba(0,255,0,0.2)">0.0.0.0</span> 10.0.1.2 0.0.0.0 UG 3 0 0 br0 <span title="Cel trasy - sieć lub komputer 10.0.0.0, w zależności od maski podanej dalej" style="background-color:rgba(0,255,0,0.2)">10.0.0.0</span> 10.0.1.1 <span title="Maska adresu docelowego – w tym przypadku /24, czyli jest to adres do sieci" style="background-color:rgba(0,255,0,0.2)">255.255.255.0</span> UG 3 0 0 br0 10.0.1.0 <span title="Brak adresu następnego skoku oznacza sieć bezpośrednio połączoną" style="background-color:rgba(255,0,0,0.2)">0.0.0.0</span> 255.255.255.0 U 3 0 0 br0 10.0.2.0 <span title="Adres następnego skoku" style="background-color:rgba(255,0,0,0.2)">10.0.1.254</span> 255.255.255.0 UG 0 0 0 br0 10.0.3.0 10.0.1.254 255.255.255.0 UG 200 0 0 br0 10.0.4.0 0.0.0.0 255.255.255.0 U 0 0 0 * <b>/ # ip route get 10.0.1.2</b> 10.0.1.2 dev br0 src 10.0.1.3 uid 1000 cache <b>/ # ip route get 10.0.0.1</b> 10.0.0.1 via 10.0.1.1 dev br0 src 10.0.1.3 uid 1000 cache <b>/ # ip route get 150.254.32.129</b> 150.254.32.129 via 10.0.1.2 dev br0 src 10.0.1.3 uid 1000 cache <b>/ # ip route get 10.0.3.3</b> 10.0.3.3 via 10.0.1.254 dev br0 src 10.0.1.3 uid 1000 cache mtu 1480 </pre></html> ++++ ==== Polityka systemu względem ruchu przechodzącego ==== Domyślnie Linux **nie** pozwala na przekazywanie pakietów (packet forwarding). \\ Aby zmienić to zachowanie, należy zmienić parametry jądra wykonując jedno z: * ''sysctl net.ipv4.conf.all.forwarding=1'' \\ <html><small></html>lista dostępnych zmiennych: ''sysctl -a -r 'ip.*\.forwarding' '' \\ więcej informacji: ''man 8 sysctl'' oraz ''man 7 ip''<html></small></html> * <small>''sysctl net.ipv4.ip_forward=1''</small> <small> Można też skorzystać z katalogu /proc: * ''echo 1 > /proc/sys/net/ipv4/conf/all/forwarding'' * ''echo 1 > /proc/sys/net/ipv4/ip_forward'' Ponadto na większości produkcyjnych systemów firewall domyślnie zabrania na przepuszczanie ruchu </small> ==== Komendy zmieniające trasy ==== === iproute2 === <html><div style="margin-top:-1.2em"></div></html> | Dodanie trasy | ''ip route add <//addr//>/<//mask//> [via <//addr//>] [dev <//ifname//>]'' | | Dodanie trasy przez następny skok | ''ip route add <//addr//>/<//mask//> via <//addr//>'' \\ np.: ''ip r add 192.168.5.0/24 via 192.168.0.254'' | | <small> Dodanie trasy przez urządzenie </small>|<small> ''ip route add <//addr//>/<//mask//> dev <//ifname//>'' \\ np.: ''ip r add 192.168.6.0/24 dev tun0'' </small>| | Dodanie trasy domyślnej | ''ip route add default via <//następny skok//> [dev <//urządzenie//>]'' \\ np.: ''ip r add default via 192.168.0.1'' | | Usunięcie trasy | ''ip route del <//specyfkacja trasy//>'' \\ np.: ''ip r del 192.168.5.0/24 via 192.168.0.254'' | | Usunięcie całej tablicy routinug | ''ip route flush'' \\ <small>Uwaga! Usuwa też trasy do bezpośrednio połączonych sieci.</small> | === net-tools === <html><div style="margin-top:-1.2em"></div></html> | Dodanie trasy | ''route add [-net|-host] <//cel//> [netmask <//maska//>] [gw <//brama//>] [dev <//ifname//>]'' , np. \\ ''route add -net 192.168.5.0 [netmask 255.255.255.0] gw 192.168.0.254'' | | Usunięcie trasy | ''route del [-net|-host] <//cel//> [netmask <//maska//>] [gw <//brama//>] [dev <//ifname//>]'' , np. \\ ''route del -net 192.168.5.0 [netmask 255.255.255.0] gw 192.168.0.254'' | | Dodanie trasy domyślnej | ''route add default [gw <//brama//>] [dev <//ifname//>]'', np: \\ ''route add default gw 192.168.0.1'' \\ <small>Uwaga! Starsze wersje nie znają słowa kluczowego default, trzeba ustawiać trasę do 0.0.0.0/0 </small> | <small>Komendy ustawiające trasy IPv4 i IPv6 są identyczne, przykłady są tylko dla IPv4 dla zwięzłości materiałów.</small> Trasa może definiować jednocześnie adres następnego skoku i urządzenie. \\ Podanie samego urządzenia starczy **tylko** w specjalnych przypadkach, takich jak np. sieć bezpośrednio połączona. <small> Przy definiowaniu trasy można podać też inne opcje mające wpływ na wybór trasy (''metric'', ''src'') jak i też na sposób wysyłania nią pakietów (np. ''mtu'', opcje TCP). W Linuksie istnieją specjalne pseudo-trasy odrzucające pakiety – ''throw'', ''unreachable'', ''prohibit'', ''blackhole'', np:\\ ''ip r a blackhole 10.0.0.0/8'' \\ ''ip r a unreachable 10.0.0.0/8'' \\ </small> ===== [Ekstra] Komendy dla Windowsa ===== * Obsługa tablicy routingu – odwieczne polecenie ''[[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/route_ws2008|route]]'' (uwaga, wsparcie tylko dla IPv4) * Wyświetlenie tablicy tras ''route print'' * Dodanie trasy: ''route add <SIEĆ> mask <MASKA> <NEXT_HOP>'' \\ np. ''route add 192.168.1.0 mask 255.255.255.0 10.0.0.1'' * Usunięcie trasy ''route delete <SIEĆ>'' \\ (uwaga! jeśli jest wiele tras do tego samego adresu sieci z różnymi maskami – wszystkie będą usunięte!) * Można też użyć odpowiedni cmdlet modułu [[https://learn.microsoft.com/en-us/powershell/module/nettcpip/?view=windowsserver2022-ps|NetTCPIP]] albo komendę ''[[https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-r2-and-2008/cc753156(v=ws.10)#add-route|netsh]]'' * Sprawdzenie trasy: ''tracert'' * Włączenie ruchu przechodzącego: * Wpisanie wartości ''1'' typu DWORD do ''HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter'' * Podobne działanie daje udostępnienie połączenia internetowego (ppm na połączeniu sieciowym / "Właściwości" / karta "Udostępnianie" / "Zezwalaj innym użytkownikom sieci na łączenie się poprzez połączenie internetowe tego komputera")
bio-sk/sieci_routing.1729773691.txt.gz
· ostatnio zmienione: 2024/10/24 14:41 przez
jkonczak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry