OpenVPN instellen voor dummies

Als je een netwerk op afstand wilt benaderen, of de internetverbinding daar wat betreft veiligheid meer vertrouwt dan die onderweg, kun je ervoor kiezen om een VPN op locatie te installeren. In deze handleiding is uitgelegd hoe je gemakkelijk het sterke OpenVPN kunt opzetten in een virtuele machine, en hiermee kunt verbinden vanaf een of meerdere apparaten naar keuze.

  • 30 tot 60 minuten vrije tijd (afhankelijk van je voorkennis met Linux)
  • een computer op de locatie van de te gebruiken verbinding met:
  • toegang tot de router en firewall(s) op locatie om:
    • een poort open te kunnen zetten
    • een vast IP-adres toe te kennen aan je virtuele machine via DHCP
  • het externe IP-adres van de internetverbinding die je wilt gebruiken
  • minimaal 1 apparaat om op afstand met deze verbinding te gebruiken (bijv.: smartphone, laptop, andere pc…)
  • Zorg ervoor dat de virtuele machine een vast IP-adres krijgt toegewezen via DHCP. Een vast IP-adres toewijzen binnen Ubuntu Core is mogelijk, maar buiten de scope van deze handleiding.
  • Om VPN-verbindingen te kunnen toelaten, moet je ervoor zorgen dat UDP-poort 1194 wordt geforward naar je virtuele machine.
    • Werkt dit niet? Geef dan ook TCP door.
    • Indien TCP en UDP 1194 beiden niet werken, wordt VPN-verkeer over deze poort mogelijk geblokkeerd door je internetprovider. Kies dan een andere externe poort voor je virtuele machine; goede mogelijke opties zijn poort 80 (HTTP) en poort 443 (HTTPS).

Voor dit project wordt Ubuntu Core gebruikt. Dit is een lichtgewicht besturingssysteem voor Internet of Things-apparatuur. Omdat zulke apparaten goed beveiligd moeten zijn, maakt Ubuntu Core gebruik van SSH. Zo stel je dit in:

  1. Log in of maak een account bij Ubuntu One.
  2. Klik na inloggen links op het tabblad SSH keys.
    1. Zie je alleen een scherm met het kopje Import new SSH key? Dan heb je nog geen SSH-keys en moet je deze aanmaken.
      Zie hiervoor de instructies voor Windows en de instructies voor macOS.
    2. Staan er al 1 of meerdere keys? Ga dan door naar Image voorbereiden.
  1. Download Ubuntu Core voor de pc op locatie. Kies het bestand wat eindigt op .xz.
  2. Pak het .xz-bestandje uit zodat je het .img-bestand hebt wat erin zit.1)
  3. Je hebt nu een 1-op-1 schijfkopie. Om deze met VirtualBox te gebruiken moet je het omzetten naar een VDI-bestand. Dit kan met het programma VBoxManage wat bij VirtualBox wordt geleverd.2) Voer het volgende commando in bij de Terminal of Commandprompt van de pc op locatie:
    VBoxManage convertdd naam-van-gedownload-bestand.img naam-van-nieuw-schijfbestand.vdi --format VDI

    Als convertdd niet werkt kun je dit vervangen door convertfromraw, dus:

    VBoxManage convertfromraw naam-van-gedownload-bestand.img naam-van-nieuw-schijfbestand.vdi --format VDI
  4. We gaan Ubuntu Core iets meer schijfruimte geven. Gebruik het volgende commando om de schijfruimte uit te breiden naar maximaal 20 GB3):
    VBoxManage modifyhd naam-van-nieuw-schijfbestand.vdi --resize 20480
  5. Maak een nieuwe virtuele machine aan in VirtualBox. Kies bij de opslagopties niet voor een nieuwe harde schijf, maar voor het VDI-schijfbestand dat je hebt gemaakt in stap 3.
  6. Klik op je virtuele machine, en klik bovenin VirtualBox op Instellingen. Kies vervolgens aan de linkerkant voor Netwerk, en zorg ervoor dat de adapter is ingesteld als bridge-adapter. Anders kun je de machine straks niet beheren.

Start de virtuele machine. Je hoeft niets te doen, totdat je de volgende tekst ziet:

Press enter to configure.

Druk op Enter, en je krijgt het volgende scherm:

          Ubuntu Core

          Configure the network and setup an administrator account on this all-snap Ubuntu Core system.

                                                        [ OK     ]

Druk op Enter.

          Network connections

          Configure at least one interface this server can use to talk to other machines, and which preferably
          provides sufficient access for updates.

            eth0     >  Will use DHCP for IPv4, currently has address: 192.168.1.101
                        Has no IPv6 configuration, currently has addresses: fe80:5054:ff:fe12:3456,
                        fec0::5054:ff:fe12:3456
                        B8:27:EB:44:AF:C2 Raspberry Pi Foundation


                                                         [ Done   ]
                                                         [ Cancel ]

Druk op het pijltje-naar-beneden op je toetsenbord tot de tekst “Done” groen wordt, en druk op Enter.

          Profile setup

          Enter an email address from your account in the store.

                                 Email address:    _

          If you do not have an account, visit https://login.ubuntu.com to create one.



                                                         [ Done   ]
                                                         [ Cancel ]

Typ in bovenstaand scherm het mailadres van je Ubuntu-account in, druk het pijltje-naar-beneden op je toetsenbord tot de tekst “Done” groen wordt, en druk op Enter.

Als alles goed gaat zie je na enkele seconden een scherm wat hierop lijkt:

          Configuration Complete

          This device is registered to user@example.com.

          Remote access was enabled via authentication with SSO user <user>.
          Public SSH keys were added to the device for remote access.

          alan@example.com can connect remotely to this device via SSH:

              ssh user@192.168.1.101

                                                         [ Finish ]

Druk op Enter. Als het goed is start Ubuntu Core nu door naar het enige scherm dat het ooit zal weergeven via VirtualBox:

Ubuntu Core 16 on 192.168.1.101 (tty1)

The host key fingerprints are:

    RSA     SHA256:aiphookohRei5ish6phai2ukiolouth0tu
    SSA     SHA256:deey2ak9CheiQuohlai5mie6vah6aethei
    RECDSA  SHA256:Eenoh7Ujoh1Thip8iebee4phooSohnuaku
    ED25519 SHA256:vahNaephuifohcuov8eegho3kae0ohquae

To login:

    ssh user@192.168.1.101

Personalize your account at https://login.ubuntu.com.

Indien dit scherm niet uit zichzelf komt, zal Ubuntu Core eenmaal herstarten en dit dan weergeven. Je kunt hier ook komen door de virtuele machine in VirtualBox af te sluiten en opnieuw te starten.

Onderstaande stappen kunnen niet rechtstreeks op de virtuele machine worden uitgevoerd, omdat Ubuntu Core geen verbinding maakt met een 'fysiek' toetsenbord of muis. Via een SSH-programma (zoals PuTTY op Windows) kun je het IP-adres van de virtuele machine invoeren en inloggen met het wachtwoord van jouw SSH-key.

sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
snap install easy-openvpn

Vul aan het einde van de opdracht je externe IP-adres in:

sudo easy-openvpn.setup -u udp://82.16.x.y

Dit zou er ongeveer zo uit moeten zien:

Processing PUSH Config: 'block-outside-dns'
Processing Route Config: '192.168.254.0/24'
Processing PUSH Config: 'dhcp-option DNS 8.8.8.8'
Processing PUSH Config: 'dhcp-option DNS 8.8.4.4'
Successfully generated config
Cleaning up before Exit ...

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /var/snap/easy-openvpn/8/openvpn/pki

Generating a 2048 bit RSA private key
.+++
.......................+++
writing new private key to '/var/snap/easy-openvpn/8/openvpn/pki/private/ca.key.vKlxSiGKEi'

Vervolgens wordt gevraagd om een memorabel wachtwoord op te geven. Je ziet niet wat je typt terwijl je dit doet; typ je wachtwoord eenmaal, druk op enter, en typ het wachtwoord dan nog een keer ter verificatie. Druk vervolgens op Enter.

Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Nu krijg je de mogelijkheid om de Common Name in te stellen. Dit is de naam waaraan jouw VPN-verbinding herkend zal worden. Geef het dus iets duidelijks mee, zoals de naam of functie van je computer of de locatie waar deze staat. Geef de Common Name op die je wenst te gebruiken en druk op Enter.

-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:popey

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/var/snap/easy-openvpn/8/openvpn/pki/ca.crt

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time

De laatste zin in bovenstaand scherm is heel erg waar. Er wordt nu een cryptosleutel berekend, en dit kost wat rekentijd. Afhankelijk van de snelheid van je processor kan dit enkele minuten tot ruim een half uur duren. Heb geduld, er komt vanzelf een einde aan. Het programma sluit af naar de terminal als het klaar is.

...........................................+.................................................................................................................................................+.............................................+............

DH parameters of size 2048 created at /var/snap/easy-openvpn/8/openvpn/pki/dh.pem

Generating a 2048 bit RSA private key
........................+++
..........+++
writing new private key to '/var/snap/easy-openvpn/8/openvpn/pki/private/82.16.x.y.key.743Ookmf05'
-----
Using configuration from /snap/easy-openvpn/8/usr/local/easyrsa/openssl-1.0.cnf
Enter pass phrase for /var/snap/easy-openvpn/8/openvpn/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'82.16.x.y'
Certificate is to be certified until Oct  6 10:00:19 2028 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated
Using configuration from /snap/easy-openvpn/8/usr/local/easyrsa/openssl-1.0.cnf
Enter pass phrase for /var/snap/easy-openvpn/8/openvpn/pki/private/ca.key:

An updated CRL has been created.
CRL file: /var/snap/easy-openvpn/8/openvpn/pki/crl.pem

Na installatie moet je de OpenVPN-server eenmalig zelf starten:

sudo service snap.easy-openvpn.easy-openvpn start

Vanaf nu start OpenVPN automatisch mee als de virtuele machine wordt opgestart in VirtualBox.

Voor elk apparaat wat je met jouw VPN-verbinding wilt gebruiken moet je een profiel aanmaken. Dit is een bestandje wat jouw apparaat gebruikt om je VPN-server te vinden en ermee te verbinden.

Voer de volgende commando's achter elkaar uit om een profiel te maken voor het apparaat “daan_laptop”.

snap connect easy-openvpn:home :home
sudo easy-openvpn.add-client daan_laptop > daan_laptop_vpn_config.ovpn
snap disconnect easy-openvpn:home

Je kunt via een SFTP-programma (bijv. FileZilla of PuTTY PSFTP) verbinding maken met de 'harde schijf' van je virtuele machine, en zo de .ovpn-bestandjes naar je eigen pc kopiëren. Vervolgens kun je deze inladen in een VPN-programma naar keuze op het apparaat wat je verbinding wilt laten maken met jouw VPN.

Heb je je netwerk goed ingesteld zodat jouw VPN bereikbaar blijft?

Werkt je VPN eerst wel, maar een dag later niet? ⬇️



1) Dit kan op Windows bijvoorbeeld met het gratis programma 7-Zip. Binnen Linux kan dit door na downloaden het volgende commando uit te voeren in de map waar het bestandje in staat: unxz naam-van-bestand.img.xz
2) In Windows vind je dit in C:\Program Files\Oracle\Virtualbox, in Linux hoef je het pad van dit programma niet op te geven.
3) Geen zorgen; deze ruimte wordt niet allemaal gebruikt, maar is wel verstandig om te hebben voor automatische updates. De ruimte wordt niet van je harde schijf gebruikt totdat dit wordt gevraagd door Ubuntu Core. Je plaatst dus eigenlijk een 'limiet' op de ruimte die Ubuntu Core maximaal mag gebruiken, in plaats van dat je deze ruimte al inneemt.
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • knowledgebase/it/cloud/easy_openvpn_setup.txt
  • Laatst gewijzigd: 2019/06/20 07:46
  • door Daan Berg