Konfiguracja tunelu PPTP w środowisku Linux (Debian, Mint, Ubuntu)
Opracowane na podstawie: https://wiki.archlinux.org/index.php/PPTP_Client
Instalacja oprogramowania klienckiego do obsługi PPTP:
root@debian_lx ~ # apt-get install pptp-linux
Konfiguracja tunelu z użyciem komendy: pptpsetup
Dodawanie (konfigurowanie) tunelu:
root@debian_lx ~ # pptpsetup --create hamnet_tunnel --server gw.hamnet.pl --username sp6xx-miasto --password H4Sl0!123 --encrypt lub: root@debian_lx ~ # pptpsetup --create hamnet_tunnel --server 176.121.81.54 --username sp6xx-miasto --password H4Sl0!123 --encrypt
Usuwanie istniejącej konfiguracji tunelu:
root@debian_lx ~ # pptpsetup --delete hamnet_tunnel
Konfiguracja routingu
Po dodaniu tunelu konieczne jest dodanie routingu domyślnego, który będzie ustawiany w chwilę po zestawieniu połączenia PPTP:
Ustawiamy routing do sieci 44.128.0.0/10 poprzez zestawiony tunel. Należy stworzyć plik: /etc/ppp/ip-up.d/routes
oraz skopiować do niego poniższą zawartość:
#!/bin/bash # This script is called with the following arguments: # Arg Name # $1 Interface name # $2 The tty # $3 The link speed # $4 Local IP number # $5 Peer IP number # $6 Optional ``ipparam'' value foo /bin/ip r a 44.128.0.0/10 via $4
Po zapisaniu pliku należy ustawić na nim flagę: 'x' która pozwoli na uruchomienie skryptu.
root@debian_lx ~ # chmod +rx /etc/ppp/ip-up.d/routes
Testowe uruchomienie tunelu
W celu przetestowania konfiguracji, uruchamiamy:
root@debian_lx ~ # pon hamnet_tunnel debug dump logfd 2 nodetach
Jeżeli wszystko jest ok, połączenie zostanie zestawione, a sama komenda nie zakończy działania, wychodząc do wiersza poleceń.
Weryfikacja pracy tunelu
W celu sprawdzenia zestawionego tunelu, używając innego terminalu wykonujemy komendę:
root@debian_lx ~ # ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:44.132.96.6 P-t-P:44.132.96.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1446 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:19 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:74 (74.0 B) TX bytes:1354 (1.3 KB)
Adres 44.132.96.1 jest w tym przypadku adresem IP po drugiej (zdalnej) stronie zestawionego tunelu. Możemy go użyc, aby przetestować zestawiony tunel przy pomocy komendy ping:
root@debian_lx ~ # ping 44.132.96.1 PING 44.132.96.1 (44.132.96.1) 56(84) bytes of data. 64 bytes from 44.132.96.1: icmp_seq=1 ttl=64 time=41.2 ms 64 bytes from 44.132.96.1: icmp_seq=2 ttl=64 time=42.3 ms 64 bytes from 44.132.96.1: icmp_seq=3 ttl=64 time=41.3 ms ^C --- 44.132.96.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 41.274/41.667/42.331/0.527 ms
Działanie komendy ping, przerywamy poprzez CTRL+c. Podobnie, zatrzymujemy uruchomiony wcześniej tunel w trybie DEBUG.
Jeżeli tunel został zestawiony pomyślnie, możemy go teraz uruchomić bez opcji debug, tak aby pracował w tle:
Testowy (Ręczny) start oraz zatrzymanie pracy klienta PPTP
Uruchomienie:
root@debian_lx ~ # pon hamnet_tunnel
Zatrzymanie
root@debian_lx ~ # poff hamnet_tunnel
Ważne jest także, by zwrócić uwagę, czy nasza wcześniej zdefiniowana reguła routingu została także prawidłowo dodana. W tablicy routingu powinna istnieć reguła podobna do poniższej:
root@debian_lx ~ # ip r l | grep 44.0.0.0 44.128.0.0/10 via 44.132.96.6 dev ppp0
Automatyczny start klienta PPTP wraz ze startem systemu.
Aby tunel uruchamiał się automatycznie, wraz ze startem systemu, w przypadku systemow z systemd, najprościej jest stworzyć plik w poniższej lokalizacji:
# cat /etc/systemd/system/pptp.service [Unit] Description=HamNet Tunnel Requires=network-online.target After=network.target [Service] Type=forking Restart=always Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ExecStartPre=/bin/sleep 10 ExecStart=/usr/bin/pon hamnet_tunnel ExecStop=/usr/bin/poff hamnet_tunnel [Install] WantedBy=multi-user.target
Po stworzeniu pliku, dokonujemy jego włączenia oraz uruchomienia usługi:
# systemctl enable pptp.service # systemctl start pptp.service
Odczekujemy chwilę aby tunel PPTP zdążył się zestawić i sprawdzamy status:
# systemctl status pptp.service ● pptp.service - My Service Loaded: loaded (/etc/systemd/system/pptp.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2019-02-24 23:48:34 GMT; 8min ago Process: 1451 ExecStart=/usr/bin/pon hamnet_tunnel (code=exited, status=0/SUCCESS) Main PID: 1452 (pppd) Tasks: 4 (limit: 4915) CGroup: /system.slice/pptp.service ├─1452 /usr/sbin/pppd call hamnet_tunnel ├─1453 sh -c pptp 213.108.12.174 --nolaunchpppd ├─1455 pptp 213.108.12.174 --nolaunchpppd └─1467 pptp 213.108.12.174 --nolaunchpppd Feb 24 23:48:36 debian_lx pppd[1452]: local IP address 44.132.96.6 Feb 24 23:48:36 debian_lx pppd[1452]: remote IP address 44.132.96.1 Feb 24 23:49:35 debian_lx pptp[1467]: anon log[logecho:pptp_ctrl.c:719]: Echo Reply received. Feb 24 23:50:35 debian_lx pptp[1467]: anon log[logecho:pptp_ctrl.c:719]: Echo Reply received. Feb 24 23:51:35 debian_lx pptp[1467]: anon log[logecho:pptp_ctrl.c:719]: Echo Reply received.
Użycie powyższego rozwiązania jest o tyle praktyczne, że systemd będzie pilnował aby proces pptp pracował nieustannie. W wypadku zerwania połączenia, lub też przypadkowego usunięcia procesu spowoduje jego ponowne uruchomienie i zestawienie tunelu.
Start klienta PPTP w systemach bez systemd
W przypadku starszych wersji systemu możemy użyć do uruchomienia tunelu wpisu w pliku /etc/rc.local
sleep 20 && /usr/bin/pon hamnet_tunnel &
Warto zweryfikować czy aby na pewno "/usr/bin/pon" jest właściwą lokalizacją, uruchamiając:
# ls -l /usr/bin/pon -rwxr-xr-x 1 root root 1362 Dec 4 2015 /usr/bin/pon
Informacje dodatkowe o plikach konfiguracyjnych
Powyższy opis bazuje na komendzie pptpsetup, która automatycznie konfiguruje tunel PPTP. Możliwe jest także przeprowadzanie ręcznych zmian lub też sprawdzenia wygenerowanej konfiguracji. Poniżej opisane pliki zawierają informacje konieczne do działania tunelu, które powinny zostać automatycznie skonfigurowane:
root@debian_lx ~ # grep -v ^# /etc/ppp/options.pptp lock noauth refuse-pap refuse-eap refuse-chap refuse-mschap nobsdcomp nodeflate
Nazwa użytkownika, nazwa tunelu oraz hasło:
root@debian_lx ~ # grep -v ^# /etc/ppp/chap-secrets sp6xx-miasto hamnet_tunnel "H4Sl0!123" *
Ważne, aby plik zawierający hasło miał ustawione flagi protekcji w następujący sposób:
root@debian_lx ~ # chmod 0600 /etc/ppp/chap-secrets
Adres bramy do zestawienia połączenia PPTP:
root@debian_lx ~ # cat /etc/ppp/peers/hamnet_tunnel # written by pptpsetup pty "pptp 213.108.12.174 --nolaunchpppd" lock noauth nobsdcomp nodeflate name sp6xx-miasto remotename hamnet_tunnel ipparam hamnet_tunnel require-mppe-128
Włączenie forwardowania pakietów pomiędzy interfejsami.
W celu włączenia forwardowania pakietów (pracy kernela jako router) konieczne jest włączenie wpisu w pliku konfiguracyjnym:
Domyślnie opcja uruchamiająca forward pomiędzy interfejsami jest wykomentowana:
# grep ip_forward /etc/sysctl.d/99-sysctl.conf #net.ipv4.ip_forward=1
Należy usunąć znak '#' poprzedzający powyższą linię, oraz przeładować zmiany:
# nano /etc/sysctl.d/99-sysctl.conf ctrl+x
Przeładować zmiany, oraz sprawdzić aktywne wartość. (powinno być to: 1)
# sysctl --system # cat /proc/sys/net/ipv4/ip_forward 1
Konfiguracja podsieci HamNET
W przypadku systemu Debian oraz pochodnych (ubuntu, mint, etc), statyczna konfiguracja interfejsów znajduje sie w katalogu "/etc/network/interfaces.d/". Wystarczy umieścić w nim plik konfiguracyjny dla przydzielonej podsieci:
# cat /etc/network/interfaces.d/enp0s8 auto enp0s8 iface enp0s8 inet static address 44.132.20.1 netmask 255.255.255.224
Restart systemu lub też ręczna aktywacja interfejsu powinna zakończyć proces konfiguracji:
# ifup enp0s8 # ip a s enp0s8 3: enp0s8:mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:d7:75:3c brd ff:ff:ff:ff:ff:ff inet 44.132.20.1/27 brd 44.132.12.31 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fed7:753c/64 scope link valid_lft forever preferred_lft forever
Konfiguracja urządzenia końcowego.
Ostatnim krokiem powinno być skonfigurowanie urządzenia klienckiego podłączonego do nowo skonfigurowanego interfejsu:
W przypadku zastosowania powyżej rozpatrywanej podsieci, klient (komputer lub urządzenie sieciowe) mogłby otrzymać następujące ustawienia:
- IP: 44.132.20.2
- Maska: 255.255.255.224 lub /27
- Brama: 44.132.20.1