X

A WiFi-s féreglyuk – rPi3 és OpenVPN

A minap szükségem volt egy megoldásra, amikor is VPN segítségével kellett elérnem tartalmat több eszköz számára, wifin keresztül. Némi töprengés után arra jutottam, hogy erre a fiókban lévő, éppen használaton kívül lévő raspberryPi 3-asom (model b) lesz a legmegfelelőbb eszköz.

Amire szükség volt, hogy pár eszköz (laptop, telefon) és egy Google Chromecast is képes legyen VPN-en keresztüli hálózatra csatlakozni. Mindezt úgy, hogy a router nem képes VPN szerverként üzemelni, valamint a megoldásnak kvázi mobilnak is kell lennie, tehát egyik lakásból a másikba is gond nélkül lehessen vinni és használni.

Kis kutakodás után végül összeállt a megoldás… Alább a lépésenkénti útmutató, amihez nem árt egy minimális Linux CLI jártasság.

Amikor ezt a bejegyzést írom, a legfrissebb Raspberry Pi OS Lite-ot használom, ami jelenleg a következő:

Release date: January 11th 2021
Kernel version: 5.4

Image letöltés innen

A kedvenc, platformfüggetlen flash-elő szoftverem a balenaEtcher. Ezt csak letölti az ember, telepíteni sem kell windows-on, csak futtatni. 3 kattintás és már az SD kártyán is van a Pi OS.

Ez után a rPi-t vezetékes hálózathoz csatlakoztatjuk (router, switch, stb.), majd indulhat a móka…

A konfigurálási folyamatban a hálózati IP címet a 192.168.1.XXX.1 formában fogom megadni, ahol az XXX tetszőlegesen lehet bármi 1 és 254 között. Fontos, hogy figyeljünk arra, hogy semmiképpen se adjuk meg azt az IP címet, ami a vezetékes hálózaté. Tehát mindenképpen egy olyan számot válasszünk, ami még nem foglalt a többi hálózatunk esetén.

Miután elindult és magához tért a frissen telepített rPi-nk, bejelentkezünk és az alábbi lépéseket végrehajtjuk:

  • Engedélyezzük az SSH-h,
  • a felbontást 1024×768-ra állítjuk,
  • beállítjuk a host nevet
sudo raspi-config

Frissítjük a rendszert, hogy minden csomag naprakész legyen, majd újraindítjuk:

sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y && sudo apt autoremove -y
sudo systemctl reboot

Telepítjük a nano, mc és hostapd csomagokat

sudo apt install nano mc hostapd

Engedélyezzük a hostapd (AP daemon)

sudo systemctl unmask hostapd
sudo systemctl enable hostapd

Telepítjük a dnsmasq csomagot

sudo apt install dnsmasq -y

Beállítjuk a DHCP-t. Ehhez szerkesztjük a config file-t

sudo nano /etc/dhcpcd.conf

És beillesztjük az alábbit blokkot, átírjuk az XXX-et a általunk választott számra, majd elmentjük és kilépünk

interface wlan0
static ip_address=192.168.XXX.1/24
static routers=192.168.XXX.1
static domain_name_servers=1.1.1.1 8.8.8.8
nohook wpa_supplicant

Szerkesztjük a sysctl config file-t

sudo nano /etc/sysctl.conf

Megkeressük és kiszedjük a kommentet a következő sor elől, majd mentjük és kilépünk

net.ipv4.ip_forward=1

Életbe léptetjük a változtatást

sudo sysctl -p /etc/sysctl.conf

Szerkesztjük a dnsmasq config file-t

sudo nano /etc/dnsmasq.conf

Hozzáadjuk a következő blokkot, átírjuk az XXX-et a általunk választott számra, majd mentjük és kilépünk

interface=wlan0
dhcp-range=192.168.XXX.50,192.168.XXX.80,255.255.255.0,24h
#domain=wlan
#address=/gw.wlan/192.168.XXX.1

Szerkesztjük a hostapd config file-t

sudo nano /etc/hostapd/hostapd.conf

Hozzáadjuk a következő blokkot, majd menjük és kilépünk. Értelemszerűen az <SSID> és <PASSWORD> helyett a kívánt SSID-t és jelszót adjuk meg.

interface=wlan0
ssid=<SSID>
hw_mode=g
channel=7
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=<PASSWORD>
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Bekapcsoljuk a wifi-t

sudo rfkill unblock wlan

Ellenőrizzük, hogy működik-e a hálózat, majd újraindítjuk

ip a
sudo systemctl reboot

Újraindítás után a wifi access point-nak már látszódnia kell, ha megnézzük a környezetünkben elérhető SSID-ket. Csatlakozni tudunk már rá, de persze internet még nincs rajta értelemszerűen… Ahhoz még kell némi konfiguráció.

Telepítsük az OpenVPN klienst

sudo apt install openvpn -y

Hozzuk létre a login file-t

sudo nano /etc/openvpn/login.txt

Adjuk meg két sorban a belépési adatainkat a VPN-hez. Az első sorban a username, a másodikban pedig a jelszó. Mentük és lépjünk ki.

Állítsuk be a szükséges jogokat a file-ra

sudo chmod 600 /etc/openvpn/login.txt

Hozzuk létre a VPN csatlakozáshoz szükséges config file-t

sudo nano /etc/openvpn/vpn_client_config.ovpn

Majd másoljuk be a kapott konfigurációs file tartalmát, mentsük és lépjünk ki.

Hozzunk létre egy shell script-et a home könyvtárban

nano /home/pi/vpn.sh

Majd másoljuk be a következő blokkot, átírjuk az XXX-et a általunk választott számra, majd mentsük és lépjünk ki

#!/bin/bash

sudo openvpn --config /etc/openvpn/vpn_client_config.ovpn --auth-user-pass /etc/openvpn/login.txt --daemon

sudo iptables -F
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT

sudo iptables -A OUTPUT -o tun0 -m comment --comment "vpn" -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -p icmp -m comment --comment "icmp" -j ACCEPT
sudo iptables -A OUTPUT -o wlan0 -p icmp -m comment --comment "icmp" -j ACCEPT
sudo iptables -A OUTPUT -d 192.168.XXX.0/24 -o wlan0 -m comment --comment "wlan" -j ACCEPT
sudo iptables -A OUTPUT -o wlan0 -p udp -m udp --dport 19478 -m comment --comment "allow vpn traffic" -j ACCEPT
sudo iptables -A OUTPUT -o wlan0 -p udp -m udp --dport 123 -m comment --comment "ntp" -j ACCEPT
sudo iptables -A OUTPUT -p tcp -d [VPN szerver IP címe] --dport 443 -m comment --comment "VPN server IP" -j ACCEPT
sudo iptables -A OUTPUT -o wlan0 -j DROP
sudo iptables -I FORWARD -i wlan0 ! -o tun0 -j DROP

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Állítsuk be a futtatási jogot a file-ra

chmod +x /home/pi/vpn.sh

Hozzunk létre egy crontab bejezést

crontab -e

Ahol adjuk meg a következőt, majd mentsük és lépjünk ki

@reboot /home/pi/vpn.sh

Végül indítsuk újra a rendszert

sudo systemctl reboot

Amikor a reboot megtörtént és az rPi ismét magához tért, akkor ha eddig mindent jól csináltunk és a VPN config file is megfelelő, akkor mindennek működnie kell. Látnunk kell a SSID-t, amire ha rácsatlakozunk, akkor az internet kapcsolatnak működnie kell és ha ezen a wifi-n keresztül szörfölünk, akkor a távoli, VPN túloldalán lévő hálózat internet kapcsolatát/átjáróját használva szörfölünk éppen. Ezt leellenőrizni például egy geolokációs IP ellenőrzéssel tudjuk, mondjuk a https://www.iplocation.net/ oldalon.

Referenciák:

  • https://zone13.io/post/raspberry-pi-vpn-gateway-for-nordvpn/
  • https://www.iottrends.tech/blog/diy-raspberry-pi-based-portable-vpn-wifi-hotspot/
  • https://thepi.io/how-to-use-your-raspberry-pi-as-a-vpn-router/
  • https://thepi.io/how-to-use-your-raspberry-pi-as-a-wireless-access-point/
  • https://medium.com/swlh/make-a-hotspot-of-raspberry-pi-while-using-a-vpn-e8f6620c1ab9
  • https://phoenixnap.com/kb/crontab-reboot

 

Hasonló cikkek

Az új otthoni hálózati főnök – TP-Link MR600... Még 2013 májusában, tehát kicsivel több, mint 7 évvel ezelőtt vettem meg az akkori egyik legstabilabb és legközkedveltebb wifi-s routert, a TP-Link TL...
TP-Link Archer C7 OpenVPN probléma Van egy TP-Link Archer C7 (v5) router is az arzenálban, amin szerettem volna beállítani az OpenVPN szervert úgy, mint az MR600-ason. A felület ugyan a...
MucsaPlex, avagy Plex szerver RaspberryPi 3-on Csak a kíváncsiság kedvéért összeraktam egy rPi3-as Plex szervert, mivel kíváncsi voltam, hogy hogyan muzsikál egy ilyen jószág a rettegett erőforrási...
Sas Sam:
Related Post