#!/bin/bash
# Want to know more? Follow me on telegram: https://t.me/linuxcheatsheet
# Quick and dirty ssh vpn
# 1) run on your pc as root with RUN_ON_CLIENT=y
# 2) run on your server as root with RUN_ON_CLIENT=n
# 3) from your pc
# ssh -C -w 2:2 root@yourserver
# 4) open another terminal in your pc and try to ping 10.0.0.1
# I just suppose that tun2 is always a free name. please verify
TUNDEV=tun2
# create a point-to-point network
# between 10.0.0.1 (server) and 10.0.0.2 (client)
# please adapt to your network if needed
IPSERVER=10.0.0.1
IPCLIENT=10.0.0.2
CIDR=30
# Set to 'y' and run on your PC
RUN_ON_CLIENT=y
# Set to 'n' and run on server side
#RUN_ON_CLIENT=n
# Check ssh configuration PermitTunnel
if ( grep -qE "^[^#]*PermitTunnel.*yes.*$" /etc/ssh/sshd_config || [ "$RUN_ON_CLIENT" = "y" ] ); then {
echo "ssh PermitTunnel already enabled"
} else {
echo "reconfiguring ssh..."
sed -i "s/.*PermitTunnel.*//" /etc/ssh/sshd_config
echo "PermitTunnel yes" >> /etc/ssh/sshd_config
echo "ssh will restart in 5 sec. Please logout and reconnect to ssh"
sleep 5 && service sshd restart
exit 0
}
fi
# Prepare /dev/net/tun device node
if ( [ -c /dev/net/tun ] ); then {
echo "Creating tun device node"
[ -e /dev/net/tun ] && rm -f /dev/net/tun
[ -d /dev/net ] || mkdir /dev/net
mknod /dev/net/tun c 10 200
chmod 0666 /dev/net/tun
}
fi
# Load tun module if not yet loaded
modprobe tun
if ( [ "$RUN_ON_CLIENT" = "y" ] ); then {
IP=$IPCLIENT
} else {
IP=$IPSERVER
}
fi
# Create tun interface
ip tuntap add dev $TUNDEV mode tun
ip addr add ${IP}/${CIDR} dev $TUNDEV
ip link set dev $TUNDEV up
if ( ping -c1 -w1 $IP &> /dev/null 2> /dev/null ); then
echo "*** $TUNDEV is up with $IP ***"
fi
exit 0