Network2/Experiments/Openvpn
< Network2 | Experiments
Jump to navigation
Jump to search
VPN server configuration
In this experiment, we're going to configure openvpn and radvd on a machine (teach.laptop.org) with a public IPv4 address. Truthfully, this combination is probably overkill, but the task of constructing it seemed like it might to offer valuable experience, e.g. for someone who wants to bridge multiple kinds of tunnel endpoint or who wants to load-balance lots of peers between a couple of endpoints.
# Install our VPN and route advertisement software. apt-get install openvpn radvd # yum -y install openvpn radvd # add nobody:nobody groupadd nobody useradd nobody usermod -a -G nobody nobody # Configure radvd cat > /etc/radvd.conf <<EOF interface tap0 { AdvSendAdvert on; MinRtrAdvInterval 30; MaxRtrAdvInterval 100; prefix 1234:db8:1:0::/64 { AdvOnLink on; }; }; EOF # enable forwarding everywhere sysctl -w net.ipv6.conf.all.forwarding=1 # flush the forwarding table ip6tables -F FORWARD # really, I /want/ a multi-user version of # openvpn --dev tap --user nobody --group nobody --verb 6 # but I'm not sure how to get that. instead, I'll use some fake keys and no ciphers. mkdir -P keys && cd keys wget http://teach.laptop.org/~mstone/sample-keys.tar.bz2 tar xf sample-keys.tar.bz2 && cd sample-keys # create a multi-user tunnel openvpn --mode server --client-to-client --dev tap --user nobody --group nobody --verb 6 --opt-verify --tls-server --client-connect /bin/true --auth-user-pass-optional --duplicate-cn --auth-user-pass-verify /bin/true via-env --dh ./dh1024.pem --ca ./ca.crt --cert client.crt --key client.key --script-security 3 --auth none --cipher none & # at any rate, bring up the interface so that we get link-local addresses ip link set tap0 up # turn on the route advertisement daemon radvd -d 5 -m stderr &
VPN client configuration
The purpose of this experiment was to test the VPN configuration described immediately above.
# install vpn client apt-get install openvpn # yum -y install openvpn # add nobody:nobody groupadd nobody useradd nobody usermod -a -G nobody nobody # download fake keys. mkdir -P keys && cd keys wget http://teach.laptop.org/~mstone/sample-keys.tar.bz2 tar xf sample-keys.tar.bz2 && cd sample-keys[1] [2] # connect to the vpn openvpn --user nobody --group nobody --dev tap --remote teach.laptop.org --tls-client --ca ca.crt --cert ./client.crt --key client.key --auth none --cipher none & # bring up the interface ip link set tap0 up # find other people ping6 -I tap0 ff02::1 # if using dnshash, attach dnshash attach <your>.<domain>.<name> # ... test, as described above ...
Observations:
- TLS imposes a high latency cost, even with null algorithms.
- TAP devices work rather nicely, at least for tiny networks.
- Be careful of firewall rules!
- radvd is perhaps unnecessary with a single virtual ethernet -- dnshash "suffices" -- though it might be useful for routing between several load-balanced ethernets.
- The default IP sorting rules and route priorities mean that it may take a long time for a connecting app like ssh or nc6 to connect to the /correct/ dnshash address.