Powrot do wpisow

Wpis techniczny

Pptp Tunnel Configuration

Jak zestawić tunel PPTP na Ubuntu Server, uruchamiać go automatycznie po starcie systemu i dodać trasę do sieci zdalnej.

VPN i tunelowanie

Tunelowanie w kontekście VPN to sposób przesyłania danych pomiędzy urządzeniem użytkownika a siecią docelową przez dodatkową, logiczną warstwę połączenia. W praktyce ruch jest przenoszony bezpiecznym kanałem, czyli tunelem, co ogranicza ryzyko podsłuchu, manipulacji albo śledzenia transmisji w sieci publicznej.

VPN może wykorzystywać różne protokoły, między innymi:

  • PPTP
  • L2TP/IPsec
  • OpenVPN
  • WireGuard
  • SSTP
  • IKEv2/IPsec

Każdy z tych protokołów da się wdrożyć w Linuksie, ale ich charakter jest różny. PPTP i L2TP/IPsec są prostsze, ale ustępują bezpieczeństwem nowszym rozwiązaniom. OpenVPN i WireGuard oferują nowocześniejsze podejście, a IKEv2/IPsec dobrze sprawdza się w wybranych scenariuszach mobilnych.

Czym jest PPTP

PPTP, czyli Point-to-Point Tunneling Protocol, to jeden z najstarszych i najprostszych protokołów używanych do zestawiania połączeń VPN. Wykorzystuje szyfrowanie MPPE i standardowo port 1723, dzięki czemu jest łatwy do uruchomienia, ale wyraźnie słabszy od nowszych rozwiązań, takich jak OpenVPN czy WireGuard.

W Linuksie tunel PPTP opiera się na GRE (Generic Routing Encapsulation) w połączeniu z MPPE, tworząc wirtualny most pomiędzy urządzeniami.

Cel tego wpisu

W tym artykule pokazuję konfigurację połączenia PPTP na Ubuntu Server. Sam sposób postępowania będzie jednak zbliżony również na innych dystrybucjach Linuksa.

Na co dzień mam do czynienia z różnymi tunelami VPN, zwykle zestawianymi natywnie albo przy użyciu klientów własnościowych w systemie Windows. W pewnym momencie chciałem sprawdzić, jak wygląda analogiczne połączenie zestawione na Ubuntu Server. Poniżej zebrałem wynik tych prac w formie krótkiego, praktycznego HOW-TO.

Plan wdrożenia

Konfiguracja tunelu PPTP na Ubuntu obejmuje zwykle kilka prostych kroków:

  1. Zainstalowanie klienta VPN pptp-linux
  2. Wygenerowanie konfiguracji tunelu przy użyciu pptpsetup
  3. Zestawienie aktywnego tunelu PPTP
  4. Sprawdzenie, czy połączenie zostało poprawnie uruchomione
  5. Dodanie automatycznego uruchamiania po restarcie systemu
  6. Dodanie trasy do sieci zdalnej w modelu split tunneling
  7. Rozszerzenie zadania cron o konfigurację tej trasy

Instalacja klienta VPN

Instalacja pakietu:

sudo apt install pptp-linux

Wygenerowanie konfiguracji tunelu

Do przygotowania konfiguracji można użyć narzędzia pptpsetup:

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

To polecenie tworzy między innymi dwa podstawowe pliki:

  • /etc/ppp/peers/myvpn, czyli konfigurację połączenia dla demona pppd
  • /etc/ppp/chap-secrets, czyli dane uwierzytelniające wykorzystywane przez CHAP

Jeżeli konfiguracja zostanie wygenerowana poprawnie, zwykle nie ma potrzeby ręcznego edytowania tych plików.

Włączanie i wyłączanie tunelu

Sterowanie połączeniem jest proste:

sudo pon myvpn      # tunel on

sudo poff myvpn    # tunel off

Debugowanie tunelu

Najprostszy sposób weryfikacji to sprawdzenie, czy po zestawieniu połączenia pojawił się interfejs ppp0:

ifconfig ppp0

ip a | grep ppp0

Można też zajrzeć do logów systemowych:

journalctl -xe | grep pppd

sudo cat /var/log/syslog | grep pppd

Jeżeli interfejs ppp0 jest widoczny, a logi nie pokazują błędów uwierzytelniania ani problemów z negocjacją sesji, tunel powinien być aktywny.

Automatyczne zestawianie tunelu po restarcie

Jeżeli połączenie ma być uruchamiane automatycznie po starcie systemu, najprościej dodać wpis do cron:

sudo crontab -e
@reboot sleep 15 && pon myvpn

Kilkunastosekundowe opóźnienie daje systemowi czas na pełne podniesienie sieci przed próbą zestawienia tunelu.

Dodanie trasy do sieci zdalnej

Domyślnie ruch serwera wychodzi zwykłym interfejsem sieciowym i standardową bramą. Jeśli chcesz mieć dostęp do urządzeń po drugiej stronie tunelu, trzeba dodać trasę do sieci docelowej. To właśnie podstawowy wariant split tunneling.

Doraźne dodanie trasy wygląda tak:

sudo ip route add 10.10.10.0/24 dev ppp0

Dzięki temu ruch do wskazanej podsieci zostanie skierowany przez tunel PPTP, zamiast przez domyślną trasę systemu.

Trwała konfiguracja trasy w cron

Jeżeli tunel ma startować automatycznie, sensownie jest od razu dodać do harmonogramu również konfigurację trasy:

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

To rozwiązanie zakłada, że połączenie potrzebuje chwili, aby się zestawić, zanim system spróbuje dodać trasę przez ppp0.

Uwagi końcowe

PPTP nadal bywa przydatny tam, gdzie trzeba połączyć się ze starszą infrastrukturą albo zachować zgodność z istniejącym środowiskiem. W nowych wdrożeniach lepiej zwykle wybierać nowsze protokoły, ale w praktyce administracyjnej nadal zdarzają się sytuacje, w których PPTP pozostaje po prostu wymaganym standardem po drugiej stronie połączenia.

Na Ubuntu Server jego konfiguracja jest dość prosta: instalujesz klienta, generujesz konfigurację, uruchamiasz tunel, a potem dodajesz automatyzację i trasę do sieci zdalnej. Jeżeli zależy Ci na szybkim i powtarzalnym zestawieniu połączenia, taki model sprawdza się całkiem dobrze.