Tunel (informatyka)
Z Wikipedii
Tunel - zestawienie połączenia między dwoma odległymi hostami tak, by stworzyć wrażenie że są połączone bezpośrednio.
W miarę rozwoju sieci komputerowych najpierw lokalnych, a następnie rozległych, powstało zapotrzebowanie na łączenie ze sobą różnych sieci lokalnych za pośrednictwem publicznych sieci rozległych. Sieci lokalne korzystają jednak z innych protokołów sieciowych niż sieci rozległe. Na przykład popularne sieci lokalne firmy Novell pracują w protokole IPX, sieci rozległe wykorzystują natomiast protokoły Frame-Relay, ATM, X.25, a na nich często IP (np. Internet). Łączenie sieci wykorzystujących inny protokół niż sieć rozległą, za pomocą której łączymy sieci rozległe w sieć wirtualną, nie jest jedynym przesłaniem wykorzystywania tunelowania. Drugim i często istotniejszym jest bezpieczeństwo. Szczególnie ostatnio tunelowanie bywa często łączone z wykorzystaniem metod kryptograficznych. Często zwykli użytkownicy Internetu stosują tę technikę do własnych potrzeb. Przykładem jest korzystanie z dostępnego w Internecie oprogramowania szyfrującego o nazwie SSH. Oprogramowanie to, oprócz bezpiecznej pracy zdalnej, umożliwia tworzenie dodatkowego kanału szyfrowanego, przez który użytkownik może "tunelować" dowolną inną - potencjalnie narażoną na niebezpieczeństwo podsłuchu - usługę TCP/IP (np. FTP, telnet, IRC). Warunkiem jest jedynie zainstalowane SSH na obu końcach połączenia.
Generalnie można stwierdzić, iż tunelowanie umożliwia przesyłanie pewnych usług sieciowych za pośrednictwem innych, często odmiennych usług sieci, pracujących w różnych standardach.
Spis treści |
[edytuj] Tunele w oparciu o SSH
Tunelowanie, czyli inaczej przekierowywanie portów polega na przesyłaniu niezabezpieczonych pakietów protokołów TCP (POP3, SMTP czy HTTP) przez bezpieczny protokół SSH.
Istnieją dwa rodzaje przekierowania portów: lokalne (wychodzące) oraz zdalne (przychodzące).
- Lokalne – przekierowuje ruch przychodzący na port lokalny na odpowiedni port zdalny. Na przykład ruch przychodzący na port 1234 klienta może zostać przekierowany na port 23 na serwerze.
- Zdalne – przekierowuje ruch przychodzący na port na serwerze na odpowiedni port lokalny. Na przykład ruch przychodzący na port 1234 na serwerze może zostać przekierowany na port 23 na komputerze lokalnym.
[edytuj] Ustawienie przekierowania w MS Windows
W przykładzie został użyty program PuTTy.
Zostało ustawione przekierowanie lokalne z portu 5000 na port 80, czyli http serwera stud.ics.p.lodz.pl.
Po otwarciu połączenia z serwerem stud.ics.p.lodz.pl poprzez SSH, powinien zostać utworzony tunel. Po otworzeniu przeglądarki internetowej i wpisaniu jako adresu: http://localhost:5000, powinna się wyświetlić strona edu.ics.p.lodz.pl.
[edytuj] Ustawienie przekierowania w Linuksie
W Linuksie porty możemy przekierować poprzez wpisanie polecenia :
ssh -L 5000:edu.ics.p.lodz.pl:80 shock@stud.ics.p.lodz.pl
Polecenie to przekieruje zapytanie na port 5000 na lokalnym komputerze na port 80 serwera edu.ics.p.lodz.pl, używając tunelu SSH z wykorzystaniem serwera stud.ics.p.lodz.pl.
[edytuj] Tunele GRE
GRE czyli Generic Routing Encapsulation jest to protokół, który został wynaleziony przez CISCO.
[edytuj] Przykład utworzenia tunelu w Linuksie
Mając 2 sieci wewnętrzne A oraz B i oraz sieć C z dostępem do Internetu.
Sieć A wygląda następująco:
network 10.0.1.0 netmask 255.255.255.0 router 10.0.1.1
Router w sieci C ma adres 172.16.17.18, nazwijmy go neta.
Sieć B natomiast wygląda tak:
network 10.0.2.0 netmask 255.255.255.0 router 10.0.2.1
Router w sieci C ma adres 172.19.20.21, nazwijmy go netb.
Zadaniem sieci C będzie przekazywanie wszystkich pakietów pomiędzy siecią A oraz B.
Na routerze sieci A trzeba wykonać następujące operacje:
Krok 1.)
ip tunnel add netb mode gre remote 172.19.20.21 local 172.16.17.18 ttl 255
Dodaliśmy tutaj urządzenie tunelujące i nazwaliśmy je netb. Nakazaliśmy używać protokołu tunelowanie GRE („mode gre”). Jako adres zdalny podaliśmy IP 172.19.20.21, czyli adres routera sieci na drugim końcu. Wpisaliśmy także, że pakiety powinny pochodzić z adresu 172.16.17.18, co pozwala routerowi na posiadanie kilku adresów IP w sieci C i pozwala decydować, który z nich użyć do tunelowania. Time To Live pakietów ustawiamy na 255.
Krok 2.)
ip link set netb up
Polecenie to uruchamia urządzenie.
Krok 3.)
ip addr add 10.0.1.1 dev netb
Tutaj nadaliśmy nowopowstałemu interfejsowi netb adres 10.0.1.1.
Krok 4.)
ip route add 10.0.2.0/24 dev netb
Dodajemy trasę do sieci B.
Na routerze sieci B musimy postąpić podobnie:
ip tunnel add neta mode gre remote 172.16.17.18 local 172.19.20.21 ttl 255 ip link set neta up ip addr add 10.0.2.1 dev neta ip route add 10.0.1.0/24 dev neta
Aby usunąć tunel z sieci A należy wpisać:
ip link set netb down ip tunnel del netb
Aby usunąć tunel z sieci B należy wpisać:
ip link set neta down ip tunnel del neta
[edytuj] Tunele IPSec
IPSEC czyli Internet Protocol SECurity udostępnia mechanizmy silnej kryptografii, które umożliwiają uwierzytelnianie oraz enkrypcję. Uwierzytelnienie gwarantuje, że pakiety pochodzą od właściwego nadawcy oraz że nie zostały zmienione podczas transmisji. Enkrypcja (szyfrowanie) zapobiega przeglądaniu pakietów przez nieuprawnionych użytkowników.
Uruchamianie tunelowania IPSec:
Dla przykładu stwórzmy tunel, który będzie cały ruch z sieci 10.0.0.216 przekierowywał do sieci 130.161.0.0/16 poprzez 10.0.0.11.
#!/sbin/setkey -f flush; spdflush;
add 10.0.0.216 10.0.0.11 esp 34501
-m tunnel -E 3des-cbc "123456789012123456789012";
spdadd 10.0.0.0/24 130.161.0.0/16 any -P out ipsec esp/tunnel/10.0.0.216-10.0.0.11/require;
Atrybut „-m tunnel” jest bardzo ważny, ponieważ konfiguruje on enkrypcję ESP czyli Encapsulated Security Payload pomiędzy dwoma punktami końcowymi 10.0.0.216 oraz 10.0.0.11.
Następnym poleceniem konfigurujemy tunel. Jądro ma zadanie zabezpieczyć cały ruch z 10.0.0.0/24 do 130.161.0.0. Pakiety mają być potem dostarczone do 10.0.0.11.
Komputer 10.0.0.11 także musi zostać odpowiednio skonfigurowany:
#!/sbin/setkey -f flush; spdflush;
add 10.0.0.216 10.0.0.11 esp 34501
-m tunnel -E 3des-cbc "123456789012123456789012";
spdadd 10.0.0.0/24 130.161.0.0/16 any -P in ipsec esp/tunnel/10.0.0.216-10.0.0.11/require;
Polecenia są identyczne z wyjątkiem zmiany '-P out' na '-P in'
[edytuj] Tunele IP in IP
Ten rodzaj tunelowania istnieje w Linuksie od dawna. Działa tylko dla IPv4, nie jest kompatybilny z innymi systemami operacyjnymi.
Sieci są takie same jak w przykładzie tunelowania GRE:
Po pierwsze musimy mieć zainstalowane moduły: ipip.o oraz new_tunnel.o
Router sieci A konfigurujemy w następujący sposób:
ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21 route add -net 10.0.2.0 netmask 255.255.255.0 dev tunl0
Router sieci B konfigurujemy w następujący sposób:
ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18 route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl0
Aby wyłączyć tunel wpisujemy:
ifconfig tunl0 down