Show HN: Use Ansible to Run a “friends and Family” OpenVPN Server on Digital Ocean
github.com
github.com
I set up Streisand on a $5/mo Digital Ocean droplet a while back and the whole family uses it on all our devices with great results. It is pretty much a 'fire and forget' solution that I haven't had to touch in over a year.
That said, if I was going to pick one protocol out of the selection offered by streisand, it would be l2tp/ipsec instead of openvpn (assuming you're hosting on digital ocean. The networks on AWS and GCE are more restrictive and you can't serve l2tp/ipsec from there). I found this to be easier to set up (the client-side software is already included in most operating systems) and to have the best performance.
I posted this elsewhere but it bears repeating. This project is designed to be simple, auditable, and disposable, and have the minimum attack surface and maintenance costs.
Other tools are great, but the cost of swapping certificates and IP addresses and zone files can weigh you down.
Streisand would do well to have numerous playbooks that remix roles for smaller services (if they don't already).
I wish they would allow VPN users through based on an address based authentication.
Both even use Ansible.
I also am not pleased that their easy-rsa tarball is not easily auditable rather than pulling it as a subrepository directly from OpenVPN.
edit: I have audited the easy-rsa tarball. It's still not a totally appropriate way to manage things.
Also this project is intended to be broadly accessible to people who feel they can do the basics of managing a server.
I have a VPS and I use it for webhosting for myself and some friends. I've thought about (in some cases tried) and then decided against setting up my own mail server, my own irc bouncer, my own xmpp server and my own cloud storage. Each time, the killer was basically "I could do this, but it would take too long to figure out and it would probably not be super secure at the end.
At the very least, a project like Sovereign (written using something as declarative and idempotent as Ansible) would be great to look through and see how it manages certain things.
And that doesn't detract from your project, OP - I like that your focus is tight and your setup instructions detailed. I'm far more likely to actually try installing a small project like yours than a behemoth that will change who knows what throughout my system.
I'd be interested in something like this with a strong focus on security.
Just be aware the authors deliberately target only very recent clients. [2]
I recently spun up a new Algo instance on an Ubuntu host and discovered I could no longer SSH from an old Snow Leopard Mac because it locked sshd down to only 'modern ciphers'[3].
(No affiliation, just a fan)
[1] https://github.com/trailofbits/algo
[2] https://github.com/trailofbits/algo/issues/168
[3] https://github.com/trailofbits/algo/blob/master/roles/securi...
last time I set up an openvpn server on digitalocean without `tun-ipv6`, it leaked my ISP's ipv6 address to the internet while my ipv4 address was correct (a digitalocean address). disabling ipv6 on a vpn by default doesn't make a lot of sense to me if the intention is a layer of privacy around your ISP.
most of what you need to do with ipv6 is analagous to what you'd do with ipv4 like remembering to uncomment net.ipv6.conf.all.forwarding=1 in /etc/sysctl.conf ( just as you would with net.ipv4.ip_forward). use tun-ipv6 instead of tun, and server-ipv6 in addition to server. ip6tables rules in addition to iptables rules. etc etc. although that may be it -- can't think of anything else of the top of my head. I'll look more at your code and see if there's anything I can help with as time allows- ping me if I forget :)
Which means anything he was connecting to that was IPv6 capable was not using the VPN.
https://www.digitalocean.com/community/tutorials/an-introduc...
https://www.digitalocean.com/community/tutorials/how-to-set-...
https://www.digitalocean.com/community/tutorials/how-to-secu...
There are a dozen or so tools mentioned in the above.
ssh -D {port} {server}
?