Na początek - czym jest taki tunel.
Zasadniczo, VPN to pomysł na połączenie dwóch odległych od siebie sieci przez internet. Dwa routery należące do poszczególnych sieci tworzą ze sobą owy tunel przez internet, i tunelują pakiety pochodzące z jednej sieci przeznaczone dla drugiej. Dla potencjalnego użytkownika nie ma różnicy czy wysyła jakieś pakiety do kogoś będącego rzeczywiście w jednej sieci, czy takiego będącego w 'witualnej' sieci za internetem. No, może poza spadkiem prędkości przesyłania danych:) Oczywiście każdy pakiet jest kompresowany i kryptowany (ale można wszystko wyłączyć, jeśli masz gdzieś takie sprawy jak bezpieczeństwo czy prędkość działania "tego wszystkiego").
VPN to nie konkretna implementacja, to tylko założenie. Doczekał się wielu konkurencyjnych urzeczywistnień, tunel VPN można zbudować np. dzięki omawianemu VTun:)
Do czego to się przydaje?
Do wielu rzeczy. Najpierw jakiś oczywisty przykład: firma posiada dwie sieci, oddalone od siebie o X kilometrów. Ale pracowicy w jednej sieci chcą udostępniać pliki pracownikom drugiej firmy metodą "window$sową", albo drukować coś u tych hen daleko:)
No i tutaj przydaje się VPN.
A dlaczego VTun?
Bo tak.
A poważniej - ja użyłem VTun, bo można zbudować VPN nawet gdy jedna z końcówek tunelu jest za maskaradą. W przypadku np. CIPE jest to niemożliwe, ponieważ pakiety są transmitowane tylko przez UDP (w VTun moża to robić przez TCP), a wiadomo że przy UDP nie robi się czegoś takiego jak connect(). No i nici, bo router maskujący pakiety nie będzie w stanie rozdzielić tych z otrzymanych przez UDP.
A było mi to potrzebne, żeby ominąć mojego szalonego ISP który miał głęboko moje potrzeby przekierowania paru portów. I wyszłem na tym lepiej, bo znajomy przekierował mi całe IP (a co, miał parę nieużywanych:))
Zrobimy taki tunel, żeby działał nawet jeśli klient (taki klient w protokole TCP
Code: Select all
emerge vtun
Teraz czas skonfigurować VTun po obu stronach. Najpierw konfiguracja serwera:
Code: Select all
# nano /etc/vtund.conf
Code: Select all
options {
port 666; # Port na którym ma działać tunel.
timeout 60; # Tego tłumaczyć nie trzeba :)
# Ścieżki do potrzebnych programów.
ppp /usr/sbin/pppd;
ifconfig /sbin/ifconfig;
route /sbin/route;
firewall /sbin/ipchains;
ip /sbin/ip;
}
# Opcje VTun
default {
type tun;
proto tcp; # Protokół, może być np. udp, jest jeszcze kilka innych.
comp lzo:1; # Stopień kompresji danych, 1-9.
keepalive yes;
}
# Opcje konkretnego tunelu, nazwijmy go 'kaktus' :)
kaktus {
pass XXXX; # hasło, które musi podać klient
# Polecenia wykonywane kiedy nastąpi połączenie
# %% - zastępowane jest przez nazwę interfejsu tunelu, np. tun0
up {
# IP interfejsu tunelu na tej maszynie to 192.168.69.1, IP interfejsu
# klienta to 192.168.96.1
ifconfig "%% 192.168.69.1 pointopoint 192.168.96.1";
# Połączenia dla sieci 192.168.96.0/24 kierowane będą przez tunel
route "add -net 192.168.96.0 netmask 255.255.255.0 gw 192.168.96.1 %%";
program /sbin/arp "-sD 192.168.96.1 eth0 pub";
};
}
Code: Select all
options {
port 666;
syslog daemon;
ppp /usr/sbin/pppd;
ifconfig /sbin/ifconfig;
route /sbin/route;
firewall /sbin/ipchains;
ip /sbin/ip;
}
default {
type tun;
proto tcp;
comp lzo:1;
keepalive yes;
}
kaktus {
pass XXXX;
up {
ifconfig "%% 192.168.96.1 pointopoint 192.168.69.1";
route "add -net 192.168.69.0 netmask 255.255.255.0 gw 192.168.69.1 %%";
};
}
Code: Select all
# vtund -s -f /etc/vtund.conf
VTund przejdzie w tryb daemona, ale jeśli coś nie działa to uruchom go z opcją -n, wtedy wszystkie informacje o pracy programu będą podawane na standardowym wyjściu.
Teraz klient:
Code: Select all
# vtund -f /etc/vtund.conf kaktus XXX.XXX.XXX.XXX
W miejsce XXX.XXX.XXX.XXX wstawiamy publiczne IP serwera.
Jeśli wszystko poszło dobrze, to możesz spróbować nawiązać jakieś połączenie z klienta na 192.168.69.1 albo z serwera na 192.168.96.1.



