Skip to content

Instantly share code, notes, and snippets.

@korchasa
Forked from Jimmy-Xu/run-openvpn-on-hyper.md
Last active August 20, 2017 10:42
Show Gist options
  • Save korchasa/c6f8882b643f36d1fdea74bff681da40 to your computer and use it in GitHub Desktop.
Save korchasa/c6f8882b643f36d1fdea74bff681da40 to your computer and use it in GitHub Desktop.
Run OpenVPN on Hyper_
$ docker search openvpn | head -n 5
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
kylemanna/openvpn              OpenVPN server in a Docker container compl...   316                  [OK]
haugene/transmission-openvpn   Docker container which runs Transmission t...   47                   [OK]
dperson/openvpn-client                                                         29                   [OK]
martin/openvpn                 Tiny (12MB) full featured OpenVPN server w...   14                   [OK]

Preparation

//create data volume  
$ OVPN_DATA="ovpn-data"
$ hyper volume create --name $OVPN_DATA
ovpn-data

//generate configuration  
$ hyper run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://vpn-demo.hyper.sh
Successfully generated config

//generate certificates  
$ hyper run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki
...
writing new private key to '/etc/openvpn/pki/private/ca.key.XXXXnnEDaj'
Enter PEM pass phrase: <<<=== (input password)
Verifying - Enter PEM pass phrase: <<<=== (input password again)
...
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: <<<=== (press Enter)
...
Enter pass phrase for /etc/openvpn/pki/private/ca.key:  <<<=== (input password again)
...
Write out database with 1 new entries
Data Base Updated

//generate a client certificate without a passphrase(volume can be binded to only one container now)  
$ hyper run -v ${OVPN_DATA}:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full jimmy nopass
...
Enter pass phrase for /etc/openvpn/pki/private/ca.key:  <<<=== (input password again)
...
Write out database with 1 new entries
Data Base Updated


//retrieve the client configuration with embedded certificates  
$ hyper run -v ${OVPN_DATA}:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient jimmy > jimmy.ovpn
$ ls -l jimmy.ovpn
-rw-rw-r-- 1 xjimmy xjimmy 4972 Jul 21 11:38 jimmy.ovpn

Start openvpn server

//run openvpn container  
$ hyper run --name myopenvpn -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp kylemanna/openvpn
//or enable debug output  
$ hyper run --name myopenvpn -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp -e DEBUG=1 kylemanna/openvpn

//add public ip to openvpn container  
$ hyper fip allocate 1
162.221.195.34
$ hyper fip attach 162.221.195.34 myopenvpn

//view container  
$ hyper ps
CONTAINER ID   IMAGE                 COMMAND        CREATED          STATUS          PORTS                    NAMES       PUBLIC IP
996592375b28   kylemanna/openvpn     "ovpn_run"     3 minutes ago    Up 2 minutes    0.0.0.0:1194->1194/udp   myopenvpn   162.221.195.34

Test with client

//test using a client that has openvpn installed correctly  
$ yum install -y openvpn
$ sudo sh -c 'echo "162.221.195.34   vpn-demo.hyper.sh" >> /etc/hosts'

$ sudo openvpn --config jimmy.ovpn 
Thu Jul 21 13:06:56 2016 OpenVPN 2.3.11 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on May 10 2016
Thu Jul 21 13:06:56 2016 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.06
Thu Jul 21 13:06:56 2016 Control Channel Authentication: tls-auth using INLINE static key file
Thu Jul 21 13:06:56 2016 UDPv4 link local: [undef]
Thu Jul 21 13:06:56 2016 UDPv4 link remote: [AF_INET]162.221.195.34:1194
Thu Jul 21 13:06:56 2016 [vpn-demo.hyper.sh] Peer Connection Initiated with [AF_INET]162.221.195.34:1194
Thu Jul 21 13:06:59 2016 Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:1: block-outside-dns (2.3.11)
Thu Jul 21 13:06:59 2016 TUN/TAP device tun0 opened
Thu Jul 21 13:06:59 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Thu Jul 21 13:06:59 2016 /usr/sbin/ip link set dev tun0 up mtu 1500
Thu Jul 21 13:06:59 2016 /usr/sbin/ip addr add dev tun0 local 192.168.255.6 peer 192.168.255.5
Thu Jul 21 13:06:59 2016 Initialization Sequence Completed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment