Last Updated on 11/01/2023 by administrator
Instalace a konfigurace PPTP VPN serveru na Ubuntu + L2 Broadcast
Instalace a konfigurace PPTP VPN serveru na Ubuntu + L2 Broadcast
Motivace:
Tento článek popisuje instalaci a konfiguraci PPTP VPN serveru na Ubuntu.
Článek vznikl především proto, že testujeme hry na LAN párty a bylo potřeba vidět vytvořenou hru na LAN síti jako bych byl s oběma počítači na jedné LAN domácí síti. To vyřešilo povolení broadcastu.
PPTP MS-CHAPv2 zranitelný vůči slovníkovým útokům, doporučuji ho jen používat v případě velmi silného hesla.
OS:
Implementace byla prakticky prováděna na Ubuntu 22.04 LTS a Ubuntu 20.04 LTS
Implementace [1]:
1. Instalace PPTP serveru:
Příkazem apt update se provede aktualizace seznamu balíčků z repozitářů:
apt update
Nainstalovat PPTP server:
sudo apt-get install pptpd -y
2. Přidání DNS serverů pro PPTP klienty:
Přidat DNS servery v pptpd-options souboru:
sudo vi /etc/ppp/pptpd-options
V souboru pptpd-options najít následující řádek:
#ms-dns 10.0.0.1 #ms-dns 10.0.0.2
a přepsat jej na libovolné DNS servery, v tomto případě budou použity public Google DNS servery:
ms-dns 8.8.8.8 ms-dns 8.8.4.4
3. Vytvoření PPTP uživatelů:
Přidat PPTP uživatele v chap-secrets souboru:
sudo vi /etc/ppp/chap-secrets
Příklad vytvoření dvou uživatelů user1 a user2 s heslem v souboru chap-secrets:
user1 pptpd NejakeSilneHeslo1 * user2 pptpd NejakeSilneHeslo2 *
Pozn. 1: Přes jednoho PPTP uživatele se může připojit více zařízení (není to jeden uživatel per jedno zařízení).
Pozn. 2: Jelikož PPTP protokol již byl prolomený, doporučuji vygenerovat co nejsilnější heslo (aspoň 16místné heslo v kombinaci s velkými a malými symboly a čísly)
4. Vytvoření PPTP subnetu:
Vytvoření VPN subnetu pro PPTP uživatele se provede v /etc/pptpd.conf souboru:
sudo vi /etc/pptpd.conf
a přidat následující řádky. Parametr localip IP adresu PPTP VPN serveru. Parametr remoteip definuje PPTP VPN IP adresy pro připojené uživatele:
localip 192.168.89.1 remoteip 192.168.89.100-200
5. Povolení forwardingu a NAT (MASQUERADE):
Aby mohl být klientský VPN provoz směrován do internetu je potřeba v souboru sysctl.conf zapnout směrování IPv4 paketů:
sudo vi /etc/sysctl.conf
V souboru sysctl.conf odkomentovat následující řádek:
net.ipv4.ip_forward=1
Aby se aplikovaly změny v souboru sysctl.conf a následně i po restartu Ubuntu serveru, provést příkaz níže:
sudo sysctl -p
Aby došlo ke správnému routingu mezi VPN klienty a internetem, je potřeba upravit soubor přidat pravidlo iptables níže. Toto NAT pravidlo nastavuje, že všechny pakety, co přijdou z jakoukoliv se zdrojovou IP adresou se budou překládat (maskovat) na adresu odchozího rozhraní (v tomto případě na IP adresu z rozhraní enp0s3.:
sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
Aby se výše uvedené pravidlo iptables pro NAT nahodilo po rebootu je potřeba jej přidat do rc.local souboru, který slouží ke spouštění příkazů při startu systému:
sudo vi /etc/rc.local
Do souboru rc.local dopsat:
#!/bin/bash iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
Je nutné povolit práva pro spouštění po restartu:
chmod 744 /etc/rc.local
6. Konfigurace UFW a Forward policy:
Přeskočit tento bod, pokud není nakonfigurovaný UFW, což lze zjistit příkazem sudo ufw status.
Pokud je nakonfigurovaný firewall, je nutné povolit provoz TCP/1723 a protokol GRE (pro připojení z jakékoliv zdrojové IP adresy):
sudo ufw allow proto gre from 0.0.0.0/0 sudo ufw allow 1723/tcp
Proto by mohly být defaultně forwardovány všechny pakety mezi síťovými rozhraními Ubuntu je nutné povolit Default Forward Policy na Accept. [2] Přejít do /etc/default/ufw souboru:
sudo vi /etc/default/ufw
a přepsat DEFAULT_FORWARD_POLICY=”DROP” na DEFAULT_FORWARD_POLICY=”ACCEPT”:
DEFAULT_FORWARD_POLICY=”ACCEPT”
Pro aktivaci konfigurace v before.rules provést UFW restart. Tímto nedojde k aktivaci UFW ale pouze k načtení provedené konfigurace. Díky tomu se konfigurace neztratí ani po rebootu Ubuntu serveru:
sudo service ufw restart
7. Nastartování PPTP serveru:
Restartovat PPTP process:
sudo service pptpd restart
Aby se PPTP server aktivoval po rebootu Ubuntu aplikovat příkaz níže:
sudo systemctl enable pptpd
Volitelně – Povolení L2 Broadcastu mezi sítěmi:
Pokud je potřeba aby fungoval broadcast mezi PPTP VPN sítí (PPTP uživateli) a uživateli na domácí síti, je potřeba povolit parametr bcrelay (broadcast relay) v souboru pptpd.conf:
Otevřít /etc/pptpd.conf soubor.
sudo vi /etc/pptpd.conf
odkomentovat parametr bcrelay, který povoluje zasílání broadcast zpráv mezi PPTP VPN klienty a domácí síti a dopsat za něj jméno rozhraní na Ubuntu serveru (v tomto případě se jedná o síťové rozhraní enp0s3). Síťové rozhraní lze zjistit z výpisu ip a.
bcrelay enp0s3
Pozn. Jelikož testujeme hry na LAN párty, tak v praxi jsem tento parametr bcrelay potřeboval mít nastavený abych viděl vytvořenou hru na LAN síti jako bych byl s oběma počítači na domácí síti.
Důležité upozornění: Aby šel broadcast vidět, musí být všichni účastníci připojení na PPTP VPN serveru. Metrika na síťovém PPTP rozhraní musí být menší než na ethernetovém či WiFi rozhraní daného PPTP klienta. V praxi stačilo manuálně nastavit metriku na 1 na PPTP síťovém rozhraní. Při změně metriky je nutné se opětovně přihlásit k PPTP serveru. Kliknout zde pro nastavení metriky pro Windows na PPTP rozhraní. Při jakýchkoli problémech restartovat PPTP process na Ubuntu serveru. Konfigurace byla vyzkoušena na WIN 10 a WIN 11.
Nakonec restartovat PPTP process (pokud jsou nějací PPTP klienti již připojení tak dojde k jejich odpojení):
sudo service pptpd restart
Hotovo. Konfigurace PPTP VPN serveru proběhla úspěšně.
Logy:
cat /var/log/syslog | grep pptp
Ověření funkce PPTP serveru:
sudo service pptpd status
Výpis příkazu sudo service pptpd status:
● pptpd.service - PoPToP Point to Point Tunneling Server Loaded: loaded (/lib/systemd/system/pptpd.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-07-03 15:05:21 UTC; 4s ago Docs: man:pptpd(8) man:pptpctrl(8) man:pptpd.conf(5) Main PID: 3481 (pptpd) Tasks: 1 (limit: 1033) Memory: 392.0K CPU: 1ms CGroup: /system.slice/pptpd.service └─3481 /usr/sbin/pptpd --fg
Alternativní ověření:
ps -A | grep pptpd
Výpis příkazu ps -A | grep pptpd:
3481 ? 00:00:00 pptpd
Ověření připojení PPTP klientů k PPTP serveru:
Všechny aktuální připojené PPTP klienty na PPTP server lze vidět z výpisu
ip a
Částečný výstup příkazu ip a, ukazuje, že je připojený jeden PPTP client:
15: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1396 qdisc fq_codel state UNKNOWN group default qlen 3 link/ppp inet 192.168.89.1 peer 192.168.89.100/32 scope global ppp0 valid_lft forever preferred_lft forever
Datum a čas připojení a odpojení (od – do) jednotlivých PPTP uživatelů s jejich veřejnými IP adresami, lze zjistit příkazem níže:
last | grep ppp
Výpis last | grep ppp příkazu:
user1 ppp0 62.24.64.78 Sun Jul 3 15:51 gone - no logout user1 ppp0 31.84.87.94 Sun Jul 3 15:05 - 15:42 (00:37)
Řešení problémů:
1) Chyba „Cannot determine ethernet address for proxy ARP“
Při výpisu service pptpd status (částečný výpis) se zobrazí hláška:
Jul 03 15:05:36 ubuntu22 pppd[3487]: Cannot determine ethernet address for proxy ARP
Řešení problému:
Při testování PPTP různými způsoby se ukázalo, že hláška nic neafektuje.
Zdroj:
[1] https://www.linuxbabe.com/linux-server/setup-your-own-pptp-vpn-server-on-debian-ubuntu-centos
[2] https://www.snel.com/support/how-you-should-set-up-a-vpn-with-pptp/
Další články:
Článek, jak nakonfigurovat StrongSwan VPN serveru na Ubuntu 20.04.