home       inleiding       sysadmin       services       links       bash       werk       nothing      

openvpn client

Zodra we een openvpn-server hebben geconfigureerd, en sleutels hebben gegenereerd voor een client, kan die client met openvpn worden geconfigureerd.

  1. overbrengen van de sleutels
    we hebben het volgende nodig:
    • een client key <client>.key in ons geval client01.key
    • een client certificaat <client>.crt in ons geval client01.crt
    • een certification authority certificaat: ca.crt
    • een TLS-sleutel: ta.key
      al deze files zijn aanwezig op de vpn-server. We beginnen met ze te kopieren naar een subdirectory van een account op de vpn-server ...
      root@vpn-ub14:/etc/openvpn/easy-rsa/keys# mkdir /home/user/keys
      root@vpn-ub14:/etc/openvpn/easy-rsa/keys# cp ca.crt /home/user/keys/
      root@vpn-ub14:/etc/openvpn/easy-rsa/keys# cp client01.key /home/user/keys
      root@vpn-ub14:/etc/openvpn/easy-rsa/keys# cp client01.crt /home/user/keys
      root@vpn-ub14:/etc/openvpn/easy-rsa/keys# cp ../../ta.key /home/user/keys/

      We maken vervolgens een archive bestand:

      root@vpn-ub14:/home/user# tar -cvf keys.tar keys
      keys/
      keys/ta.key
      keys/ca.crt
      keys/client01.crt
      keys/client01.key

      We halen dit bestand op:

      $ scp -P 1022 user@10.104.201.254:~/keys.tar  .
      user@10.104.201.254's password: 
      keys.tar                                 100%   20KB   20.0KB/s   00:00

      En untarren vervolgens:

      $ tar -xvf keys.tar 
      keys/
      keys/ta.key
      keys/ca.crt
      keys/client01.crt
      keys/client01.key

      Kijken of het gelukt is:

      $ ls -l keys
      total 16
      -rw-r--r-- 1 bert bert 1379 dec  1 11:35 ca.crt
      -rw-r--r-- 1 bert bert 4093 dec  1 11:35 client01.crt
      -rw------- 1 bert bert  916 dec  1 11:35 client01.key
      -rw------- 1 bert bert  636 dec  1 11:36 ta.key
  2. installatie openvpn op client
    We moeten een aantal pakketten installeren om ervoor te zorgen dat we via network-manager de VPN-client kunnen instellen.
     
    $ sudo apt-get install openvpn network-manager-openvpn network-manager-openvpn-gnome
     
    Vervolgens klikken we rechts op het pictogram van network-manager, en gaan naar "edit-connections ... // daarna de knop ADD // vervolgens OpenVPN // CREATE
     
    We vullen dan al de velden in zoals hieronder:
    vpn-client-01
    openvpn-client-02
    openvpn-advanced-options
    openvpn-client-03

     
    Helaas het werkt niet:
    Op de VPN-server zien we het volgende in de syslog:

    Dec  1 12:56:10 vpn-ub14 ovpn-server[2497]: Options error: --ca fails with 'ca.crt': No such file or directory

    Dat passen we aan door het volledig path te plaatsen in server.conf voor de ca.key:

    # Any X509 key management system can be used.
    # OpenVPN can also use a PKCS #12 formatted key file
    # (see "pkcs12" directive in man page).
    ca /etc/openvpn/easy-rsa/keys/ca.crt
    cert server.crt
    key server.key  # This file should be kept secret

    Na een herstart krijgen we geen error meer ...
    bert@vpn-ub14:/etc/openvpn$ sudo service openvpn status
    VPN 'server' is running
     
    ... en de client doet het nu ook !!!
     

  3. debuggen
     
    Op een andere server werkt de VPN eigenlijk helemaal niet. Omdat die achter een firewall staat, en er geen feedback te vinden is in de /var/log/syslog, wordt wireshark ingeschakeld:
    10.28.101.100     151.152.153.154   TCP  49386 → 1194 [SYN] 
    151.152.153.154   10.28.101.100     TCP  1194 → 49386 [RST, ACK] 
    10.28.101.100     151.152.153.154   TCP  49388 → 1194 [SYN] 
    151.152.153.154   10.28.101.100     TCP  1194 → 49388 [RST, ACK] 

    De server wenst geen verbinding te leggen. Vraag iss of de SYN aankomt bij de openvpn server zelf, of reeds wordt afgeketst op de firewall ervoor. Dit kunnen we testen met een tshark op de openvpn server:
     

    81.82.83.84 → 192.168.2.8 TCP 49516 → 1194 [SYN]
    192.168.2.8 → 81.82.83.84 TCP 1194 → 49516 [RST, ACK]

    De RST komt duidelijk van de openVPN-server.
    Hij draait gewoon niet, al geeft systemctl status een running.
    We zien ook geen 1194 in netstat.
     
    We proberen dan maar INTERACTIEF de service op te starten:
     
    $ sudo /usr/sbin/openvpn /etc/openvpn/server.conf
    Options error: --explicit-exit-notify can only be used with --proto udp
    Use --help for more information.
    In de configfile zien we inderdaad:

    ...
    # Silence repeating messages.  At most 20
    # sequential messages of the same message
    # category will be output to the log.
    ;mute 20
     
    # Notify the client that when the server restarts so it
    # can automatically reconnect.
    explicit-exit-notify 1
    ...

    We lossen het probleem op door met vi een ; voor deze laatste optie te plaatsen.
     
    Vervolgens starten we de service opnieuw INTERACTIEF op ...
     
    $ sudo /usr/sbin/openvpn /etc/openvpn/server.conf

    11:13:53  OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 10 
    11:13:53  library versions: OpenSSL 1.1.0g  2 Nov 2017, LZO 2.08
    11:13:53  Diffie-Hellman initialized with 2048 bit key
    11:13:53  Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
    11:13:53  Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
    11:13:53  ROUTE_GATEWAY 192.168.255.77/255.255.255.0 IFACE=ens3 HWADDR=52:54:00:82:0c:de
    11:13:53  TUN/TAP device tun0 opened
    11:13:53  TUN/TAP TX queue length set to 100
    11:13:53  do_ifconfig, tt->did_ifconfig_ipv6_setup=0
    11:13:53  /sbin/ip link set dev tun0 up mtu 1500
    11:13:53  /sbin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
    11:13:53  /sbin/ip route add 10.8.0.0/24 via 10.8.0.2
    11:13:53  Could not determine IPv4/IPv6 protocol. Using AF_INET
    11:13:53  Socket Buffers: R=[87380->87380] S=[16384->16384]
    11:13:53  Listening for incoming TCP connection on [AF_INET][undef]:1194
    11:13:53  TCPv4_SERVER link local (bound): [AF_INET][undef]:1194
    11:13:53  TCPv4_SERVER link remote: [AF_UNSPEC]
    11:13:53  GID set to nogroup
    11:13:53  UID set to nobody
    11:13:53  MULTI: multi_init called, r=256 v=256
    11:13:53  IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
    11:13:53  IFCONFIG POOL LIST
    11:13:53  MULTI: TCP INIT maxclients=1024 maxevents=1028
    11:13:53  Initialization Sequence Completed
    11:14:02  TCP connection established with [AF_INET]81.82.83.84:5505
    11:14:03  81.82.83.84:5505 TLS: Initial packet from [AF_INET]81.82.83.84:5505, sid=0a255bd7 ea443c70
    11:14:03  81.82.83.84:5505 VERIFY OK: depth=1, C=BE, ST=VL, L=brussels, O=educ, OU=educ.linux800, CN=educ CA, name=EasyRSA, emailAddress=educ@gmail.com
    11:14:03  81.82.83.84:5505 VERIFY OK: depth=0, C=BE, ST=VL, L=brussels, O=educ, OU=educ.linux800, CN=lap17, name=EasyRSA, emailAddress=educ@gmail.com
    11:14:03  81.82.83.84:5505 peer info: IV_VER=2.3.10
    11:14:03  81.82.83.84:5505 peer info: IV_PLAT=linux
    11:14:03  81.82.83.84:5505 peer info: IV_PROTO=2
    11:14:03  81.82.83.84:5505 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1560', remote='link-mtu 1544'
    11:14:03  81.82.83.84:5505 WARNING: 'cipher' is used inconsistently, local='cipher AES-256-CBC', remote='cipher BF-CBC'
    11:14:03  81.82.83.84:5505 WARNING: 'keysize' is used inconsistently, local='keysize 256', remote='keysize 128'
    11:14:03  81.82.83.84:5505 Control Channel: TLSv1.2, cipher TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384, 2048 bit RSA
    11:14:03  81.82.83.84:5505 [lap17] Peer Connection Initiated with [AF_INET]81.82.83.84:5505
    11:14:03  lap17/81.82.83.84:5505 MULTI_sva: pool returned IPv4=10.8.0.6, IPv6=(Not enabled)
    11:14:03  lap17/81.82.83.84:5505 MULTI: Learn: 10.8.0.6 -> lap17/81.82.83.84:5505
    11:14:03  lap17/81.82.83.84:5505 MULTI: primary virtual IP for lap17/81.82.83.84:5505: 10.8.0.6
    11:14:06  lap17/81.82.83.84:5505 PUSH: Received control message: 'PUSH_REQUEST'
    11:14:06  lap17/81.82.83.84:5505 SENT CONTROL [lap17]: 'PUSH_REPLY,route 192.168.255.0 255.255.255.0,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5,peer-id 0' (status=1)
    11:14:06  lap17/81.82.83.84:5505 Outgoing Data Channel: Cipher 'AES-256-CBC' initialized with 256 bit key
    11:14:06  lap17/81.82.83.84:5505 Outgoing Data Channel: Using 160 bit message hash 'SHA1' for HMAC authentication
    11:14:06  lap17/81.82.83.84:5505 Incoming Data Channel: Cipher 'AES-256-CBC' initialized with 256 bit key
    11:14:06  lap17/81.82.83.84:5505 Incoming Data Channel: Using 160 bit message hash 'SHA1' for HMAC authentication
    11:14:06  lap17/81.82.83.84:5505 Authenticate/Decrypt packet error: cipher final failed
    11:14:06  lap17/81.82.83.84:5505 Fatal decryption error (process_incoming_link), restarting
    11:14:06  lap17/81.82.83.84:5505 SIGUSR1[soft,decryption-error] received, client-instance restarting
    11:14:11  TCP connection established with [AF_INET]81.82.83.84:30633
    11:14:12  81.82.83.84:30633 TLS: Initial packet from [AF_INET]81.82.83.84:30633, sid=0ef7ccfe a1ab457c
    11:14:12  81.82.83.84:30633 VERIFY OK: depth=1, C=BE, ST=VL, L=brussels, O=educ, OU=educ.linux800, CN=educ CA, name=EasyRSA, emailAddress=educ@gmail.com
    11:14:12  81.82.83.84:30633 VERIFY OK: depth=0, C=BE, ST=VL, L=brussels, O=educ, OU=educ.linux800, CN=lap17, name=EasyRSA, emailAddress=educ@gmail.com
    11:14:12  81.82.83.84:30633 peer info: IV_VER=2.3.10
    11:14:12  81.82.83.84:30633 peer info: IV_PLAT=linux
    11:14:12  81.82.83.84:30633 peer info: IV_PROTO=2
    11:14:12  81.82.83.84:30633 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1560', remote='link-mtu 1544'
    11:14:12  81.82.83.84:30633 WARNING: 'cipher' is used inconsistently, local='cipher AES-256-CBC', remote='cipher BF-CBC'
    11:14:12  81.82.83.84:30633 WARNING: 'keysize' is used inconsistently, local='keysize 256', remote='keysize 128'

    ... dat probleem lossen we op op de client met ...

    openvpn-advanced-options

     
    Op de openvpn server moeten we ook routing enablen:
    $ sudo vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

    En opstarten:
    $ /etc/openvpn$ sudo sysctl -p
    net.ipv4.ip_forward = 1
     
    En om duistere redenen moeten we met systemctl de server opstarten als volgt:
    $ sudo systemctl start openvpn@server
     
    ... en we kunnen testen: $ netstat -vatn

    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN     
    tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN