GUI confuses me sometimes, so I prefer to make configurations in text files. For DD-WRT, OpenVPN server is available in OpenVPN, OpenVPN Small, Big, Mega, and Giga builds: K2.6 Build Features. Since I have never used any router with USB storage capabilities, I can’t be sure but I think OpenVPN can be installed using ipkg as well.
For this post I am going to assume you’re an OS X user, but Windows procedures shouldn’t be too different.
1. Generating certificates and keys
- Get Easy-RSA. You can either clone the git repository or download the package as zip. Navigate to the folder where you downloaded/cloned Easy-RSA and get into the directory
easy-rsa/2.0
. - Edit the file
vars
. I’m showing the variables that you might want to change. Take note of theKEY_SIZE
variable. If you’re paranoid like me, leave it at 2048. It takes longer to generate DH parms but not that long.# 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="MY" export KEY_PROVINCE="SELANGOR" export KEY_CITY="Puchong" export KEY_ORG="AdyRomantika" export KEY_EMAIL="[email protected]" export KEY_OU="RomantikaName" # X509 Subject Field export KEY_NAME="MYKEY1"
- Import the variables into the current shell:
$ source vars
- Clean existing keys if any (WARNING: This deletes all existing certificates and keys)
$ ./clean-all
- Generate server certificates. The script will still ask for parameters you entered in
vars
so just press ENTER if you’re satisfied- This will produce 2 files:
ca.key
andca.crt
$ ./build-ca
- This will produce 2 files:
- Generate Diffie Hellman parameters
- This will produce the file:
dh{n}.pem
where{n}
is the key size specified in thevars
file.
$ ./build-dh
- This will produce the file:
- Generate key for the server.
- When asked for a password, just press ENTER otherwise the key password will be asked each time service is being brought up.
- When asked whether to sign the certificate, say Yes.
- This will produce 3 files:
server.crt
,server.csr
,server.key
$ ./build-key-server server1
- Generate key for the clients. This step can be repeated in the future for more clients as needed.
- When asked for a password, you can enter a password so that when connecting to the service, the key password will be asked. I recommend this to make it more secure.
- When asked whether to sign the certificate, say Yes.
- This will produce 3 files:
client1.crt
,client1.csr
,client1.key
$ ./build-key client1