Proxmox PPTP VPN server – instalace a konfigurace + L2 Broadcast

By | 19/08/2022

Last Updated on 25/08/2022 by administrator

Proxmox PPTP VPN server – instalace a konfigurace + L2 Broadcast

PROXMOX Instalace a konfigurace PPTP VPN serveru + L2 Broadcast.

Motivace:

Tento článek popisuje instalaci a konfiguraci na Proxmox 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.

Prerekvizita:

Před vytvořením PPTP VPN serveru je potřeba vytvořit nový kontejner. POZOR je potřeba vytvořit Privilegiovaný kontejner. O tom pojednává článek níže:

 

Proxmox Vytvoření Kontejneru (Proxmox Create container)

 

OS:

Implementace byla prakticky prováděna pod template ubuntu-22.04-standard_22.04-1_amd64.tar.zst

Implementace [1]:

Poté co je vytvořen nový PRIVILEGIOVANÝ kontejner na Proxmox, PPTP VPN server je možné konfigurovat postupem níže.

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í eth0):

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Aby se výše uvedené pravidlo iptables pro NAT nahodilo po rebootu je potřeba jej přidat do rc.local souboru:

sudo vi /etc/rc.local

Do souboru rc.local dopsat:

#!/bin/bash
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Je nutné povolit práva pro spouštění po restartu:

chmod 744 /etc/rc.local

Příkaz mknod vytvoří speciální soubor pro znakové zařízení (parametr c) s hlavním číslem 108 a vedlejším číslem 0 [3,4]:

mknod /dev/ppp c 108 0

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

8. Úprava souboru pod PVE [5]:

Připojit se k PVE (Proxmox Virtual Enviroment)

Bude předpokládáno, že LXC container, na kterém byla nainstalovaná služba PPTP je označený číslem 111. Přejít do souboru konfigurace pro LXC container 111:

vi /etc/pve/lxc/111.conf

V konfiguračním souboru přidat parametry níže:

lxc.cgroup2.devices.allow: c 108:0 rwm
lxc.mount.entry: /dev/ppp dev/ppp none bind,create=file

Odpojit se z PVE a přejít přímo do LXC containeru a provést reboot systému

reboot

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í eth0). Síťové rozhraní lze zjistit z výpisu ip a.

bcrelay eth0

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.

2) Chyba “mknod: /dev/ppp: Operation not permitted”

Řešení problému:

V tomto případě je nutné vytvořit nový LXC containter jako “Unprivileged container”

PROXMOX PPTP VPN

3) Chyba “Couldn’t open the /dev/ppp device: No such file or directory” and “You need to create the /dev/ppp device”

Při výpisu service pptpd status (částečný výpis) se zobrazí hláška:

Jul 19 19:34:38 pptp pppd[865]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Jul 19 19:34:38 pptp pppd[865]: Couldn't open the /dev/ppp device: No such file or directory
Jul 19 19:34:38 pptp pptpd[865]: /usr/sbin/pppd: You need to create the /dev/ppp device node by
Jul 19 19:34:38 pptp pptpd[865]: executing the following command as root:
Jul 19 19:34:38 pptp pptpd[865]: #011mknod /dev/ppp c 108 0
Jul 19 19:34:38 pptp pppd[865]: You need to create the /dev/ppp device node by#012executing the following command as root:#012#011mknod /dev/ppp c 108 0
Jul 19 19:34:38 pptp pptpd[864]: GRE: read(fd=6,buffer=56535d5be0a0,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Řešení problému:

Aplikovat příkaz níže pod rootem v LXC containeru:

mknod /dev/ppp c 108 0

4) Chyba “/usr/sbin/pppd: Sorry – this system lacks PPP kernel support”

Při ověření funkce PPTP serveru pomocí sudo service pptpd status se zobrazuje hláška níže:

Jul 19 19:36:23 pptp pppd[906]: Couldn't open the /dev/ppp device: Operation not permitted
Jul 19 19:36:23 pptp pptpd[906]: /usr/sbin/pppd: Sorry - this system lacks PPP kernel support
Jul 19 19:36:23 pptp pppd[906]: Sorry - this system lacks PPP kernel support
Jul 19 19:36:23 pptp pptpd[905]: GRE: read(fd=6,buffer=55b297f070a0,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Řešení problému [5]:

Připojit se k PVE (Proxmox Virtual Enviroment) a upravit konfiguraci LXC containeru na kterém běží PPTP služba.

Bude předpokládáno, že LXC container, na kterém byla nainstalovaná služba PPTP je označený číslem 111. Přejít do souboru konfigurace pro LXC container 111:

vi /etc/pve/lxc/111.conf

V souboru přidat parametry níže:

lxc.cgroup2.devices.allow: c 108:0 rwm
lxc.mount.entry: /dev/ppp dev/ppp none bind,create=file

Odpojit se z PVE a přejít přímo do LXC containeru a provést reboot systému

reboot

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/

[3] https://www.fi.muni.cz/~kas/p090/referaty/2002-podzim/skupina10/modemy.html

[4] https://www.prompt.cz/zarizeni-a-souborovy-system

[5] https://forum.proxmox.com/threads/pve-7-0-lxc-intel-quick-sync-passtrough-not-working-anymore.92025/

Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérký softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030

Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Leave a Reply

Your email address will not be published. Required fields are marked *