How to build your own VPN if you're wary of commercial options
arstechnica.com
arstechnica.com
Define "easily" as used in this context. Easy is a product of whom your enemy is.
Is your enemy your ISP? If that's the case, I don't think it's "easy" for them; they would have to pay Digital Ocean or Amazon to get your data, and probably isn't really that valuable to them.
Is your enemy the MPAA? If that's the case, I still don't think it's particularly "easy" for them. Unless you are a MAJOR pirate distributor, the extra effort(money) to track you down isn't worth it.
Is your enemy the NSA or the FBI? If that's the case, then yes, it's trivially easy for them to Subpoena digital ocean or amazon to get your data, but similarly they can use techniques on PIA to get your data too.
In the end, it comes down to whom you trust with your data. And whether you want a managed VPN service, or are willing to put up with the inherent problems of maintaining your own system. will PIA sell your surfing habits to advertisers, will DO sell your surfing habits to advertisers? Who gives faster speeds?
1: https://torrentfreak.com/vpn-providers-no-logging-claims-tes...
WireGuard is not yet complete. You should not rely on this code. It has not undergone proper degrees of security auditing and the protocol is still subject to change.
also, the protocol itself is still considered 'version 0' with lots of possible changes on their website.
looking forward to it maturing though.
Having worked web security -
This is always a battle - for big operations you've got people farming out signups using stolen data to random 'buddies' on the other side of the world with the dark hat team ready to stand up outbounding traffic as fast as they can get a processor to execute it on, not to mention the hosts that get cracked automatically..
It's whack-a-mole on crystal meth.
Traffic analysis is a term of art in cryptanalysis and SIGINT, in case you were not familiar: https://en.wikipedia.org/wiki/Traffic_analysis
At a minimum, my ISP can not see or tamper with DNS requests. My VPS nodes are multi-purpose so it isn't really extra cost.
This also gives me the capability to intercept some of my traffic and route it over my VPN using a combination of haproxy and squid. I can do this by source PC, or by destination, or protocol, or any combination thereof.
For me, this has worked great for years and gives me a lot more flexibility, options and control over my data flows. If I want more privacy, I can use my existing tc cbq QoS and rate limited rsync's of random noise to hide some traffic patterns.
Are you encrypting each DNS packet at the source (e.g. your home recursor/DNS-forwwarder)?
If yes, when are your sent packets decrypted? At the authoritative nameserver, or at some intermediary recursor?
If no, how do you believe that your DNS packets are opaque and tamper resistant?
There are very few authoritative nameservers on the internet that accept and return encrypted DNS packets. Thus third party recursors must send out unencypted DNS packets. Nothing protects these unencrypted packets from being captured, viewed or tampered with.
It sounds more like you are creating a chain of recursors (that you control?) to make tracing the requests more difficult.
If you are using any third party recursors are you concerned about applications you use that implement support for ends-client-subnet extensions?
From there, for sure, the risk increases. I am not sure I trust DNSSEC to help me much. That said, I rotate through many local recursors at each location, so they have to rewrite my traffic right as it leaves my node. That is doable, but that isn't really what I am defending against. Anything I care about, I validate in a script and write into /etc/hosts.
You are correct, there are not that many recursors that support TLS.
Beyond that, things like software updates I don't trust DNS at all and certainly not public mirrors. I validate packages with GPG signatures. Even that is tricky, because chicken+egg, so I validate the GPG sigs from trusted sources.
On a funny side note, you would be surprised how many people rely on trusting GPG keys that are contained in a package, signed by those same keys, in the same repo.
OP is "creating a chain of recursors (that you control?) to make tracing the requests more difficult"
but also, as a result less difficult to tamper with by a less trusted party such as a mass market commercial ISP - tampering with his forwarder would entail either tampering with random many other peoples traffic or compromising the 'percieved as more secure' ISP.
Pretty sure someone mucking around with TTL's on these packets to make sure they don't get too far out of intended range and the numerous other things would be aware of these issues..
You could use the other github scripts that folks have linked for setting up the VPN. Then you would want to set up recursive DNS servers on your home router and VPS nodes. Then look into iptables mangle to intercept DNS, NTP, etc. HAProxy L4 vip on the router is an easy way to forward some web traffic to Squid running on multiple VPS nodes. Squid has an intercept mode you can use for any traffic you want to throw at it. Unbound DNS can override min-ttl and allows overriding partial or complete DNS zones for block some shenanigans. Calomel.org has some articles on some of these things.
It's probably even better if you research each step yourself so that adversaries have to work harder to generalize attacks around your configuration.
I love HN
Yes, but what good is a VPN where you cannot trust your own network? I would have zero trust in any closed source private VPN. There are ways to gain anonymity from your host that wont require setting up a MITM attack vector for your traffic.
I could totally see that many people wouldn't care about this particular thing.
Browser and device fingerprinting have become very powerful making VPNs not a very solid solution.
and the only solution seems to use Tor-browser with javascript disabled, which makes browsing the web a pain-in-the-ass.
...but they require a valid credit card/paypal deposit beforehand, which kills the whole point.
edit: there's a list of providers allowing only bitcoin as payment method: http://cryto.net/~joepie91/bitcoinvps.html
Whether or not that's important depends on your risk model.
1. I frequently need to connect via open, untrusted local networks, such as those at hotels.
2. Many commercial VPNs (e.g., PIA) end up having some portion of their endpoint IPs end up on blacklists and break a lot of sites.
Anonymity from the government is a lower priority than both of the above, and I acknowledge the lack of it in my risk model.
Initially I started out just running a Streisand[0] server, but its scope and overall speed were unsuited for my wants. Now it's just a barebones VPS with OpenVPN running, and I connect to it primarily through a travel router.[1] Longer term I would like to develop an Ansible playbook so that I can quickly deploy a new endpoint at a close VPS when traveling if the need arises for better speed.
[0]: https://github.com/jlund/streisand
[1]: https://www.amazon.com/gp/product/B01I92T754/ref=oh_aui_deta...
Yup. I cannot use these in good faith. I've gotten burned really badly by using shared VPNs and payment-type sites. I roll my own on a no-log VPS paid in Bitcoin through a mixer, registered to a false name/address.
That's why I have been using and recommending for a while, I've not had any speed issues. Currently running it on a t2.micro in AWS.
For anybody who wants steps on setting it up with an unsupported provider, I wrote a blog post on exactly that recently: http://modulolotus.net/posts/2016-03-28-setting-up-algo/. I used Vultr, but it should help for any Ubuntu-based server.
One minor issue I experienced: I have not had a good experience using Digital Ocean for VPNs. I tried manually setting up OpenVPN on it a while ago and got really bad upload speed (admittedly, I could have misconfigured it). With Algo, the speed seemed okay, but I would frequently "disconnect" every hour or two. According to Windows, I was still connected to the VPN, but my traffic wasn't getting out; I'd have to manually reconnect to get Internet access again.
I set up Algo on Azure a month ago and have had no problems at all. I'd highly recommend Algo if you're looking for ISP/untrusted network protection and pseudo-anonymization (3rd parties just seeing a cloud IP rather than your home IP).
1. AWS, DO or Linode won't respond to a subpoena
2. That any of those three won't have extensive logging in place, without the privacy goals that a VPN provider would have
You're just switching your ISP to AWS when you do this, which might be better than what you've got, but certainly isn't flawless untraceable security
I do something similar to this. The goal isn't avoiding legal liability or based on the belief that AWS, et al are friendly.
There are multiple reasons, but the single biggest is to thwart last-mile surveillance by my ISP. That alone is worth $10/mo and a few minutes of setup.
These private VPN solutions simply protect all your traffic from ISP interference.
It is possible the ISP not only injects ads but injects unique identifiers that the user never sees. These could be used to track the user across different devices and networks. This possibilty was suggested a few years ago by a well-known cryptographer in a presentation titled "How to manipulate standards".
Hosting your own VPN exit node, with you as the sole user, defeats this use case entirely.
Is there something about OpenVPN that doesn't support GCM?
I'm sure it was also present in 2.3.x - at the very least I'm certain that 2.3.10 I have on one host supports TLS-DHE-RSA-WITH-AES-256-GCM-SHA384 - but it could be distro-specific backports or something like that. At least 2.3 changelogs don't mention anything about AEAD or GCM specifically, and GCM support is featured in https://github.com/OpenVPN/openvpn/blob/release/2.4/Changes....
Anyway, 2.4 is out already.
In any case, AES-GCM is natively supported by OpenVPN 2.4, and Streisand as it is will configure it for you as part of the NCP ciphers list, with a fallback to AES-CBC if the client is a bit older [0]
[0] https://github.com/jlund/streisand/blob/master/playbooks/rol...
- One VPN to connect laptop on the road with machines at home LAN, and with VM:s on different hosts.
- Have this VPN "exit" via a commercial VPN-provider (for privacy).
Could I easily configure this? Have one of the VM's be the VPN server and configure it to "exit" trough the commercial VPN?
I haven't really managed / configured "real" VPN's, how does local access work? I.e, when I'm at home with my laptop and access my desktop that's on the same network, will the packets flow out to the remote VPN server and back, or can it resolve it locally somehow?
Also, will this break stuff that depend on Bonjour / ZeroConf (i.e Apple Airplay and stuff?)
This is easily doable, but it comes down to how much you trust your commercial VPN host. As it is, most of these service providers are pretty shady to say the least. If it were somehow possible to provide a service that is provably secure and log free, that would be a different story.
start with the lan and configuring interfaces statically.. then run your own router (manually) then setup your portion of VPN to your VM.
by that time, the rest will all make sense.
That misses the point. If the government wants to hack you, steal your traffic, etc, they can, VPN or not, 'no-log' VPN or not.
The point behind consumer-level VPNs is more to prevent the ISP-level tracking, the ad-targeting, etc, and to keep out hackers and get around government/institution blockers. For this, whatever well-reviewed service will do.
That's my project, thanks for the shout out!
For those curious the main feature of the Docker container is to wrap up the PKI generation and conf file generation for the 90% use case.
s/uses/may use/
Not every website uses SNI.
For example, the majority of sites linked to from HN do not use SNI.
Also, there are workarounds when SNI is not supported. Workarounds have been published by one major corporation who authors a popular web server software and runs a cloud hosting service.
Is SNI "the only way to do it"? No. There is another way to do stream encryption for mlutiple websites from one IP. It predates HTTPS. This idea goes back to one of the original authors of the world's first web server at CERN. The legacy of this idea survives today as the Websocket "Upgrade" header. Links to further reading below.
Because of groupthink dynamics among today's standards committee people and website owners who follow along, it appears that any online discussion of alternative options to SNI is met with swift dismissal.
http://www.ietf.org/rfc/rfc2817.txt
http://www.ietf.org/rfc/rfc2818.txt
The draft below refers to proxies but further searching will find papers he wrote about how to start an encrypted stream upon connecting to an HTTP server. Any service could sit behind one simple HTTP interface. This idea was revived in "Upgrade" header referred to above. Then forgotten as HTTPS became popular. Then revived again for "Websockets".
http://www.ietf.org/archive/id/draft-luotonen-web-proxy-tunn...
SNI is not the only solution, it is just one approach, and I suspect the next-generation encryption (a TLS alternative that will be readily adaptable to PQ) will not need to send domain names in the clear.
RFC2817's `Upgrade: TLS` is just like SNI except it requires an extra roundtrip and it only works for HTTP, not other TLS-enabled services experiencing the same issue (e.g. IRCS, FTPS, ...).
For an HTTPS server with a single certificate and no SNI handling, the domain name is (A) still leaked in plaintext by the initial DNS lookup, and (B) instantly visible by anyone who connects to the IP address.
Even if you plug the DNS hole, the fundamental issue is needing to secure communications with the remote server, before you even tell it what domain you're asking for. That can't work under the domain-validation CA model.
I suppose you could add an extra layer of indirection, by adding a certificate for the server itself; but that's just moving the chain of trust, and it's practically equivalent to a multi-domain SAN certificate.
http://www.ietf.org/archive/id/draft-luotonen-ssl-tunneling-...
Based on ipsec, so no extra software to install on the clients. Looked interesting.
All open-source, too.
- L2TP is the "layer 2 tunneling protocol", where the layer 2 is usually PPP, and an IETF standard;
- IPsec is designed to tunnel IP over IP, and an IETF standard;
- OpenVPN is a specific software and protocol, using TLS. IF memory serves well it can operate at both Ethernet and IP level, although IP is the most common.
It is used instead of pure IPSec because it allows non IP traffic, which in some cases is more important (e.g. windows non-IP netbios traffic interop when L2TP/IPSec was first made popular)
and to confirm, yes, OpenVPN will run in IP or ethernet mode.
I think the emergence of a functioning IPv4 market has actually tipped the scales backwards towards v4 unfortunately. I frequently hear from operators that v4 technology (and expertise managing it) for sharing addresses (NAT) is so mature and stable that there isn't much gain for them in the riskier bet on v6.
You would also be shocked at how many also consider the unsolicited ingress connection blocking caused by NAT to be a bonus security feature that v6 doesn't have.
I'm starting to become convinced I will be dead long before v6 dominates the world. :(
The best solution is to buy a vpn and stay secured. you can run it on - devices. I use ivacy because its $2 a month and working fine with me.