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 ‘updateresolvconf’ 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 😉 .