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:
- Zainstalowanie klienta VPN
pptp-linux - Wygenerowanie konfiguracji tunelu przy użyciu
pptpsetup - Zestawienie aktywnego tunelu PPTP
- Sprawdzenie, czy połączenie zostało poprawnie uruchomione
- Dodanie automatycznego uruchamiania po restarcie systemu
- Dodanie trasy do sieci zdalnej w modelu split tunneling
- Rozszerzenie zadania
crono 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 demonapppd/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.