Linux Server Build: OpenVPN From Scratch - Hak5 2019
HTML-код
- Опубликовано: 7 фев 2025
- Hak5 -- Cyber Security Education, Inspiration, News & Community since 2005:
____________________________________________
Today we're building an OpenVPN server from scratch in Linux!
-------------------------------
Shop: www.hakshop.com
Support: / threatwire
Subscribe: / hak5
Our Site: www.hak5.org
Contact Us: / hak5
------------------------------
Install and setup OpenVPN
apt-get update; apt-get install openvpn easy-rsa
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server.conf
nano /etc/openvpn/server.conf
replace dh1024.pem with dh2048.pem
#uncomment push "redirect-gateway def1 bypass-dhcp"
#uncomment push "dhcp-option DNS" and replace IP addresses with your fav DNS
#uncomment user nobody
#uncomment group nogroup
#save and exit
Setup Firewall
#Enable IP forwarding
echo 1 /proc/sys/net/ipv4/ip_forward
nano /etc/sysctl.conf
#uncomment net.ipv4.ip_forward=1
#save and exit
#Configure firewall.
ufw status
ufw allow ssh
ufw allow 1194/udp
#Let packets forward through the VPS by changing for forward policy to accept
nano /etc/default/ufw
#replace DROP with ACCEPT in DEFAULT_FORWARD_POLICY="DROP"
#save and exit
#Enable NAT and IP masquerading for clients
nano /etc/ufw/before.rules
#Add the following near the top
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
ufw status
Setup Keys and Start the Server
cp -r /usr/share/easy-rsa/ /etc/openvpn
mkdir /etc/openvpn/easy-rsa/keys
nano /etc/openvpn/easy-rsa/vars
#change export KEY_* values
#set KEY_NAME to "server"
#save and exit
#Generate the 2048 bit Diffie-Hellman pem file we pointed to in the openvpn config
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
#move to the easy-rsa directory
cd /etc/openvpn/easy-rsa
#Set the variables we configured
. ./vars
./clean-all
./build-ca #Accept all defaults
./build-key-server server #Accept all defaults
#Move the newly generated certificates to /etc/openvpn
cp /etc/openvpn/easy-rsa/keys/server.crt,server.key,ca.crt /etc/openvpn
#In /etc/openvpn we should have a server.conf, server.crt, server.key, ca.crt and dh2048.pem
#start the OpenVPN service
service openvpn start
service openvpn status
Setup keys for the first client
./build-key client
ls keys
#Make a new directory to merge the client configuration and keys
mkdir ~/client
#Copy the example client configuration renaming the file extension from conf to ovpn
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client/pineapple.ovpn
cd /etc/openvpn/easy-rsa/keys
cp client.crt client.key client.ovpn ~/client
cp /etc/openvpn/ca.crt ~/client
Securely copy client.crt, client.key, ca.crt and client.ovpn to your client device
cd ~/client
#determine public IP address
ifconfig
nano pineapple.ovpn
find remote and replace my-server-1 with IP address of VPN server
uncomment group nogroup
uncomment user nobody
comment out the ca, cert and key directives
save and exit
echo "ca" to pineapple.ovpn
cat ca.crt to pineapple.ovpn
echo "/ca" to pineapple.ovpn
echo "cert" to pineapple.ovpn
cat client.crt to pineapple.ovpn
echo "/cert" to pineapple.ovpn
echo "key" to pineapple.ovpn
cat client.key to pineapple.ovpn
echo "/key" to pineapple.ovpn
~-~~-~~~-~~-~
Please watch: "Bash Bunny Primer - Hak5 2225"
• Bash Bunny Primer - Ha...
~-~~-~~~-~~-~
____________________________________________
Founded in 2005, Hak5's mission is to advance the InfoSec industry. We do this through our award winning educational podcasts, leading pentest gear, and inclusive community - where all hackers belong.
You are by far the best teacher for soft soft . It's very complicated at first - overwhelming, actually - but, you make it doable for
Yes vote for IPv6 episode in depth!
why you want to know about ipv6?
I love my Pi, but i bought a refurbished HP ProLiant DL360 G7 for less than $200 off Amazon and this thing is a beast. I’m loading down every home service I need, from Plex-Media to DNS Blackhole. I’m looking forward to testing this OpenVPN install video when I get home tonight.
Thanks Hak5. As always, your tutorials are second to none. Fun, detailed, and insightful in ways only seasoned veterans of the field can provide.
i love the way you put everything you used in the description makes it easier to refer to
You guys rock. I just followed this video and set up an OpenVPN server on a Raspberry Pi on my home network. and it works. I must confess that I followed another of your vids about OpenVPS SA on a VPS, and that didn't work for me (I kept getting four different 10.x.x.x subnets, and the gateway at home (the Pi) and the client (a laptop) ended up on different subnets) , and the simplified script based setups out there in Internet Land didn't work for me either (I think it may have been routing issue). Anyway - it's working now. Great!
Keeps up the good work.
This was a great run through. Thanks so much for making this pretty straight forward. This gave me what I did not have before. Going through docs and tutorials and the like it always had a LOT of extra. This was just a handbook on "Lets just make this work." You rock!
just 3 years away from 2026. You did great job regarding explanation.
Awesome episode, welcome back guys!
Darren did a really good job of keeping a 50+ minute setup and operation video interesting. I bet this is going to help a lot of people! Setting things up on my Pi 3 right now!
This is very good and well done. Just very thorough IMAO. Been researching this for some days now and this is the best I have come across so far.
I just fixed my own Pi3-based OpenVPN box thanks to your tips about the firewall.
Thank you very much!!
I'm a total hacking noob, but this was so much fun to watch. I'll get this running, and I'll also enjoy seeing your videos about raspberry pi and RF. Keep up the good work!
Thanks for the kind words, I'm always happy to help! Let know if you'd like any videos on specific topics in the future. I wish you all the
an episode on ipv6 would be great. Thanks for the amazing video, guys.
Finally a complete step by step tutorial, and it works, got it working on a Ubuntu 16.04 desktop and a nVidia Jetson TK1. Awesome ! Thanks !
In fact it works well locally but not over the Internet. My client gives a TLS Error: TLS key negotiation failed to occur within 60 seconds.
It looks like a firewall issue on port 1194. Anyone got this error ?
Is it port forwarded?
You mean on the router? I have a basic router where I can only do simple port mapping : I can set a local IP address, a protocol, local port and public port. I set my vpn server local IP to UDP and both ports to 1194, but it is not working. Is there something I missed ? Or my router is not suitable ? Thanks!
Any router should have some form of port forwarding. What router do you have?
I have the Vodafone EasyBox 804. Do you recommend any router ?
The Best Explanation !!! I referred to many videos , but out of all tNice tutorials was the best I could find among all .... Also got to know many tNice tutorialngs
Tried it out on a virtual machine first. Worked first time! Soon to be on my cloud server.
Nice one guys!
I "hacked" my way through this alone. I wish this video was available when I was working this out. Needless to say my solution is functioning the same but I ended up making things a bit more complicated. Great job on this video!
I would like to see an ipv6 video.
this is the best tutorial i have ever seen on the net.
Thanks Darren, I was pulling what little hair I have left trying to configure an OpenVPN server.
Off to deploy this tech for my travels.
Snubs, the mnemonic helps me where the wrong character can make you elated or deflated.
i truly support ur programs guys because I am a unix guy.
I know, I know, 2 years later...
First, thanks for this - its very informative, and you'd be surprised how few VPN server setup walkthroughs there are out there. If you all are still paying attention to comments, it might be cool to give a refresher on why "allow ssh" on its own isn't very safe (just explain you're keeping your putty session active). Not sure if you guys have done a ssh keypair video but i'd love to see an updated/current one.
This is the first of your vids I've watched - you guys are super fun, subscribed.
great show guys loved the detailed content and the long duration with comprehensive walk through. much appreciated.
WOW, what a fantastic demo. I could follow every step. It was all crystal clear and matched my requirements precisely. Nice hats too.
All working perfectly after realising I'd messed up by uncommenting the line "tls-auth ta.key 0 #" as directed by some shoddier how-to page. My bad should have come here first!!!. But Seriously, this was great. Thank You Thank You Thank you.
Of all the effen tutorials, you guys got me up and running. Thank you!
In 5 years I will come back to say that even though we have fireguard, this is still relevant
Great job! You guys should do a video where you tunnel openvpn through Stunnel or any other methods that can bypass deep packet inspections. Getting Stunnel to work took me 10+ hours so I would love to see what other methods you guys can pull off!
Would love to see an in-depth IPv6 episode showing up! Keep up the good stuff! :)
@Hak5 - I can't like this episode enough times!
I will be playing around with OpenVPN server running on OpenWRT to manage a few remote networks. I also loved episodes #2017 and #2018; I'm drafting some ideas for my backpack "Network pocket" (housing hotspot gear, and extra storage, etc)...
I'll publish a photo and tag yo guys. I need an extra nano =). #jokeNotjoke.
Anyway - Love your show. I've been a fan for over nine years!
Welcome back Hak5, welcome back!
This tutorial helped me out so much, both of you are great. Thanks!
Congratulations on the podcast Award.
Yes, do an IPv6 episode! We need more people to be aware of, and fluent with, IPv6!
for all the raspberry pi users check out pivpn it is the easiest way to install openvpn
You guys are lovely. Thank you for a great video, I learned a lot here.
Please update this tutorial again. Make it based on new versions. Thanks. Awesome channel.
Thanks for the tutorial , now I get the server running on my Rpi ! Feel for u guys and keep it up~
HEEELP!
at around 36:18, he says he gets the new tun0 network interface, because he had started the openVPN service, but I don't get that device when I type ifconfig...! :-\ Why is that...?
I am running Debian 8.6 on Pi
Literally the greatest
IIIIIIIIIIII LOOOOOOOOOOOOOOOOOOOOOOOOOOVEEEEEE YOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU I spent straight 3 hour on the Arch wiki and now it work omg I was so so close 17:41 I put tun0 instead of the real one lmaoooo i'm so glad it work
+1 for an 'ipv6 for dummies'!!!
Bro it’s very intimidating! I’ve been slacking on it for a month now. The symbols are very confusing. You have to train your mind to
good work and thank you so much, Greetings from Egypt
Great tutorial
A while ago I was looking for him
been waiting for this
I miss these videos threatwire is pretty boring i can get that news any day of the week!
please make the ipv6 video
Yes please.
Yes please ipv6 video i remember it is a bunch of hex bytes to write one ipv6 address and i hate hex i have ten fingers :(
I would like to see that as well. Its one of those things im not too keen on =/
: ) The trick is to use the ridges in your fingers, along with the top of each. We have 8 fingers with 4 bits on each half byte, or hex from 0-F on one hand and 00-F0 on the other. This makes thinking binary and hex a little easier. Look up the Hexadecimal finger-counting scheme.
anders ballegaard and I was feeling lost before you told me it gets more complicated.
Fantastic tutorial guys. Thank you for making this video.
You guys are great! Keep up the good work!
Right here with ya, bro
Man I love when things are badly documented
Please do a Ipv6 episode!
will you ever post an updated version of this? half of the commands just wont work at all since easy-rsa has updated so much.
and you are using sysV while 2020 pretty much uses systemd
you're doing great, thanks!
I would like an IPv6 episode
Also why the Return on empty lines between commands?
the empty lines is to keep things clean he always do that.
Great video! But, this means for every user I have to create a user account on that Linux server?
Can you guys do an episode on how o set up openVPN with a connection tethered from your phone ? You mentioned that's how you operate at home, and so do I. Would hugely appreciate it... And yeah we don't mind long episodes :-)
Hey guys, been a real fan for a long time, quisck question... when you mentioned to be able to through this build into an arduino... any arduino specific in mind?
don't you have to port forward in you router ? i'm confused this is different from other OpenVPN setups
I did all of this and it's not what i'm looking for, BUT HEY I LEARNED SO MUCH ABOUT LINUX FROM THIS VIDEO !!! thanks guys.
I recomnd you two to buy the Producer Edition (And if you have got money, buy the Full Bundle)
i love you guys. thanks for the awesome videos
Yes, IPv6 and networking protocols please!
love the hats!
and build tracks from there and leave the rest for a later session. I did both but did the first way initially and it took a day to get through
Well said at the end.
you can make alarms & notifications with iptables when can you do a tut on this? :) it takes some googling but last time i checked it got advanced lol
Thank you!! . gonna try this on my PI. I now know the steps I missed :D
I would love a IPv6 video!
Darren, whats the deal with the bandana on your wrist? Is that for a purpose or fashion?
thanks a lot! you are a cool team!
Did you get fruity or producer edition? Im looking to buy soft soft but i dont know if Producer edition is worth it...
Dear Hak5 Team, it was a great tutorial! It helped me learning the complete process of setting up VPN very clearly. But I was wondering how to scale it up? For example, the openvpn server is running in one instance now. But how to use another instance behind a DNS (or Load balancer) so that the IP remain same but my service can handle more clients? Need this concept for academic purpose. Will you please make a tutorial on this topic, it will be really helpful. Thanks
would like to see a ipv6 episode as well.
Hey, I just wanted to check briesofty if there is a way for to import a new soft into the program, for example softs or sotNice tutorialng that
Edit :
My appologies. When using a config file, omit the leading double dash "--" for the command. Simply put tun-ipv6 in it, then follow the rest.
Original Post
"For IPv6, you need to add the --tun-ipv6 to the profile/config file. You then replace IPv4 addresses with IPv6 addresses.
Be warned. Most people are NOT on IPv6 yet, as most admins don't want to take the time to comprehend what the new formula is. Also, subnets become a thing of the past, due to the number of possible addresses being such that you could assign one to every grain of sand on Earth....
Option explained :
--tun-ipv6 Build a tun link capable of forwarding IPv6 traffic. Should be used in conjunction with --dev tun or --dev tunX. A warning will be displayed if no specific IPv6 TUN support for your OS has been compiled into OpenVPN."
this is fantastic!
Thank you very much for this nice guide!
I feel you!
Awesome tutorial 💯 thanks
Have you guys done a segment on proxy-chaining ?
how about a video on site to site VPN please? is it possible for both the sites to communicate on the same subnet?
Thanks a lot for your hak.
So apparently if you change the port in both server.conf and your .ovpn file, you still need to have 1194/udp allowed in ufw, or else it doesn't work. Is there something in the openvpn code that's talking localhost over that port? Or is it the 10.x.x.x server network that needs it?
hi,
when I entered the "service openvpn start" command, I got "active (exited)" as a status and didn't get the tun0 either. Then, after searching in Google, I realized that after Ubuntu 18.04, services get started with the "systemctl start [service]" command. But then, I got the an error and after looking at the log, it seems openvpn was looking for a file called "ta.key". It wasn't there, so the service didn't start. Lastly, I searched Google again and found out I had to go to /etc/openvpn and run the "openvpn --genkey --secret ta.key" command. After that, the service could be started and I had the tun0 interface show up. Now here's the question. Do I need to replace the "service.key" we made in this tutorial with the "ta.key" I just made, or are they two different things for two different uses?
If you’re getting a KEY_CONFIG error stating the openssl.cnf is not correct or similar, use this while in the specified directory of the issue (where build-ca is located): ln -s openssl-1.0.0.cnf openssl.cnf
i always wordered, what laptop is Shannon using??
Shannon's mike seemed a lot louder than Darren's in this ep, just me? great ep though (y)
thanks a lot + Please do a Ipv6 episode!
IPv6 episode FTW!
HEEELP!
at around 36:18, he says he gets the new tun0 network interface, because he had started the openVPN service, but I don't get that device when I type ifconfig...! :-\ Why is that...?
I am running Debian 8.6 on Pi
I found the error I made. In this video, he names his crt and key files the standard 'server' name. I made my files with a custom name for myself, and I had to define my own filenames in the server.conf config file. After that and restart the service, my network interface popped up, and it was working :) If you are going with custom names, don't forgtet to define the custom client keynames in the OVPN file too
Ilannguaq Kivioq for a grand total of 4 files right? server.crt server.key client.crt client.key
Ilannguaq Kivioq nevermind. rebooted and now I'm getting tun0
Hey just finding you two and love the video. I just recently tried to install openvpn on my Ubuntu 16.1 laptop and had a couple of questions. 1. is this usefull when you're travelling a lot, or rather is it still affective? 2. not sure why but I can't see openvpn in the manager, have I done something wrong?
Please install and use ranger for your shell footage. Please...
Hi Is this method possible to get a ip adress for other country so it looks like I am in other country?
I have a private network and ubuntu servers one with 6 websites in wordpress and some computer and a static ip.
I like to use the vpn to let me see norwegian tv on internet when I am abroad. Is this what I need?
It appears that there have been a number of changes since 2016. Wondering if you might do an update for 2019?
(I initially thought this was a 2019 tutorial because of the title.)
When I did this I ended up sending the cert to my android and it was wanting to connect to my internal network address rather than my external network?
is it automatically enabled to connect unlimited concurrent clients/devices or there is such config to make it do so ?
Are there any extra steps when setting up a server that will be accessed through nat?
So openvpn is creating a symmetric keys the background and putting it into the .ovpn file?
In the demo, you guys used ovpn, is that going to work for just any client; link me connecting CentOS client machine?
I'd add one thing... you probably should put your CA on another server than your openvpn server, just in case it gets compremised.
else if the openvpn server gets cracked all they have is the CA's public key and not the private key to create their own valid vpn client confs
awesome vidorial* (new word) anyways I have a problem setting up the tap0 device in openvpn since I running this from a rPi I have it connected through ethernet. is it the same as the tun setup?