Add an OpenVPN container
This commit is contained in:
		
							parent
							
								
									85328b8eea
								
							
						
					
					
						commit
						a2762c9f60
					
				|  | @ -0,0 +1,23 @@ | |||
| FROM kelvinchen/seedbox:base | ||||
| MAINTAINER Kelvin Chen <kelvin@kelvinchen.org> | ||||
| 
 | ||||
| # Install OpenVPN | ||||
| RUN apt-get update \ | ||||
|     && apt-get install -y --no-install-recommends \ | ||||
|         openvpn \ | ||||
|         easy-rsa \ | ||||
|         iptables \ | ||||
|     && apt-get clean \ | ||||
|     && rm -rf /var/lib/apt/lists/* | ||||
| 
 | ||||
| WORKDIR /usr/share/easy-rsa | ||||
| 
 | ||||
| EXPOSE 1194/udp | ||||
| 
 | ||||
| VOLUME /config | ||||
| 
 | ||||
| COPY vars /usr/share/easy-rsa/ | ||||
| COPY openvpn.conf start client.ovpn / | ||||
| COPY create-client /usr/local/bin/ | ||||
| 
 | ||||
| CMD ["/start"] | ||||
|  | @ -0,0 +1,19 @@ | |||
| client | ||||
| 
 | ||||
| nobind | ||||
| 
 | ||||
| remote MYSERVER_HOST 1194 | ||||
| proto udp | ||||
| dev tun | ||||
| 
 | ||||
| resolv-retry infinite | ||||
| 
 | ||||
| cipher     AES-256-CBC | ||||
| auth       SHA512 | ||||
| 
 | ||||
| tls-client | ||||
| 
 | ||||
| comp-lzo | ||||
| 
 | ||||
| persist-tun | ||||
| persist-key | ||||
|  | @ -0,0 +1,21 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| KEYDIR="/config/openvpn/keys" | ||||
| CLIENT=${1:-client} | ||||
| 
 | ||||
| echo " | ||||
| $(cat /client.ovpn) | ||||
| <ca> | ||||
| $(cat $KEYDIR/ca.crt) | ||||
| </ca> | ||||
| <cert> | ||||
| $(cat $KEYDIR/$CLIENT.crt) | ||||
| </cert> | ||||
| <key> | ||||
| $(cat $KEYDIR/$CLIENT.key) | ||||
| </key> | ||||
| <tls-auth> | ||||
| $(cat $KEYDIR/ta.key) | ||||
| </tls-auth> | ||||
| key-direction 1 | ||||
| " | ||||
|  | @ -0,0 +1,31 @@ | |||
| # vim: ft=conf | ||||
| 
 | ||||
| port  1194 | ||||
| proto udp | ||||
| dev   tun | ||||
| 
 | ||||
| ca       /config/openvpn/keys/ca.crt | ||||
| cert     /config/openvpn/keys/server.crt | ||||
| key      /config/openvpn/keys/server.key | ||||
| dh       /config/openvpn/keys/dh2048.pem | ||||
| tls-auth /config/openvpn/keys/ta.key 0 | ||||
| 
 | ||||
| cipher     AES-256-CBC | ||||
| auth       SHA512 | ||||
| 
 | ||||
| tls-server | ||||
| 
 | ||||
| server 10.8.0.0 255.255.255.0 | ||||
| 
 | ||||
| ifconfig-pool-persist /config/openvpn/ipp.txt | ||||
| 
 | ||||
| keepalive 10 120 | ||||
| 
 | ||||
| push "redirect-gateway def1 bypass-dhcp" | ||||
| push "dhcp-option DNS 8.8.8.8" | ||||
| push "dhcp-option DNS 8.8.4.4" | ||||
| 
 | ||||
| comp-lzo | ||||
| 
 | ||||
| persist-key | ||||
| persist-tun | ||||
|  | @ -0,0 +1,28 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| # Make sure OpenVPN config directory exists. | ||||
| mkdir -p /config/openvpn/ | ||||
| 
 | ||||
| cp -n /openvpn.conf /config/openvpn/ | ||||
| 
 | ||||
| # Check if keys exist, if not, create with easy-rsa | ||||
| if [ ! -d "/config/openvpn/keys" ]; then | ||||
|     cd /usr/share/easy-rsa | ||||
|     source vars | ||||
|     ./clean-all | ||||
|     ./build-dh | ||||
|     ./pkitool --initca | ||||
|     ./pkitool --server server | ||||
|     ./pkitool client | ||||
|     openvpn --genkey --secret /config/openvpn/keys/ta.key | ||||
| fi | ||||
| 
 | ||||
| # Make the tun device | ||||
| mkdir -p /dev/net | ||||
| if [ ! -c /dev/net/tun ]; then | ||||
|     mknod /dev/net/tun c 10 200 | ||||
| fi | ||||
| 
 | ||||
| iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE | ||||
| 
 | ||||
| openvpn /config/openvpn/openvpn.conf | ||||
|  | @ -0,0 +1,60 @@ | |||
| # easy-rsa parameter settings | ||||
| 
 | ||||
| export EASY_RSA="/usr/share/easy-rsa" | ||||
| 
 | ||||
| export OPENSSL="openssl" | ||||
| export PKCS11TOOL="pkcs11-tool" | ||||
| export GREP="grep" | ||||
| 
 | ||||
| # This variable should point to | ||||
| # the openssl.cnf file included | ||||
| # with easy-rsa. | ||||
| export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` | ||||
| 
 | ||||
| # Edit this variable to point to | ||||
| # your soon-to-be-created key | ||||
| # directory. | ||||
| # | ||||
| # WARNING: clean-all will do | ||||
| # a rm -rf on this directory | ||||
| # so make sure you define | ||||
| # it correctly! | ||||
| export KEY_DIR="/config/openvpn/keys" | ||||
| 
 | ||||
| # PKCS11 fixes | ||||
| export PKCS11_MODULE_PATH="dummy" | ||||
| export PKCS11_PIN="dummy" | ||||
| 
 | ||||
| # Increase this to 2048 if you | ||||
| # are paranoid.  This will slow | ||||
| # down TLS negotiation performance | ||||
| # as well as the one-time DH parms | ||||
| # generation process. | ||||
| export KEY_SIZE=2048 | ||||
| 
 | ||||
| # In how many days should the root CA key expire? | ||||
| export CA_EXPIRE=3650 | ||||
| 
 | ||||
| # In how many days should certificates expire? | ||||
| export KEY_EXPIRE=3650 | ||||
| 
 | ||||
| # These are the default values for fields | ||||
| # which will be placed in the certificate. | ||||
| # Don't leave any of these fields blank. | ||||
| export KEY_COUNTRY="US" | ||||
| export KEY_PROVINCE="CA" | ||||
| export KEY_CITY="SanFrancisco" | ||||
| export KEY_ORG="Fort-Funston" | ||||
| export KEY_EMAIL="me@myhost.mydomain" | ||||
| export KEY_OU="MyOrganizationalUnit" | ||||
| 
 | ||||
| # X509 Subject Field | ||||
| export KEY_NAME="EasyRSA" | ||||
| 
 | ||||
| # PKCS11 Smart Card | ||||
| # export PKCS11_MODULE_PATH="/usr/lib/changeme.so" | ||||
| # export PKCS11_PIN=1234 | ||||
| 
 | ||||
| # If you'd like to sign all keys with the same Common Name, uncomment the KEY_CN export below | ||||
| # You will also need to make sure your OpenVPN server config has the duplicate-cn option set | ||||
| # export KEY_CN="CommonName" | ||||
|  | @ -47,3 +47,10 @@ certificates for you. | |||
| ## Where is my data? | ||||
| All data are saved in the docker volumes `seedbox_config` or | ||||
| `seedbox_torrents`. | ||||
| 
 | ||||
| ## OpenVPN | ||||
| The OpenVPN container generates a single client key/cert pair by default. | ||||
| Run the `create-client CLIENT_NAME` tool in the openvpn container to generate | ||||
| the openvpn file. e.g. `create-client client >> client.ovpn`. You can transfer | ||||
| the file back using syncthing or scp. You can also create more certs by using | ||||
| easy-rsa. | ||||
|  |  | |||
|  | @ -11,3 +11,4 @@ docker build -t kelvinchen/seedbox:plex      Dockerfiles/plex | |||
| docker build -t kelvinchen/seedbox:rtorrent  Dockerfiles/rtorrent | ||||
| docker build -t kelvinchen/seedbox:sickrage  Dockerfiles/sickrage | ||||
| docker build -t kelvinchen/seedbox:syncthing Dockerfiles/syncthing | ||||
| docker build -t kelvinchen/seedbox:openvpn   Dockerfiles/openvpn | ||||
|  |  | |||
|  | @ -50,3 +50,15 @@ syncthing: | |||
|     volumes: | ||||
|         - seedbox_config:/config | ||||
|         - seedbox_torrents:/torrents | ||||
| 
 | ||||
| openvpn: | ||||
|     image: kelvinchen/seedbox:openvpn | ||||
|     restart: always | ||||
|     net: seedbox | ||||
|     ports: | ||||
|         - "1194:1194/udp" | ||||
|     volumes: | ||||
|         - seedbox_config:/config | ||||
|         - seedbox_torrents:/torrents | ||||
|     cap_add: | ||||
|         - NET_ADMIN | ||||
|  |  | |||
|  | @ -8,3 +8,4 @@ docker push kelvinchen/seedbox:plex | |||
| docker push kelvinchen/seedbox:rtorrent | ||||
| docker push kelvinchen/seedbox:sickrage | ||||
| docker push kelvinchen/seedbox:syncthing | ||||
| docker push kelvinchen/seedbox:openvpn | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue