Pptp Tunnel Configuration

  Pawel   Reading time: 7 minutes

VPN (Tunelowanie)

Tunelowanie w kontekście VPN (Virtual Private Network) to proces, w którym dane przesyłane między urządzeniem użytkownika a siecią docelową są "opakowywane" w dodatkową warstwę szyfrowania i przesyłane bezpiecznym kanałem, zwanym tunelem.
Dzięki tunelowaniu ruch sieciowy jest zabezpieczony przed podsłuchem, manipulacją czy śledzeniem, co jest kluczowe dla prywatności i bezpieczeństwa w sieciach publicznych.
VPN może wykorzystywać rozmaite protokoły, np.:
  • PPTP
  • L2TP/IPsec
  • OpenVPN
  • WireGuard
  • SSTP
  • IKEv2/IPsec.
Każdy z wymienionych protokołów można wdrożyć w systemie Linux, choć wybór zależy od potrzeb – PPTP i L2TP/IPsec są prostsze, ale mniej bezpieczne, OpenVPN i WireGuard oferują nowoczesne bezpieczeństwo i wydajność, a IKEv2/IPsec sprawdzi się w specyficznych scenariuszach mobilnych.

PPTP

Protokół PPTP (Point-to-Point Tunneling Protocol) to jedna z najstarszych i najprostszych metod tworzenia wirtualnych sieci prywatnych (VPN). Protokół ten wykorzystuje szyfrowanie MPPE (Microsoft Point-to-Point Encryption) i port 1723, co czyni go łatwym w implementacji, ale mniej bezpiecznym w porównaniu do nowszych rozwiązań, jak OpenVPN czy WireGuard.
W przypadku PPTP w systemach Linux tunelowanie opiera się na protokole GRE (Generic Routing Encapsulation) w połączeniu z szyfrowaniem MPPE, tworząc wirtualny, bezpieczny most między urządzeniami.

Działania praktyczne

W dzisiejszym artykule opiszę konfigurowanie połączenia PPTP w systemie Ubuntu Server, choć sposób postępowania będzie uniwersalny także w kontekście innych dystrybucji Linuxa.

Dlaczego konfigurowałem PPTP na Ubuntu Server?

Na co dzień mam do czynienia z różnymi tunelami VPN - w większości przypadków są one zestawiane natywnie, jak również z wykorzystaniem klientów własnościowych w systemach Windows.

W przypadku wykorzystywania połączeń natywnych w Windows zastanawiałem się, jak wyglądałoby zestawienie analogicznego tunelu na Ubuntu Server. Wyniki moich przemyśleń poniżej.

Agenda wdrożenia tunelu PPTP na Ubuntu

  • zainstalowanie klienta VPN (pptp-linux)
  • wygenerowanie konfiguracji tunelu (pptsetup), co de facto sprowadza się do utworzenia wszystkich wymaganych plików konfiguracyjnych, niezbędnych do ustanowienia połączenia i do uwierzytelnienia użytkownika
  • zestawienie aktywnego tunelu PPTP - uruchomienie demona PPPD z użyciem przygotowanej uprzednio konfiguracji
  • debugowanie tunelu - czy został poprawnie zestawiony, czy też może wystąpiły błędy
  • konfiguracja harmonogramu (cron), aby tunel zestawiał się automatycznie po każdorazowym uruchomieniu systemu
  • dodanie trasy do sieci docelowej (tzw. split tunneling), co umożliwi komunikację z urządzeniami po drugiej stronie tunelu
  • rozbudowanie harmonogramu (cron) z uwzględnieniem trasy do sieci docelowej
  • uwagi końcowe

HOW-TO

  1. Instalacja klienta VPN (pptp-linux):

    sudo apt install pptp-linux

  2. Wygenerowanie konfiguracji tunelu (pptsetup)

    sudo pptpsetup --create myvpn --server NNN.NNN.NNN.NNN --username USER_NAME --password USER_PASSWORD --encrypt --start

    Narzędzie pptpsetup utworzy następujące pliki konfiguracyjne:

    /etc/ppp/peers/myvpn - zawierający konfigurację połączenia (protokół, serwer, parametry) dla demona PPPD

    /etc/ppp/chap-secrets - dane uwierzytelniające użytkownika, wykorzystywane przez protokół CHAP

    Poprawnie wygenerowana konfiguracja umożliwi prawidłowe zestawienie tunelu PPTP przez demona PPPD, dzięki czemu nie będzie potrzeby ręcznej edycji w/w plików konfiguracyjnych.

  3. Sterowanie połączeniem VPN - włączanie/wyłączanie tunelu:

    sudo pon myvpn      # tunel on

    sudo poff myvpn    # tunel off

  4. Debugowanie tunelu

    Wyświetlanie informacji o połączeniu - pojawienie się w wynikach interfejsu ppp0 będzie oznaczało zestawienie tunelu (nawiązanie połączenia):

    ifconfig ppp0

    ip a | grep ppp0

    Przeglądanie logów systemowych:

    journalctl -xe | grep pppd

    sudo cat /var/log/syslog | grep pppd

  5. Zestawianie tunelu po każdorazowym uruchomieniu systemu (CRON)

    sudo crontab -e

    @reboot sleep 15 && pon myvpn

  6. Dodanie trasy do sieci zdalnej

    Ruch sieciowy serwera przechodzi przez domyślny interfejs sieciowy eth0 i bramę domyślną. Aby zapewnić dostęp z serwera do urządzeń znajdujących się w sieci zdalnej należy odpowiednio skonfigurować tzw. split tunneling, czyli dodać trasę do sieci docelowej. Dzięki temu część ruchu sieciowego, adresowanego do sieci zdalnej, będziemy mogli przekierować bezpośrednio do szyfrowanego tunelu VPN.

    Dodanie trasy w sposób doraźny:

    sudo ip route add 10.10.10.0/24 dev ppp0

  7. Modyfikacja zadania CRON o konfigurację trasy

    Aby dodać trasę w sposób trwały, możemy rozbudować zadanie cron o konfigurację trasy:

    sudo crontab -e

    @reboot sleep 15 && pon myvpn && sleep 10 && ip route add 10.10.10.0/24 dev ppp0