]> Cypherpunks.ru repositories - govpn.git/commitdiff
Simple script to handle default routing
authorZhuoyun Wei <wzyboy@wzyboy.org>
Sun, 7 Feb 2016 13:02:46 +0000 (21:02 +0800)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 12 Feb 2016 07:52:32 +0000 (10:52 +0300)
utils/addroute.sh [new file with mode: 0755]

diff --git a/utils/addroute.sh b/utils/addroute.sh
new file mode 100755 (executable)
index 0000000..743bbd5
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/bash -x
+
+# A simple script handling default routing for GoVPN,
+# inspired by vpnc-script, but much simpler.
+
+# List of parameters passed through environment
+# - reason               -- why this script is called:
+#                           pre-init, connect, disconnect
+# - VPNGATEWAY           -- public address of vpn gateway
+# - TAPDEV               -- tap device
+# - INTERNAL_IP4_ADDRESS -- e.g. 172.0.0.2/24
+# - INTERNAL_IP4_GATEWAY -- e.g. 172.0.0.1
+
+
+set_up_dev() {
+  ip tuntap add dev $TAPDEV mode tap
+}
+
+
+tear_down_dev() {
+  ip tuntap del dev $TAPDEV mode tap
+}
+
+
+do_connect() {
+  OLDGW=$(ip route show 0/0 | sed -e 's/^default//')
+  ip link set dev $TAPDEV up
+  ip addr add $INTERNAL_IP4_ADDRESS dev $TAPDEV
+  ip route add $VPNGATEWAY $OLDGW
+  ip route add 0/1 via $INTERNAL_IP4_GATEWAY dev $TAPDEV
+  ip route add 128/1 via $INTERNAL_IP4_GATEWAY dev $TAPDEV
+}
+
+
+do_disconnect() {
+  ip route del $VPNGATEWAY
+}
+
+
+case $reason in
+  pre-init)
+    set_up_dev
+    ;;
+  connect)
+    do_connect
+    ;;
+  disconnect)
+    do_disconnect
+    ;;
+esac