VPN via SSH

Run Settings
LanguageBash
Language Version
Run Command
#!/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
Editor Settings
Theme
Key bindings
Full width
Lines