tunel VPN P2P
Ostatnia zmiana: 2014-04-09 22:37

Metod tworzenia tuneli jest bardzo dużo, można dzięki nim tworzyć bardzo ciekawe konfiguracje - można by tu wymienić OpenVPN, tinc czy zwykły ssh. Jednym z projektów jest n2n - program pozwalający na tworzenie tuneli VPN wykorzystując metodę Peer-to-Peer. Ciekawą możliwością tego programu jest praca całkowicie zza natem, a więc przy komputerach czy routerach ukrytych wewnątrz sieci lub korzystających z połączeń z zablokowanymi portami wejściowymi - np. 3G (komórkowych).

Aby uruchomić tunel potrzebujemy dwóch elementów: serwera (zwanego tutaj supernode), z publicznym adresem IP oraz klientów (zwanych tutaj edge) którzy będą się łączyć do supernode. Czym więc to się różni np. od OpenVPN? O ile OpenVPN wymaga naszego serwera, o tyle dla supernode są publicznie dostępne w sieci. Nie wymagają one haseł, działają tylko jako przekaźniki, więc kilka węzłów może komunikować się z ich wykorzystaniem. Zaletą N2N jest więc brak potrzeby posiadania hosta z publicznym adresem IP, choć trzeba pamiętać że publiczne supernode mogę zostać wyłączone.

Instalacja



    # opkg update
    # opkg install n2n

Standardowo w repozytorium jest dostępna v1 tego pakietu; w moim repozytorium dostępna jest także wersja 2 tego pakietu:


    # opkg install n2n-v2

Konfiguracja

Zawarta jest w pliku /etc/config/n2n. Do działania wymagane jest określenie kilku parametrów:
- adres IP. Musi być unikalny dla każdego edge. Można także wykorzystać dhcp, ale nie jest to przedmiotem tego opracowania. Domyślna maska - 255.255.255.0:


    # uci set n2n.@edge[0].ipaddr=1.2.3.4

Pamiętajmy: każdy węzeł powinien mieć unikalny adres.
- adres IP i port supernode. Można wykorzystać publiczny dostępny w ramach innego projektu:

 
    # uci set n2n.@edge[0].supernode=88.86.108.50
    # uci set n2n.@edge[0].port=82

(dla v2 port powinien zostać podany jako 86)
- tzw. community, czyli nazwa naszej sieci VPN. To jeden z elementów oznaczających nasz VPN, musi być taki sam dla wszystkich węzłów:


    # uci set n2n.@edge[0].community=nazwa_sieci

- hasło, dzięki któremu węzły mogą się ze sobą komunikować


    # uci set n2n.@edge[0].key=tajne_haslo

- routing, domyślnie nie zmieniamy tablic routingu


    # uci set n2n.@edge[0].route=0

Zapisujmy wszystko


    # uci commit n2n

Uruchomienie



    # /etc/init.d/n2n enable
    # /etc/init.d/n2n start

Powinien pojawić się nowy interfejs o nazwie edge0 (można to sprawdzić poleceniem ifconfig), natomiast w logach (logread) powinna być informacja o nawiązaniu połączenia z supernode.

Testy połączenia

Zakładamy że dysponujemy routerem z Gargoyle, z modemem 3G (a więc za natem), na którym zainstalowaliśmy i uruchomiliśmy n2n. Aby dostać się do zasobów Gargoyle wystarczy zainstalować n2n na innym komputerze podając inny adres z tej samej klasy, czyli nadajemy adres np. 1.2.3.5 i wystarczy wydać standardowe polecenie np.


    $ ssh root@1.2.3.4

lub w przeglądarce wpisać po prostu http://1.2.3.4

Na komputerze z Linuksem można uruchomić demon poleceniem


    # edge -a 1.2.3.5 -c nazwa_sieci -k tajne_haslo -l 88.86.108.50:82

Dla klientów Windows można zainstalować odpowiedni program dostępny pod tym adresem.

Zakończenie

N2N jest bardzo prostym i skutecznym programem. Nie zajmuje wiele zasobów i pamięci, więc można go powszechnie stosować na routerach.

Na ten ciekawy program uwagę zwrócił Tomasz Szelejewski, za co bardzo dziękuję.