and sent to remote server, that writes them to his interface, and vice
versa. Client and server use pre-shared authentication key (PSK).
Because of stateless UDP nature, after some timeout of inactivity peers
-forget about each other and have to retry handshake process again. As a
-rule, there are enough time-to-time traffic in ordinary Ethernet
-networks to heartbeat connection.
+forget about each other and have to retry handshake process again,
+therefore background heartbeat process will be ran.
Handshake is used to mutually authenticate peers, exchange common secret
per-session encryption key and checks UDP transport availability.
uses fast cryptography algorithms with 128bit security margin, strong
mutual zero-knowledge authentication and perfect-forward secrecy
property. An attacker can not know anything from captured traffic, even
-if pre-shared key is compromised.
+if pre-shared key is compromised. Rehandshake is performed by client
+every 4 GiB of transfered data.
+
+Also you can provide up and down scripts that will be executed after
+either connection is initiated (up-script in background), or is went
+down. The first argument for them is an interface name.
COMPARISON TO OpenVPN
* Zero-knowledge authentication (pre-shared key is not transmitted in
any form between the peers, not even it's hash value)
* Higher performance in some cases
+* Fully IPv6 compatible
CONSOLE OUTPUT LEGEND
MTU for the link is 1476, however it does not take in account TAP's
Ethernet frame header length, that in my case is 14 bytes long (1476 - 14).
- gateway% ip addr add 192.168.0.1/24 dev wlan0
- gateway% tunctl -t tap10
- gateway% ip link set mtu 1462 dev tap10
- gateway% ip addr add 172.16.0.1/24 dev tap10
- gateway% ip link set up dev tap10
- gateway% govpn -key KEY -iface tap10 -bind 192.168.0.1:1194
-
- pc% ip addr add 192.168.0.2/24 dev wlan0
- pc% tunctl -t tap10
- pc% ip link set mtu 1462 dev tap10
- pc% ip addr add 172.16.0.2/24 dev tap10
- pc% ip link set up dev tap10
- pc% ip route add default via 172.16.0.1
- pc% while :; do govpn -key KEY -iface tap10 -remote 192.168.0.1:1194; done
+ common% umask 066
+ common% echo MYLONG64HEXKEY > key.txt
+
+GNU/Linux IPv4 client-server example:
+
+ server% ip addr add 192.168.0.1/24 dev wlan0
+ server% tunctl -t tap10
+ server% ip link set mtu 1462 dev tap10
+ server% ip addr add 172.16.0.1/24 dev tap10
+ server% ip link set up dev tap10
+ server% govpn -key key.txt -iface tap10 -bind 192.168.0.1:1194
+
+ client% ip addr add 192.168.0.2/24 dev wlan0
+ client% tunctl -t tap10
+ client% ip link set mtu 1462 dev tap10
+ client% ip addr add 172.16.0.2/24 dev tap10
+ client% ip link set up dev tap10
+ client% ip route add default via 172.16.0.1
+ client% while :; do govpn -key key.txt -iface tap10 -remote 192.168.0.1:1194; done
+
+FreeBSD IPv6 client-server example:
+
+ server% ifconfig em0 inet6 fe80::1/64
+ server% ifconfig tap10 create
+ server% ifconfig tap10 inet6 fc00::1/96 mtu 1462 up
+ server% govpn -key key.txt -face tap10 -bind fe80::1%em0
+
+ client% ifconfig me0 inet6 -ifdisabled auto_linklocal
+ client% ifconfig tap10
+ client% ifconfig tap10 inet6 fc00::2/96 mtu 1462 up
+ client% route -6 add default fc00::1
+ client% while :; do govpn -key key.txt -iface tap10 -remote [fe80::1%me0]:1194; done
+
+Example up-script:
+
+ client% cat > up.sh <<EOF
+ #!/bin/sh
+ dhclient $1
+ rtsol $1
+ EOF
+ client% chmod +x up.sh
+ client% govpn -key key.txt -iface tap10 -remote [fe80::1%me0]:1194 -up ./up.sh
If client won't finish handshake during -timeout, then it will exit.
If no packets are received from remote side during timeout, then daemon
-will stop sending packets to the client and client will exit. In every
+will stop sending packets to the client and client will exit. In all
cases you have to rehandshake again.
TECHNICAL INTERNALS