Это старая версия документа.


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



Иногда возникает необходимость доступа к разным ресурсам домашней сети в то время, когда вы находитесь на работе/даче/у друзей/в отпуске/гостевом Wi-Fi и т.д. Одно из возможных решений - использование ssh-тунелей для безопасного доступа к ресурсам LAN.


Немного теории из википедии: Большинство программ для установления соединения используют протокол 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
 

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

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

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

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

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

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

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

Настройка доступа с помощью 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 клиентского (удаленного) компьютера. Смотри скриншот 4 ниже.

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

На удаленном компьютере соединяемся через 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 соединение с роутером, вводим учетные данные - все, тоннель работает. После этого в настройках firefox (или своего браузера) указываем SOCKS5 proxy: localhost:1080 и мы внутри домашней сети (т.е. нам вообще будут доступны адреса типа http://192.168.1.1:9091 и http://192.168.1.39:80 ). Смотри скриншот 5 ниже.


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


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

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

Скачиваем и устанавливаем Bitvise SSH Client (Tunnelier). Приложение распространяется свободно для индивидуального использования, более подробно смотри EULA. На вкладке «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 Tunnelier\Tunnelier.exe"  -profile=d:\NetTools\Tunneling_over_ssh\Zyxel_Keenetic.tlp -loginOnStartup

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