Quick actions

cmd+k|ctrl+k

Navigation

Languages

VPN via SSH

Snippet info

Language

Bash

Visibility

public

Author

gurutech

Created

2018-01-14T14:50:14Z

Updated

2018-01-14T14:50:47Z

#!/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
INFO