diff --git a/README.md b/README.md index d1b9c03..c476876 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # xiringuito -Bash SSH VPN wrapper +Obscene SSH VPN wrapper diff --git a/scripts/client-route.sh b/scripts/client-route.sh new file mode 100755 index 0000000..a5f2f49 --- /dev/null +++ b/scripts/client-route.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# +# Add client route [after setting up client] +# +set -e + +if [[ ${#} -ne 2 ]]; then + echo "Usage: ${0} TUNNEL_ID NETWORK" + exit 1 +fi + +sudo ip route add ${2} dev tun${1} diff --git a/scripts/client-setup.sh b/scripts/client-setup.sh index c1fe734..74230a2 100755 --- a/scripts/client-setup.sh +++ b/scripts/client-setup.sh @@ -4,28 +4,21 @@ # set -e -if [[ ${#} -lt 2 ]]; then - echo "Usage: ${0} TUNNEL_ID IP_BASE [NETWORK1 NETWORK2 ... NETWORKx]" +if [[ ${#} -ne 2 ]]; then + echo "Usage: ${0} TUNNEL_ID IP_BASE" exit 1 fi declare -r TUNNEL_ID=${1} declare -r IP_BASE=${2} -shift 2 -declare -r NETWORKS=${@} declare -r NETWORK_DEVICE=tun${TUNNEL_ID} let CLIENT_LAST_IP_ADDR_OCTET="4*(${TUNNEL_ID}-1)+1" declare -r CLIENT_IP_ADDR=${IP_BASE}.${CLIENT_LAST_IP_ADDR_OCTET} -if [[ ! $(ip link | grep " ${NETWORK_DEVICE}: ") ]]; then +if [[ ! $(sudo ip link | grep " ${NETWORK_DEVICE}: ") ]]; then sudo modprobe tun sudo ip tuntap add mode tun user ${USER} ${NETWORK_DEVICE} sudo ip link set ${NETWORK_DEVICE} up sudo ip addr add ${CLIENT_IP_ADDR}/30 dev ${NETWORK_DEVICE} fi - -for NETWORK in ${NETWORKS}; do - echo "> ${NETWORK}" - sudo ip route add ${NETWORK} dev ${NETWORK_DEVICE} -done diff --git a/scripts/server-execute.sh b/scripts/server-execute.sh index 4fdcf0f..08d023a 100755 --- a/scripts/server-execute.sh +++ b/scripts/server-execute.sh @@ -24,6 +24,7 @@ function teardown() { sudo ip tuntap del mode tun ${NETWORK_DEVICE} } +echo "CONNECTED" while true; do sleep 60000 # do nothing until interrupted ;) done diff --git a/scripts/server-setup.sh b/scripts/server-setup.sh index 71103e1..26c9f03 100755 --- a/scripts/server-setup.sh +++ b/scripts/server-setup.sh @@ -19,15 +19,15 @@ declare -r CLIENT_IP_ADDR=${IP_BASE}.${CLIENT_LAST_IP_ADDR_OCTET} declare -r SERVER_IP_ADDR=${IP_BASE}.${SERVER_LAST_IP_ADDR_OCTET} declare -r SSHD_CONFIG_FILE=/etc/ssh/sshd_config -declare -r SSHD_RESTART_CMD="reload ssh" +declare -r SSHD_RESTART_CMD="/etc/init.d/sshd reload" # Ensure previous tunnels with the same ID are not running set +e -pkill -f xiringuito-server-execute.${TUNNEL_ID}.sh +pkill -f ${TUNNEL_ID}/server-execute.sh set -e # Set up network device -if [[ ! $(ip link | grep " ${NETWORK_DEVICE}: ") ]]; then +if [[ ! $(sudo ip link | grep " ${NETWORK_DEVICE}: ") ]]; then sudo modprobe tun sudo ip tuntap add mode tun user ${USER} ${NETWORK_DEVICE} sudo ip link set ${NETWORK_DEVICE} up diff --git a/xiringuito b/xiringuito index 977617d..08fbd07 100755 --- a/xiringuito +++ b/xiringuito @@ -23,6 +23,9 @@ if [[ ! -f ${TUNNEL_ID_FILE} ]]; then fi declare -r TUNNEL_ID=$(cat ${TUNNEL_ID_FILE}) +declare -r REMOTE_PATH="/tmp/xiringuito.${TUNNEL_ID}" + +declare -r SSH_OPTS="-oLogLevel=QUIET -oConnectTimeout=10" cd $(dirname ${0}) @@ -31,15 +34,20 @@ trap teardown EXIT function teardown() { echo "Tearing down tunnel..." ./scripts/client-teardown.sh ${TUNNEL_ID} - echo "Ensuring remote process is stopped." - ssh -oLogLevel=QUIET ${SSH_SERVER} pkill -f xiringuito-server-execute.${TUNNEL_ID}.sh + ssh ${SSH_OPTS} ${SSH_SERVER} pkill -f ${REMOTE_PATH}/server-execute.sh } -./scripts/client-setup.sh ${TUNNEL_ID} ${IP_BASE} ${NETWORKS} +echo "TUNNEL ID: ${TUNNEL_ID}" +./scripts/client-setup.sh ${TUNNEL_ID} ${IP_BASE} -scp -oLogLevel=QUIET ./scripts/server-setup.sh ${SSH_SERVER}:/tmp/xiringuito-server-setup.${TUNNEL_ID}.sh >/dev/null -scp -oLogLevel=QUIET ./scripts/server-execute.sh ${SSH_SERVER}:/tmp/xiringuito-server-execute.${TUNNEL_ID}.sh >/dev/null +for NETWORK in ${NETWORKS}; do + echo "> ROUTE: ${NETWORK}" + ./scripts/client-route.sh ${TUNNEL_ID} ${NETWORK} +done -ssh -oLogLevel=QUIET ${SSH_SERVER} /tmp/xiringuito-server-setup.${TUNNEL_ID}.sh ${TUNNEL_ID} ${IP_BASE} -sleep 1 -ssh -oLogLevel=QUIET -w ${TUNNEL_ID}:${TUNNEL_ID} ${SSH_SERVER} /tmp/xiringuito-server-execute.${TUNNEL_ID}.sh ${TUNNEL_ID} ${IP_BASE} +ssh ${SSH_OPTS} ${SSH_SERVER} mkdir -p ${REMOTE_PATH} +scp -oLogLevel=QUIET ./scripts/server-*.sh ${SSH_SERVER}:${REMOTE_PATH} >/dev/null + +ssh ${SSH_OPTS} ${SSH_SERVER} ${REMOTE_PATH}/server-setup.sh ${TUNNEL_ID} ${IP_BASE} +sleep 1; echo -n "SERVER: ${SSH_SERVER} ... " +ssh ${SSH_OPTS} -w ${TUNNEL_ID}:${TUNNEL_ID} ${SSH_SERVER} ${REMOTE_PATH}/server-execute.sh ${TUNNEL_ID} ${IP_BASE}