Mijn dochter gebruikt Private Internet Access (PIA) om Amerikaanse Netflix te kijken op haar smartphone en laptop. Ze vertelde echter dat ze dan niet kon casten naar haar Chromecast en soms is kijken op een groter TV scherm toch wel fijner. Netflix heeft namelijk allerlei maatregelen getroffen om dit te voorkomen als je gebruik maakt van een VPN-truc.
Om dit op te lossen moet je de Chromecast verbinding laten maken met dezelfde verbinding als je VPN connectie op je smartphone en/of laptop. Ik heb dit opgelost door van een Raspberry Pi een Wi-Fi hotspot te maken, waarbij de internet verbinding via een VPN verbinding loopt.
In deze blog leg ik uit hoe ik voor elkaar heb gekregen. In mijn stappen hieronder maak ik gebruik van Private Internet Access (PIA) als VPN provider.
Raspbian
Als eerste heb ik de lite versie van Raspbian gedownload vanaf deze lokatie en met Win32DiskImager naar een SD kaart geschreven.
Vanuit veiligheidsoogpunt staat in de laatste versie van Raspbian SSH standaard uitgeschakeld. Hierdoor kun je niet remote inloggen met Putty. Dit is eenvoudig op te lossen door, nadat je image hebt gezet op je SD kaart, een leeg bestand met de naam ‘ssh’ te zetten in de boot partitie (de eerste drive-letter van je SD kaart).
Stop het SD kaartje in je Raspberry PI en sluit de USB power aan. Met behulp van je router kun je kijken welk IP-adres je Raspberry Pi heeft gekregen via DHCP. Hierna kun je met Putty inloggen op je Raspberry PI met user-naam ‘pi’ en wachtwoord ‘raspberry’. Vergeet niet je standaard paswoord te veranderen met het commando ‘passwd’.
Update de Raspberry Pi naar de laatste software:
sudo apt-get update sudo apt-get upgrade sudo rpi-update sudo reboot
Eventueel kun je hierna met ‘sudo raspi-config’ nog instellingen plegen naar jouw inzicht (host-name, lokalisatie en Advanced/Expand Filesystem).
Ook is het handig dat je Samba installeert zodat je eventueel altijd met een browser je files op je Raspberry Pi kunt benaderen:
sudo apt-get install samba samba-common-bin sudo useradd some_user_name sudo smbpasswd -a some_user_name
Voeg nu de volgende regels toe aan de file ‘/etc/samba/smb.conf’
[Root] browseable = yes writeable = yes path = / revalidate = yes comment = Share to Root valid users = some_user_name available = yes
Restart je samba service met het volgende commando:
sudo /etc/init.d/smbd restart
We hebben nu dus een werkend Operating Systeem op de SD kaart van een Raspberry PI staan.
Wi-Fi Hotspot
Om een Wi-Fi Hotpost op te zetten heb je ‘hostapd’ (hotspot) en ‘dnsmasq’ (DHCP, DNS) nodig. Installeer deze twee packages met de commando’s:
sudo apt-get install hostapd sudo apt-get install dnsmasq
Aangezien we nogal wat aanpassingen gaan verrichten is het beste om de twee packages na installatie even te stoppen:
sudo systemctl stop hostapd sudo systemctl stop dnsmasq
Configureer static IP adres voor eth0 / wlan0 interfaces
Hiervoor assign je een vast IP-adres aan je eth0 en wlan0 interface. Edit hiervoor de file ‘/etc/dhcpcd.conf’
sudo nano /etc/dhcpcd.conf
Voeg de volgende regels toe aan deze file:
interface eth0 static ip_address=192.168.1.72 static routers=192.168.1.1 static domain_name_servers=1.1.1.1 interface wlan0 static ip_address=192.168.0.10/24 denyinterfaces eth0
Configureer DHCP server
Als iemand met jouw Wi-Fi hotspot verbind dan moet deze natuurlijk een IP-adres krijgen. Je moet hiervoor de file ‘/etc/dnsmasq.conf’ aanpassen.
sudo nano /etc/dnsmasq.conf
Verander de ‘resolv-file’ entry als volgt (de file ’tun0.openvpn’ wordt straks in OpenVPN met het ‘update–resolv–conf’ script gevuld bij het maken van een VPN verbinding):
resolv-file=/var/run/resolvconf/interfaces/tun0.openvpn
Voeg de volgende regels toe aan deze file:
interface=wlan0 dhcp-range=192.168.0.11,192.168.0.30,255.255.255.0,24h
Configureer Hotspot
Hiervoor gebruik je de file ‘/etc/hostapd/hostapd.conf’.
sudo nano /etc/hostapd/hostapd.conf
Voeg de volgende regels toe aan deze file:
interface=wlan0 hw_mode=g channel=7 wmm_enabled=0 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP ssid=NETWERK wpa_passphrase=WACHTWOORD
Kies voor NETWERK en WACHTWOORD je eigen waardes.
Nu moet je voor je Hotspot nog aangeven waar zijn configuratie file staat. Dit doe je in file ‘/etc/default/hostapd’
sudo nano /etc/default/hostapd
Zet in deze file de volgende regel:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Private Internet Access VPN
Installeer OpenVPN met commando:
sudo apt-get install openvpn
Haal de profielen van Private Internet Access (PIA) op voor je OpenVPN verbinding:
wget https://www.privateinternetaccess.com/openvpn/openvpn.zip sudo apt-get install unzip unzip openvpn.zip -d openvpn
Kies nu het PIA profiel waarvoor je een WiFi Hotspot wilt opzetten (ik kies hieronder USA / New-York):
sudo cp openvpn/ca.rsa.2048.crt openvpn/crl.rsa.2048.pem /etc/openvpn/ sudo cp openvpn/US\ New\ York\ City.ovpn /etc/openvpn/US.conf
Creëer file ‘/etc/openvpn/login’ die je gebruikersnaam en wachtwoord bevat van je PIA:
Gebruikersnaam Wachtwoord
Verander de permissies van deze file zodat alleen de root gebruiker deze kan lezen:
sudo chmod 600 /etc/openvpn/login
Stel nu OpenVPN zo in dat deze standaard bovenstaande file gebruikt om in te loggen.
sudo nano /etc/openvpn/US.conf
Verander de volgende regel van:
auth-user-pass
naar
auth-user-pass /etc/openvpn/login
Voeg verder de volgende regels toe:
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Je kunt nu controleren of je VPN verbinding daadwerkelijk werkt:
sudo openvpn --config /etc/openvpn/US.conf
Hierbij zou de output ongeveer het volgende moeten zijn:
Fri Jul 10 14:04:09 2020 OpenVPN 2.4.7 arm-unknown-linux-gnueabihf [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019 Fri Jul 10 14:04:09 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10 Fri Jul 10 14:04:09 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]107.182.230.194:1198 Fri Jul 10 14:04:09 2020 UDP link local: (not bound) Fri Jul 10 14:04:09 2020 UDP link remote: [AF_INET]107.182.230.194:1198 Fri Jul 10 14:04:09 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this Fri Jul 10 14:04:10 2020 [ae3adc1e63e163a8933ba9177f6220c5] Peer Connection Initiated with [AF_INET]107.182.230.194:1198 Fri Jul 10 14:04:11 2020 TUN/TAP device tun0 opened Fri Jul 10 14:04:11 2020 /sbin/ip link set dev tun0 up mtu 1500 Fri Jul 10 14:04:11 2020 /sbin/ip addr add dev tun0 local 10.32.10.6 peer 10.32.10.5 Fri Jul 10 14:04:11 2020 Initialization Sequence Completed
Je wilt dat deze verbinding voortaan automatisch wordt opgezet bij elke herstart van je Raspberry Pi. Enable VPN tijdens startup met:
sudo systemctl enable openvpn@US
Nu moet je nog wat aan routering doen. Als eerste moet je IP forwarding aanzetten met de volgende commando’s:
echo -e '\n#Enable IP Routing\nnet.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p
Tenslotte moet je NAT voor je verkeer aanzetten van/naar je VPN tunnel. Ik gebruik hiervoor tun0 en eth0 (waarop internet binnenkomt).
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
Een zeer goede uitleg over iptables vind je hier.
Bovenstaande iptables moet je nog persistent maken. Gebruik hiervoor de ‘iptables-persistent’ en ‘netfilter-persistent’ packages. Installeer deze met:
sudo apt-get install iptables-persistent sudo apt-get install netfilter-persistent
Om de iptables persistent op te slaan geef je het volgende commando:
sudo netfilter-persistent save
Om de iptables regels toe te passen tijdens startup gebruik je het commando:
sudo systemctl enable netfilter-persistent
Blokkeren Chromecast DNS
De Chromecast heeft een hardcoded DNS setting naar Google die roet in het eten kan gooien. Daarom wil je deze ignoren. Dit doe je met de volgende iptables commando’s:
sudo iptables -I FORWARD --destination 8.8.8.8 -j REJECT sudo iptables -I FORWARD --destination 8.8.4.4 -j REJECT
Sla vervolgens de huidige iptables op met het commando:
sudo netfilter-persistent save
Reboot nu je Raspberry Pi:
sudo reboot
Tenslotte
Als laatste actie moet je je Chromecast opnieuw instellen. De Wi-Fi verbinding moet namelijk voortaan naar je nieuwe hotspot gaan waarop je VPN connectie draait.
Het enigste wat mijn dochter nu voortaan moet doen om de Chromecast met Netflix te gebruiken is op haar Smartphone verbinding maken met het nieuwe hotspot. Vervolgens kan ze dan content casten naar haar Chromecast. Kan ze eindelijk Grey’s Anatomy verder kijken, want die was er namelijk bij Videoland opeens afgegooid.
Tips
Ik had in het begin wat problemen met het activeren van het Access-Point. De volgende commando’s lostte dit voor mij op:
sudo systemctl unmask hostapd sudo systemctl enable hostapd sudo systemctl start hostapd
Een foutje is zo gemaakt als je met het ‘iptables’ commando bezig bent. Hieronder wat commando’s die je kunnen helpen.
Tonen huidige iptables instellingen
sudo iptables -L -n -v --line-numbers sudo iptables -t nat -L -n -v --line-numbers
Verwijderen iptables instellingen
Hieronder een aantal voorbeelden. Kies zelf welk type het is (b.v. FORWARD, POSTROUTING, etc.)
sudo iptables -D FORWARD <regel-nummer> sudo iptables -t nat -D POSTROUTING <regel-nummer>
Verwijderen alles instellingen m.b.t iptables
sudo iptables -F sudo iptables -t nat -F sudo iptables -t mangle -F sudo iptables -X
Om te controleren of je alles goed hebt gedaan kun je een zogenaamde ‘DNS leak test’ uitvoeren. Dit kun je op de volgende site doen:
https://www.dnsleaktest.com/
Je kunt hier tevens zien of je VPN zijn werk goed doet (je IP adres moet in het buitenland zijn en je DNS ook).
Mocht het onverhoopt na verloop van tijd niet meer werken, check dan even of er nieuwe profielen zijn voor OpenVPN en doorloop de betreffende stappen nogmaals.
Conclusie
Met een aantal simpele stappen kun je je Raspberry Pi omtoveren in een Wi-Fi Hotspot die onder water een specifieke VPN verbinding heeft. Door je Chromecast en je Smartphone met dit specifieke hotspot verbinding te laten maken kun je toch Amerikaanse Netflix via je Chromecast kijken. Bovenstaand verhaal lijkt simpel, maar ik moet eerlijkheidshalve wel zeggen dat ik het hele weekend bezig bent geweest om dit allemaal uit te zoeken 😉 .