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
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