Доступ из интернета к роутеру Zyxel Keenetic/Keenetic Giga и ресурсам домашней сети с использованием ssh-туннелей.



Иногда возникает необходимость доступа к разным ресурсам домашней сети в то время, когда вы находитесь на работе/даче/у друзей/в отпуске/гостевом Wi-Fi и т.д. Одно из возможных решений - использование ssh-туннелей для безопасного доступа к домашнему роутеру и ресурсам домашней LAN сети. При использовании этого варианта ВЕСЬ передаваемый трафик между клиентом и домашней сетью (включая и информацию, которая при обычных условиях передается в открытом виде) будет зашифрован с использованием выбранных на сервере dropbear алгоритмов шифрования. Это даст дополнительную защиту Ваших данных от перехвата (в гостевом Wi-Fi это сильно актуально), но и в связи с этим необходимо учитывать, что этот способ не самый лучший выбор для передачи больших объемов информации (т.к. весь передаваемый поток сначала будет подвергнут шифрованию, а после передачи - расшифровке, что повлечет повышенную нагрузку как на роутер, так и на клиентское рабочее место).


Немного теории из википедии: Большинство программ для установления соединения используют протокол TCP, который можно передавать через безопасный туннель используя протокол SSH. Так можно устанавливать множество дополнительных TCP соединений внутри одного ssh соединения. Это удобно для сокрытия соединений и шифрования протоколов, которые являются небезопасными и для обхода фаерволов. UDP соединения иногда тоже возможно туннелировать с помощью дополнительных программ, например, netcat.


Поясню мысль в слегка упрощенном виде. Большинство используемых протоколов (telnet, http, ftp, pop3, imap4, smtp, smb, rdp и т.д.) передают данные и параметры аутентификации в текстовом виде без шифрования. Это значит, что нехороший человек (впрочем, необходимо отметить, что довольно квалифицированный) может проанализировать пакеты, передающиеся по интернету в адрес роутера, и извлечь ваши логины и пароли, читать вашу почту и т.д. Именно поэтому крайне не рекомендуется открывать на интерфейсе WAN лишние порты. Все данные, передаваемые по протоколу ssh (включая явки и пароли), зашифрованы с использованием стойкой криптографии. В протоколе ssh заложена возможность создать защищенное соединение и передавать внутри него данные по незащищенным протоколам, причем извне весь траффик будет выглядеть как зашифрованный. Это и есть ssh туннели, использование которых позволяет получить доступ к ресурсам LAN путем установления защищенного соединения. Для этого требуется открыть только один порт в WAN , а именно порт на котором слушает ssh сервер (по умолчанию 22).

Что требуется:

1. Наличие внешнего (так называемого «белого») IP адреса, либо, если у вас «серый» IP адрес, то - «проброшенного» до вас провайдером одного порта. Т.н. «серые» (или «частные», «приватные») IP адреса - это адреса из диапазонов 10.0.0.0 — 10.255.255.255, 172.16.0.0 — 172.31.255.255 и 192.168.0.0 — 192.168.255.255. Кроме этого IP адрес может быть статическим, либо динамическим - тогда вам потребуется зарегистрироваться на каком-нибудь сервисе, предоставляющем доменное имя (например, http://www.dyndns.org , http://www.no-ip.com) и настроить эту учетную запись через web интерфейс роутера (Стартовая страница - Интернет - Доменное имя), чтобы обеспечить обновление вашего динамического IP адреса на выбранном сервисе. В этом случае в дальнейшем с роутером нужно будет соединяться используя полученное доменное имя.

2. ssh сервер должен быть установлен и запущен на роутере.

3. Настройки на роутере с целью доступа к ssh серверу (dropbear) из интернета.

4. Установка и настройка ssh клиента на удаленной машине, с которой мы будем подключаться через ssh туннели к домашней сети.

Установка и настройка роутера

1. Требования первого пункта по IP адресу (либо «пробросу» портов) - сугубо организационные и решаются с домашним провайдером на стадии заключения договора подключения к сети Интернет. Если провайдер не предоставляет такой услуги, то описанными в этой статье способами получить доступ из интернета к роутеру и домашней локальной сети невозможно.

2. Подробно установка системы opkg (в том числе и ssh сервера dropbear) описана в статье "Установка системы opkg." Сервер dropbear может быть запущен не только на порту по умолчанию (порт 22), но и на любом другом. Чтобы изменить порт по умолчанию (22), прослушиваемый сервером dropbear на нужный порт (например 45017), через PuTTy по ssh заходим на роутер и любым удобным способом корректируем файл /media/DISK_A1/system/etc/init.d/S10dropbear . Строка запуска dropbear в секции «start» должна выглядеть так:

$DROPBEAR -p 45017 -d $DSS -r $RSA

ВНИМАНИЕ !!! В дальнейшем везде в статье предполагаем, что dropbear у нас будет запущен на порту 45017.

Чтобы изменения вступили в силу - перегружаем роутер. После перезагрузки роутер будет доступен из домашней сети по установленному порту 45017 (не забудьте откорректировать свойства соединения в PuTTy :-)). Для еще бОльшей защиты и удобства возможно настроить авторизацию по приватным ключам.

3. Для настройки доступа из интернета к роутеру по ssh протоколу добавляем в автозапуск следующие строки:

iptables -I INPUT -p tcp --dport 45017 -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT

Первое правило позволяет роутеру принимать входящие соединения по порту 45017, второе правило необходимо для нормального хождения пакетов внутри роутера между интерфейсами. В «автозапуск» их можно добавить двумя способами:

  • добавить правила в секцию start скрипта запуска dropbear /media/DISK_A1/system/etc/init.d/S10dropbear
  • создать исполняемый файл /media/DISK_A1/system/etc/firewall.d/fw.sh следующего содержания:
#!/bin/sh
 
iptables -I INPUT -p tcp --dport 45017 -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT
 

Второй способ является бОлее правильным. Главное отличие между ними:

  • при корректировке скрипта запуска dropbear правила iptables добавляются каждый раз при старте ssh сервера dropbear.
  • при корректировке скрипта fw.sh правила iptables добавляются каждый раз при поднятии соединения на интерфейсе роутера. Если у вас pptp, l2tp и т.п. соединение с провайдером, то используйте именно этот вариант.

Чтобы изменения вступили в силу - необходимо перегрузить роутер.

На этом настройка Zyxel Keenetic/Keenetic Giga закончена, проверяем доступность роутера по ssh из интернета и переходим к настройке удаленной машины, с которой планируем подключаться к домашней сети.

Установка и настройка клиентского компьютера

ВНИМАНИЕ !!! В дальнейшем под «клиентским компьютером» или «удаленным компьютером» предполагаем компьютер, с которого будем соединяться с роутером из интернета (ноутбук, нетбук, комп на работе и т.д.)

ВНИМАНИЕ !!! В дальнейшем предполагаем, что мы хотим получить доступ из интернета к компьютеру в локальной сети с адресом 192.168.1.39 по 80 порту (web сервер) и нашему роутеру Zyxel Keenetic с адресом на LAN интерфейсе 192.168.1.1 по порту 9091 (RPC transmission, например). В вашем случае адреса и порты могут быть другими и зависят от настроек локальной сети и приложений.

Настройка доступа на Unix клиенте

4.1 Если на удаленном компе стоит *nix, то ssh туннель может быть установлен с помощью программы ssh из состава openssh. Использование:

ssh keenetic.zapto.org -p 45017 -L8890:192.168.1.39:80 -L8891:192.168.1.1:9091

«keenetic.zapto.org -p 45017» - внешнее доменное имя (IP адрес) роутера и порт, на котором запущен dropbear. Следующая часть -L8890:192.168.1.39:80 -L8891:192.168.1.1:9091 означает, что после установки ssh соединения с роутером и до момента завершения этого соединения, локальный порт 8890 клиентского компьютера будет проброшен на 192.168.1.39:80 и локальный порт 8891 клиентского компьютера будет проброшен на 192.168.1.1:9091. При необходимости/желании иметь более продвинутые функции или GUI интерфейс - обратите внимание на программы:

  • gstm - SSH tunnel manager for GNOME http://sourceforge.net/projects/gstm/
  • kstm - KDE SSH Tunnel Manager http://sourceforge.net/projects/kstm/
  • tunnelmanager - Tunnel Manager allows users to easily manage a configurable list of SSH tunnels and their required keys. https://launchpad.net/tunnelmanager
  • autossh - Automatically restart SSH sessions and tunnels
  • remmina - The GTK+ Remote Desktop Client
  • BitwiseSSHTunellier - описание здесь же ниже. Хоть и написан для работы с творением мелкомягких, но прекрасно работает под вайном и исключительно удобен.

4.2 Как более распространенный вариант, в дальнейшем предполагаем, что в качестве удаленной машины (с которой будем подключаться к домашней сети) имеем компьютер с Windows. Доступ к домашней сети возможно настроить несколькими способами.

  • С помощью PuTTY.
  • С помощью BitwiseTunellier или аналогичных программ.

Первый способ хорош когда соединяться с домашней сетью необходимо с компьютера, на который по каким-то причинам нежелательно ставить дополнительное программное обеспечение (используем portable версию PuTTy и запускаем ее с флешки). Второй способ более удобен при частом использовании и идеально подходит для установки на личный ноутбук/нетбук, подключаемый к интернету в отпуске/на даче/в командировке и т.д.

Настройка доступа с помощью PuTTy

Устанавливаем PuTTy, создаем соединение с роутером. При верно выполненных настройках п. 1-3 уже имеем доступ к роутеру из интернета по ssh.

Чтобы настроить доступ к другим ресурсам роутера и локальной сети идем в PuTTy в свойства соединения с роутером, далее Connections-SSH-Tunnels. Пункт «Local ports accept connections from other hosts» должен быть включен (если «галки» нет, то - ставим), Source port указываем 8890, Destination указываем 192.168.1.39:80. Жмем Add, переходим в пункт Session, сохраняем изменения в сессии соединения с роутером. Этими действиями мы добавили проброс порта 80 компьютера 192.168.1.39 из домашней сети на порт 8890 клиентского (удаленного) компьютера. Смотри скриншоты 1-3 ниже.

Аналогично настраиваем доступ к RPC transmission через ssh туннели: в PuTTY идем в свойства соединения с роутером, далее Connections-SSH-Tunnels. Пункт «Local ports accept connections from other hosts» должен быть включен (если «галки» нет, то - ставим), Source port указываем 8891, Destination указываем 192.168.1.1:9091. Жмем Add, переходим в пункт Session, сохраняем изменения в сессии соединения с роутером. Этими действиями мы добавили проброс порта 9091 роутера 192.168.1.1 из домашней сети на порт 8891 клиентского (удаленного) компьютера. Смотри скриншот 1-3 ниже.

Как это работает:

На удаленном компьютере соединяемся через PuTTy с роутером по ssh, вводим логин/пароль, окно PuTTy сворачиваем.

Запускаем на удаленном компьютере браузер, вводим в адресной строке http://127.0.0.1:8890 и попадаем на страницу 192.168.1.39:80 (web сервер).

Запускаем на удаленном компьютере браузер, вводим в адресной строке http://127.0.0.1:8891 и попадаем на страницу 192.168.1.1:9091 (RPC transmission). Если вы пользуетесь Transmission Remote GUI (или аналогичными программами), то в свойствах соединения указываем сервер 127.0.0.1 порт 8891 и попадаем на transmission роутера.

Вместо всех приведенных выше примеров локальных http туннелей можно сделать один единственный динамический туннель, при этом ssh сервер будет выполнять функции socks proxy: putty: Source port 1080, ставим галку около Dynamic, добавляем туннель, сохраняем изменения в сессии соединения PuTTy с роутером. Далее, естественно, устанавливаем ssh соединение с роутером, вводим учетные данные - все, socks proxy работает. После этого в настройках firefox (или своего браузера) указываем SOCKS5 proxy: localhost:1080 и мы внутри домашней сети (т.е. нам вообще будут доступны адреса типа http://192.168.1.1:9091 и http://192.168.1.39:80 ). Смотри скриншоты 4-5 ниже.


Скриншот 1 Скриншот 2 Скриншот 3 Скриншот 4 Скриншот 5


ВНИМАНИЕ !!! Соединения по другим портам / IP адресам настраиваются аналогично. Туннели пробрасываются только если в PuTTy (или ssh) установлено соединение с роутером. Если соединение с роутером прекращено, туннели также перестают работать. Т.е окно PuTTy или ssh (с активным ssh соединением с роутером) должно оставаться открытым все время работы приложений через туннель.

Настройка доступа с помощью BitwiseTunellier

Скачиваем и устанавливаем Bitvise SSH Client (Tunnelier). Приложение распространяется свободно для индивидуального использования, более подробно смотри EULA. Bitvise SSH Client (Tunnelier) написан под Windows, но успешно работает и в Unix системах под эмулятором wine. На вкладке «Login» заполняем внешний IP адрес (доменное имя) роутера, порт соединения, учетные данные. На вкладке «C2S forwarding» заполняем все поля (там все интуитивно понятно). Для примера:

  • Destination Host - 192.168.1.39
  • Dest.Port 80
  • Listen Interface 127.0.0.1
  • List.Port 8890

Сохраняем правило проброса порта.

  • Destination Host - 192.168.1.1
  • Dest.Port 9091
  • Listen Interface 127.0.0.1
  • List.Port 8891

Сохраняем правило проброса порта.

SOCKS/HTTP Proxy forwarding настраивается на вкладке «Services». Сохраняем профиль, соединяемся с роутером - в результате получаем проброс 192.168.1.39:80 на 127.0.0.1:8890 и 192.168.1.1:9091 на 127.0.0.1:8891. Для автозапуска сохраненного профиля с именем Zyxel_Keenetic делаем (при необходимости - помещаем в автозагрузку) ярлык:

"C:\Program Files\Bitvise SSH Client\BvSsh.exe"  -profile=C:\Progra~1\Bitvis~1\Zyxel_Keenetic.bscp -loginOnStartup

. Все возможные задаваемые из командной строки параметры выдаются по запуску

C:\Program Files\Bitvise SSH Client\BvSsh.exe -help

Источники / Полезные ссылки: