Een virtual private network (VPN) is een vertrouwde, veilige verbinding tussen een lokaal netwerk (LAN) en een ander netwerk. Denk aan uw router als de middelste man tussen de netwerken die je verbinding maakt. Zowel je computer en de OpenVPN server (de router in dit geval) “schudden handen met elkaar” met behulp van certificaten die elkaar valideren. Pas als bij de validatie zowel de client als de server het eens zijn en elkaar vertrouwen, zal de klant toegang krijgen op het netwerk van de server.
VPN software en hardware kost normaal gesproken erg veel geld om deze te deployen. OpenVPN is echter een open-source VPN-oplossing die helemaal gratis is! De Tomato Firmware, die OpenVPN Server ondersteuning heeft, is een perfecte oplossing voor iedereen die gratis een beveiligde verbinding tussen twee netwerken wilt opzetten. In deze blog leg ik uit hoe je OpenVPN opzet tussen je Router met Tomato firmware en je IOS device. Voor meer informatie over OpenVPN kun je het beste de officiële site van OpenVPN bezoeken.
Voor het creëren van de diverse keys gaan we eerst OpenVPN downloaden van de site van OpenVPN. In deze blog ga ik ervan uit dat je de 64-bit versie gebruikt.
Nadat je de software hebt geinstalleerd open je een DOS Command prompt als Administrator en ga je naar c:\Program Files\OpenVPN\easy-rsa en voer het init-config commando uit:
init-config
Open nu de files vars.bat in deze directory met een editor en pas KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, en KEY_EMAIL waarden aan en save de file.
Ga vervolgens weer naar de DOS Command prompt en typ de volgende commando’s:
vars clean-all build-ca
De meeste waarden kun je zo over nemen. Het is echter belangrijk dat je de ‘Common Name’ invult met een waarde. Kies hiervoor bijvoorbeeld je naam of hostnaam van je server.
Typ vervolgens het volgende commando in:build-key-server server
Je kunt hier de default waarden overnemen. Geef echter bij ‘Common Name’ de waarde “server” op. Geef verder “y” op bij de ‘Sign the certificate? [y/n]’ and ‘1 out of 1 certificate requests certified, commit? [y/n]’ vragen.
Op dezelfde manier gaan we nu nog certificaten voor de client aanmaken. Ook dit gebeurt in de DOS command prompt. Geef hiervoor het volgende commando op:build-key iPhone
Zorg er weer voor dat de parameter die je meegeeft ook als waarde gebruikt in ‘Common Name’.
Tenslotte moeten we nog de zogenaamde Diffie Hellman parameter file genereren met het volgende commando:build-dh
Hierna kun je de volgende files vinden in je ‘keys’ sub-directory:
Filenaam | Nodig door | Doel | Veilig |
---|---|---|---|
ca.crt | server + alle cliënten | Root CA certificaat | nee |
ca.key | key signing device | Root CA key | ja |
dh{n}.pem | server | Diffie Hellman parameters | nee |
server.crt | server | Server certificaat | nee |
server.key | server | Server key | ja |
iPhone.crt | iPhone client | iPhone certificaat | nee |
iPhone.key | iPhone client | iPhone key | ja |
"C:\Program Files\OpenVPN\bin\openvpn.exe" --pause-exit --verb 3 --genkey --secret "C:\Program Files\OpenVPN\config\key.txt"
Copieer nu de betreffende inhoud van de gegenereerde files (afhankelijk van je Authorization Mode) bij Tomato in de OpenVPN Server naar de Keys sectie volgens onderstaand overzicht:
Ik heb zelf voor Authorization Mode ‘TLS’ gekozen. Stel in dat geval in je Tomato firmware alles in volgens onderstaande screenshots: Van de betreffende file hoe je alleen maar het key/certificaat stuk over te nemen.Tenslotte moet je je OpenVPN server starten door op de [Start Now] button te drukken.
Nu moeten we de configuratie file voor de client gaan creëren. In de directory ‘C:\Program Files\OpenVPN\sample-config\’ kun je voorbeelden vinden. Copieer de file ‘client.ovpn’ naar ‘iPhone.ovpn’ en edit deze in een editor. Pas de waarden voor ‘dev’, ‘proto’, ‘remote’, ‘ca’, ‘cert’ en ‘key’ aan.
############################################## # Sample client-side OpenVPN 2.0 config file # # for connecting to multi-client server. # # # # This configuration can be used by multiple # # clients, however each client should have # # its own cert and key files. # # # # On Windows, you might want to rename this # # file so it has a .ovpn extension # ############################################## # Specify that we are a client and that we # will be pulling certain config file directives # from the server. client # Use the same setting as you are using on # the server. # On most systems, the VPN will not function # unless you partially or fully disable # the firewall for the TUN/TAP interface. ;dev tap dev tun # Windows needs the TAP-Win32 adapter name # from the Network Connections panel # if you have more than one. On XP SP2, # you may need to disable the firewall # for the TAP adapter. ;dev-node MyTap # Are we connecting to a TCP or # UDP server? Use the same setting as # on the server. ;proto tcp proto udp # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote eye-vision.homeip.net 1194 ;remote my-server-2 1194 # Choose a random host from the remote # list for load-balancing. Otherwise # try hosts in the order specified. ;remote-random # Keep trying indefinitely to resolve the # host name of the OpenVPN server. Very useful # on machines which are not permanently connected # to the internet such as laptops. resolv-retry infinite # Most clients don't need to bind to # a specific local port number. nobind # Downgrade privileges after initialization (non-Windows only) ;user nobody ;group nobody # Try to preserve some state across restarts. persist-key persist-tun # If you are connecting through an # HTTP proxy to reach the actual OpenVPN # server, put the proxy server/IP and # port number here. See the man page # if your proxy server requires # authentication. ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #] # Wireless networks often produce a lot # of duplicate packets. Set this flag # to silence duplicate packet warnings. ;mute-replay-warnings # SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. ca ca.crt cert iPhone.crt key iPhone.key # Verify server certificate by checking # that the certicate has the nsCertType # field set to "server". This is an # important precaution to protect against # a potential attack discussed here: # http://openvpn.net/howto.html#mitm # # To use this feature, you will need to generate # your server certificates with the nsCertType # field set to "server". The build-key-server # script in the easy-rsa folder will do this. ns-cert-type server # If a tls-auth key is used on the server # then every client must also have the key. ;tls-auth ta.key 1 # Select a cryptographic cipher. # If the cipher option is used on the server # then you must also specify it here. ;cipher x # Enable compression on the VPN link. # Don't enable this unless it is also # enabled in the server config file. comp-lzo # Set log file verbosity. verb 3 # Silence repeating messages ;mute 20
Installeer nu op je iPhone de OpenVPN App. Je moet ook nog de files ‘iPhone.ovpn’, ‘ca.crt’, ‘iPhone.crt’ en ‘iPhone.key’ op je iPhone krijgen. Dit doe je door in iTunes naar je Device te gaan en in de Apps tab OpenVPN te selecteren. Scroll vervolgens naar beneden en voeg deze files toe aan het File Sharing window. Synchroniseer tenslotte je iPhone met iTunes.
Start nu de OpenVPN applicatie op je iPhone. Je krijgt het volgende scherm te zien Druk op de [+] button om je profiel toe te voegen. Vervolgens kun je in het volgende scherm connecten met je OpenVPN server op je router met Tomato firmware. Op je iPhone zul je rechtsbovenaan het [VPN] teken zien ten teken dat je via een veilige VPN connectie verbinding maakt met je router thuis.
Hoi Henri,
Ik heb OpenVPN op mijn AC66U werkend gerkregen met de standaard firmware van Asus. Ook op mijn Iphone werkt het. Het enige dat mij opvalt, is dat ik het niet werkend krijg op mijn eigen WIFI. Via 3G werkt het wel.
Ziggo TV App werkt niet over 3G met VPN nu, terwijl met PPTP over 3G dit wel werkt bij mij.
Ga hier nog verder mee aan de slag en zal dit maandag op mijn werk op het WIFI gaan testen.
Gr. Cindy
Bedankt voor de update Cindy. Ik kan zowel met OpenVPN als PPTP via 3G de Ziggo TV App gebruiken hier. Ook ik kan niet via mijn eigen Wifi met OpenVPN connectie maken, maar op zich is dat wel logisch en heeft dat ook weinig zin ;-).
Inmiddels overal werkend gekregen. Bedankt.
Gr. Cindy
Overigens werkt het met de standaard firmware van Asus veel eenvoudiger. Je stelt deze in op Openvpn, past eventueel de instellingen aan en maakt users aan met wachtwoord, Daarna laat je het .ovpn bestand exporteren door de router naar je harddisk. Vervolgens kun je het bestand via mail of dropbox op je Iphone krijgen en inlezen in de app van Openvpn connect. Daarna Username en wachtwoord invullen en connecten. Super eenvoudig. 🙂
Bedankt voor de update over OpenVPN met de standaard firmware van Asus. Ik heb begrepen dat OpenVPN zeer recent is toegevoegd aan de Asus firmware. Zoals gezegd draai ik zelf nu Tomato firmware en heb dit dus niet gecontroleerd. Mijn methode is inderdaad gecompliceerder, maar wel de veiligste (TLS met certificaten). Er zijn meerdere mogelijkheden in OpenVPN en die andere heb ik niet behandeld.
Hoi Henri,
Ik heb nog eens gekeken naar de methode van de firmware van Asus, maar deze werkt ook met TLS met certificaten. Alleen worden deze door de router zelf aangemaakt en niet zoals bij jou eerst zelf gemaakt. Het enige verschil tussen jou methode en die van Asus zelf is, dat jij een autologin hebt gecreëerd en Asus nog om naam en wachtwoord vraagt. Tenminste voor zover ik het nu zie.
Gr. Cindy
Bedankt voor het checken en melden Cindy. In Tomato kun je ook gebruikersnaam/wachtwoord afdwingen in de OpenVPN ‘Advanced Settings’ met de optie ‘Allow User/Pass Auth’.
Hoi Henri,
In ben toch even gaan kijken naar het zelf maken van de certificaten zoals jij dit doet, maar hoe werkt dit als je meerdere gebruikers hebt? Met andere woorden, hoe kan ik er voor zorgen dat wij allemaal eventueel tegelijk toegang hebben tot de openvpn server met onze mobieltjes/ipad?
Je kunt voor iedere gebruiker (client) een uniek certificaat aanmaken met het build-key commando wat je dan vervolgens kunt gebruiken met je OpenVPN Client. Het onderscheid maak je m.b.v. de ‘Common Name’.
Hoi Henri, dank je wel voor de uitleg. Ik heb alles gedaan zoals jij hierboven aangaf. Echter krijg ik toch de melding TLS Auth Error: Auth Username/Password verification failed for peer.
Weet jij waar en hoe ik dit kan oplossen?
Tevens was mij je aanpassing van de *.ovpn niet helemaal duidelijk. Welke waarden moet je precies overal invullen, want als ik de sample client.ovpn ga bewerken, weet ik eigenlijk niet goed wat ik moet veranderen en wat niet om het werkend te krijgen.
Sorry voor alle vragen, maar ik wil het graag toch met eigen certificaten gaan opzetten, zoals jij hebt gedaan en niet met de standaard van Asus (lijkt met toch veiliger), maar ik loop nu helaas vast.
Alvast bedankt voor je reactie.
Dan doe je toch wat anders dan wat ik heb gedaan in de beschrijving van mijn blog en de screenshots ;-). Ik moet er wel bij zeggen dat ik op dit moment de optie ‘Allow User/Pass auth’ uit heb staan. Voor het aanpassen van de OVPN file moet je de waarden voor ‘dev’, ‘proto’, ‘remote’, ‘ca’, ‘cert’ en ‘key’ aanpassen. Je zou hierbij de inhoud van de file van mijn blog als basis kunnen gebruiken.
Hallo Henri,
Wat een fantastisch blog!
Ook ik heb een vraag aan jou.
OpenVPN app op mijn Iphone 5s is connected maar laat 4G ip adres zien op whatsmyip.
Wanneer ik via wifi connect zie ik mijn wan ip.
Heb jij enig idee?
Gr Rob
Je houdt natuurlijk altijd ook het IP adres waarmee je je internet verbinding hebt. Het verkeer over de internet verbinding zal echter over je (beveiligde) VPN connectie gaan. Kijk maar eens op de status pagina van je VPN Server. Daar kan je zien dat deze een intern IP adres van je netwerk thuis heeft uitgedeeld. Verder kan je op de OpenVPN App zien in de statistieken dat je internet verkeer via deze verbinding loopt. Een VPN connectie is altijd aan te raden als je op een openbare Wifi inlogt.
Ok, maar waarom geeft whatsmyip bij gebruik van PPTP wel 2 keer mijn wan ip adres?
Dus ook als ik een pptp vpn opzet via 4G?
Bedankt voor je antwoord btw ;-))
Je IP adres zal altijd hetzelfde blijven op je client, maar je data zal via je (beveiligde) VPN lopen. Op je VPN Server zul je netjes een nieuw (intern) IP adres krijgen. Controleer dit maar eens bij de status van je VPN server.
Ok, samengevat:
1) Met PPTP werkt ziggo TV app wel over 4G. Tevens wordt dan mijn wan ip weergegeven.
2) Met OpenVPN app en certificaten enzo werkt de beveiliging wel maar de ziggo TV app doet het niet!
Bij OpenVPN gebruik ik het TCP protocol omdat UDP niet werkt.
Kortom raar dat met OpenVPN, via TCP protocol, de ziggo TV app niet werkt.
Weet jij waarom UDP het bij mij niet doet?
Inmiddels andere poort voor UDP gepakt en werkt nu.
Wat overblijft is dat de TV app van ziggo het nog steeds niet doet over 4G.
Any idea?
Als je een VPN connectie met je thuis kunt opzetten (waar je dus met Ziggo modem bent verbonden) dan zou het gewoon moeten werken. Kun je met de Smartphone een apparaat van je thuis-netwerk pingen?
Ja pingen gaat goed.
Het heeft denk ik (weet ik wel zeker) toch te maken met het doorgeven van mijn ziggo wan ip.
VPN over UDP gaat nu prima. Echter wanneer ik “redirect gateway” kies of toevoeg (dus al het verkeer door de tunnel) doet niets het meer. M.a.w. internetpagina’s laden niet.
Dit is mijn server config welke werk maar zonder ziggo tv:
push “route 192.168.1.1 255.255.255.0”
server 10.8.0.0 255.255.255.0
dev tun
proto udp
keepalive 10 120
dh /tmp/openvpn/dh.pem
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem
Hoe ziet die van jou eruit?
Heb je precies dezelfde instellingen in de OpenVPN server van Tomato ingesteld zoals ik heb gedaan in mijn screenshots (dit werkt nl. bij meerdere mensen gewoon goed)?
Alles doet het nu goed,…. bedankt voor je reacties.
ik loop hier al spaak: Program Files\OpenVPN\easy-rsa
kan niet easy rsa zien in de map!!
windows 10 64bit. Hoe kom ik aan easy rsa?
Heb je wellicht de 32 bits versie gedownload, want in dat geval zal het waarschijnlijk de Program Files (x86) directory zijn. Ik heb als test zelf even de 64 bit versie opnieuw gedownload en geinstalleerd en bij mij verschijnt deze directory wel. Ik denk dat je zelf iets fout doet.
zojuist de 32 bit geinstalleerd , en dan is wel de map aanwezig! Wat gek zeg….
nu maar de map gekopieerd naar de 64bit versie 😀
Dat is inderdaad raar want ik heb zojuist als test even de 64 bit versie geinstalleerd en daar staat mooi de directory “C:Program FilesOpenVPNeasy-rsa”. Succes verder Jacco.
nog even voor de zekerheid, ik heb mij routers achter de modem zitten. En de routers geven dus geen DHCP uit. Dit doet het modem. Is dit een probleem voor OPENVPN????
Je moet de modem in bridge mode laten zetten en je router IP adressen laten uitdelen!
phoeeeee. Dit gaat nog wat worden. Dit omdat ik 5 routers heb. Dan zou ik dus alles in stukjes moeten opdelen. Dus modem 20 dhcp adresssen, router 1 20 dhcp adressen etc.etc…
Dat was ik dus niet van plan. Ik heb gelukkig 3x synology servers draaien waar dit al perfect op werkt! En heb nog een raspberry 3 liggen. Denk dat ik maar beter dit kan gebruiken.
Ik snap je problem niet precies. Ik heb hier in mijn network ook 4 routers draaien en 2 NAS systemen (eigenbouw met NAS4Free). Ik heb 1 hoofdrouter waar DHCP aanstaat en waarop ik OpenVPN server heb geinstalleerd. Je deelt dus centraal je IP-adressen uit. Niks ingewikkeld aan. Het is sowieso sterk af te raden om meerdere DHCP server op je netwerk te draaien! In het slechtste geval zou je nog met VLAN kunnen gaan werken, maar dan maak je jezelf erg moeilijk. De simpelste oplossingen zijn de beste!
op mijn hoofdrouter (modem) officieel van KPN kan ik geen ddwrt installeren. En die deelt de DHCP uit. Mijn andere routers staan achter deze router waarvan uiteraard de DHCP uitstaat.
Ik wil dus met de 5 routers met ddwrt, OPENVPN werkend krijgen.
maar als dit niet kan, geen probleem hoor……. Het is eigenlijk al overbodig met 3 nassen, maar voor mij is het belangrijk dat ik op bepaalde devices kan. Ik heb uiteraard ook DDNS. Maar toch….. het zit niet voor niets op de routers…..
Zoals gezegd je hoofdrouter (modem) in bridge mode laten zetten (bij Ziggo is dat 1 telefoontje en kost je letterlijk een paar minuten). Verder 1 andere router (waarop je OpenVPN Server) draait DHCP aanzetten en OpenVPN instellen. Heel simpel. Je hoofdrouter (modem) is dan dus niks anders meer dan een modem en bezit dan geen router functionaliteit meer.
dat meen je niet? Dat lijkt mij geen probleem. Dit ga ik eens bespreken met KPN. Dacht eigenlijk dat je in het hoofdmodem wel kon instellen van BRIDGE :D. Maar dat kan dus niet….. Ben benieuwd wat ze zeggen….
Hoi Henry,
Inmiddels werkt mijn openvpn dankzij jouw handleiding al jaren prima. Echter sinds vandaag krijg ik na een update van de openvpn app in ios de melding dat de certificaten met verouderde MD5 algoritme beveiligd zijn en dat de ondersteuning daarvoor eind april stopt. Er wordt geadviseerd om over te stappen naar een sterkere vorm. Kun jij aangeven hoe ik dit voor mijn bestaande certificaten kan doen? Alvast bedankt voor je reactie.
Gr. Cindy
Ik heb geen Asus Router meer met Tomato, daar ik inmiddels ben overgestapt op Unifi Gateway / Access-Points. Ik draai ondertussen de OpenVPN server op mijn Debian Server (zie ook deze blog).
Zorg er in elk geval voor dat je de laatste versie van OpenVPN hebt geinstalleerd om je certificaten te genereren. Heb je al geprobeerd om alle stappen dan nogmaals uit te voeren?
Nee nog niet. Ik zal dat deze week eens gaan proberen. Gr Cindy