OpenWRT Dropbear reverse tunnel

У меня недавно появилась задача. Мне понадобился ssh доступ на рабочий компьютер. Чтобы можно было использовать его вычислительных мощности для сборки OpenWRT. Мой домашний ноутбук делал полную сборку за 5 часов. А рабочий за 30-40 минут. Но тут была проблема, компьютер на работе был за NAT'ом. И на прямую к нему подключиться нельзя. Спасло то что дома у меня был чистый ip и технология reverse tunnel. В качестве сервера я решил использовать wi-fi точку доступа TP-Link TL-WR1043ND с OpenWRT и Dropbear.

Что у нас дано?

Упрощённая сетевая схема:

OpenWRT Dropbear ssh reverse tunnel scheme

Настройка рабочего компьютера(Work)

Рабочий компьютер должен всегда держать соединение с сервером. Даже после перезагрузки сервера соединение должно переустанавливаться.

Первое что нужно сделать, это ключи авторизации. т.к. когда я буду дома вводить на работе пароль буден некому.

И так создаем пару ключей:

ssh-keygen -b 1024 -t dsa

Затем копируем его на сервер

scp .ssh/id_dsa.pub root@openwrt.router:/etc/dropbear/authorized_key -p 1022

у меня Dropbear висит на 1022 порту, поэтому я его указываю. Если у вас 22, то можно не указывать

Теперь нужно добавить установку тунеля по Cron. Я взял скрипт отсюда немного его переделав. Скрипт я положил сюда: /etc/cron.d/ssh_reverse_tunnel.sh, вот его содержимое:

#!/bin/bash

LISTENING_HOST=0.0.0.0
LISTENING_PORT=12345

SSHD_HOST=openwrt.router
SSHD_USER=root
SSHD_PORT=1022

# $COMMAND is the command used to create the reverse ssh tunnel
COMMAND="ssh -f -N -R $LISTENING_HOST:$LISTENING_PORT:localhost:22 $SSHD_USER@$SSHD_HOST -p $SSHD_PORT"

# Is the tunnel up? Perform two tests:

# 1. Check for relevant process ($COMMAND)
pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND

# 2. Test tunnel by looking at "netstat" output on $REMOTE_HOST
ssh $SSHD_USER@$SSHD_HOST -p $SSHD_PORT netstat -an 2>/dev/null | egrep "tcp.*:$LISTENING_PORT.*LISTEN" \
   > /dev/null 2>&1
if [ $? -ne 0 ] ; then
   pkill -f -x "$COMMAND"
   $COMMAND
fi

Сам тунель устанавливается этой коммандой:

ssh -f -N -R $LISTENING_HOST:$LISTENING_PORT:localhost:22 $SSHD_USER@$SSHD_HOST -p $SSHD_PORT

где:

$LISTENING_HOSH - ip адрес на котором будут слушаться подключения, которые будут пробразываться на рабочий компьютер

$LISTENING_PORT - соответственно порт

localhost:22 - это куда пообрасывается соединение

$SSHD_USER@$SSHD_HOST -p $SSHD_PORT - login, внешний ip адрес и порт роутера

Задание для Cron я сделал выполняющиеся каждые 5 минут. Сначала вводим в консоли:

crontab -e

и вставляем:

*/5 * * * * /etc/cron.d/ssh_reverse_tunnel.sh 2>&1 1>/dev/null &

Настройка сервера(OpenWRT router)

В качестве сервера у меня, как сказано выше, будет точка доступа TL-WR1043ND. В качестве ssh сервера я решил использовать Dropbear т.к. он занимает меньше места чем OpenSSH server и имеет весь нужный мне функционал.

Вся настройка заключается в добавлении строчки:

option 'GatewayPorts' 'on'

в файл /etc/config/dropbear

и смене прав на файл с ключом:

chmod 0600 /etc/dropbear/authorized_key

Ноутбук(Home)

Ну вот и все почти все готово. Подключаемся к работе так:

ssh user@openwrt.local -p 12345

где:

user - пользователь на работе

openwrt.local - локальный адрес роутера

12345 - порт для которого открыт туннель

Ссылки

  1. ssh tunnelling
  2. [Howto] Dropbear with public key authentication

Теги: , , ,

Дата: 10 апреля 2012

Автор: andreykyz

Комментарии: 0

Оставить комментарий

*

Комментарий:

Ваш e-mail не будет опубликован.
Обязательные поля помечены *

Разрешенные HTML теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>