artem
11.04.2018
7107

Основные сценарии использования SSH-туннелей

В статье, опубликованной ранее, была описана настройка SSH-туннелей, а также было сказано, что SSH не подходит для построения постоянных туннелей. В этой статье будут описаны сценарии, в которых использование SSH-туннелей может быть очень полезным.

Сценарии SSH-туннелей

Сценарий 1: есть доступ по SSH на хост в удалённой сети, требуется настроить в этой сети множество устройств через web-интерфейс

Например, есть доступ по SSH к серверу телефонии клиента, требуется вручную настроить 20+ телефонов и/или VoIP-шлюзов (использование провижининга по какой-либо причине неприемлемо). Схема ниже:

Схема подключения

Вместо настройки проброса порта для каждого устройства, можно на время настройки сделать SSH-туннель к серверу клиента и добавить на своём хосте маршруты в подсети клиента через SSH-туннель (здесь и далее предполагается, что подключение по SSH производится с хоста под управлением ОС Linux).

 

Настройки на удалённом хосте (все команды, приведённые ниже для удалённого и для локального хоста, нужно выполнять с правами суперпользователя):

# Установите в файле /etc/ssh/sshd_config опцию «PermitTunnel yes», затем перезапустите SSH-сервер для применения настроек
service sshd restart
 
# Включите форвардинг пакетов
sysctl -w net.ipv4.ip_forward=1
 
# Добавьте в iptables правила, пропускающие соединения из туннеля в локальную сеть
# (в рамках данного примера в качестве транзитной подсети будет использоваться 10.255.255.0/30, VPN-интерфейс на обоих концах будет tun7)
iptables -P FORWARD DROP
iptables -A FORWARD -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun7 -o eth0 -s 10.255.255.2 -j ACCEPT
 
# Также нужно натировать соединения, приходящие через туннель, т.к. остальные хосты в локальной сети ничего не будут знать о подсети 10.255.255.0/30
iptables -t nat -A POSTROUTING -o eth0 -s 10.255.255.2 -j MASQUERADE

Настройки на локальном хосте:

# Установите SSH-соединение с удалённым хостом с созданием туннеля
ssh -w 7:7 remote-server.example.com
 
# Назначьте IP-адрес своему концу туннеля
ifconfig tun7 up 10.255.255.2 pointopoint 10.255.255.1
 
# Создайте маршруты в подсети клиента через туннель (здесь 192.168.101.0/24 и 192.168.201.0/24)
ip route add 192.168.101.0/24 via 10.255.255.1
ip route add 192.168.201.0/24 via 10.255.255.1
 

Связь с удалёнными подсетями пока не будет работать, т.к. нужно ещё назначить IP-адрес концу туннеля на удалённом хосте:

ifconfig tun7 up 10.255.255.1 pointopoint 10.255.255.2

Если все действия выполнены правильно, на локальном хосте должен быть доступ в удалённые подсети через SSH-туннель, на web-интерфейсы устройств можно заходить по их адресам в удалённой сети без всяких пробросов.
Когда созданный SSH-туннель больше не будет нужен, обязательно отмените все изменения на удалённом хосте:

# Установите в файле /etc/ssh/sshd_config опцию «PermitTunnel no», и снова перезапустите SSH-сервер
service sshd restart
 
# Выключите форвардинг пакетов
sysctl -w net.ipv4.ip_forward=0
 
# Удалите добавленные ранее правила iptables

На локальном хосте достаточно просто разорвать SSH-соединение, через которое настроен туннель.

 

ПРИМЕЧАНИЕ: с помощью описанного приёма можно также получить доступ к web-интерфейсам, которые не работают при обращении к ним через проброс порта по SSH из-за адреса 127.0.0.1 в запрошенном URL (такие устройства встречаются очень редко, но это случается).

 

Сценарий 2: есть доступ по SSH на хост в удалённой сети, требуется скачать и поставить на хост какие-либо пакеты из интернета, но хост находится за файрволом, запрещающим доступ в интернет

Желательно решать подобные вопросы через отдел ИТ клиента, но с этим могут возникнуть самые различные проблемы. С помощью SSH-туннеля можно временно выпустить удалённый хост в интернет через свой собственный хост. В данном примере доступ на удалённый хост по SSH осуществляется через проброс порта:

Схема подключения

Реализация похожа на предыдущий сценарий, но форвардинг и правила iptables теперь нужно добавлять на локальном хосте.

 

Настройки на удалённом хосте (все команды, приведённые ниже для удалённого и для локального хоста, нужно выполнять с правами суперпользователя):

# Установите в файле /etc/ssh/sshd_config опцию «PermitTunnel yes», затем перезапустите SSH-сервер для применения настроек
service sshd restart

Настройки на локальном хосте:

# Включите форвардинг пакетов
sysctl -w net.ipv4.ip_forward=1
 
# Добавьте в iptables правила, пропускающие соединения из туннеля в интернет
# (в качестве транзитной подсети будет также использоваться 10.255.255.0/30, VPN-интерфейс на обоих концах будет tun7)
iptables -P FORWARD DROP
iptables -A FORWARD -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun7 -o eth0 -s 10.255.255.1 -j ACCEPT
 
# Включите натирование для соединений из туннеля
iptables -t nat -A POSTROUTING -o eth0 -s 10.255.255.1 -j MASQUERADE
 
# Установите SSH-соединение с удалённым хостом с созданием туннеля
ssh -w 7:7 remote-server.example.com
 
# Назначьте IP-адрес своему концу туннеля
ifconfig tun7 up 10.255.255.2 pointopoint 10.255.255.1 

Снова настройки на удалённом хосте:

# Назначьте IP-адрес удалённому концу туннеля
ifconfig tun7 up 10.255.255.1 pointopoint 10.255.255.2 

Далее самый ответственный момент — чтобы удалённый хост получил полный доступ в интернет через SSH-туннель, нужно будет заменить его шлюз по умолчанию на 10.255.255.2. Естественно перед этим нужно, как минимум, добавить маршрут к IP-адресу, с которого Вы подключаетесь по SSH, через шлюз в подсети удалённого сервера, чтобы тут же не потерять доступ к нему. Обратите внимание на то, что удалённый сервер потеряет доступ ко всем локальным и удалённым подсетям, к которым у него был доступ через шлюз в локальной сети. Обязательно добавьте маршруты через шлюз в локальной сети во все подсети, в которых есть клиенты данного сервера, чтобы сохранить их работоспособность (напримет подсеть 192.168.201.0/24 из предыдущего сценария).
Ниже приведены все измения в таблице маршрутов удялённого хоста, с учётом того, что его шлюзом по умолчанию является 192.168.101.1 и подключение по SSH осуществляется с IP-адреса 1.2.3.4 (обязательно проверьте, с какого именно IP-адреса сервер получает пакеты от вашего хоста, с помощью команды who).

ip route add 1.2.3.4 via 192.168.101.1
ip route add 192.168.201.0/24 via 192.168.101.1
ip route del default; ip route add default via 10.255.255.2

Если все действия выполнены правильно, на удалённом хосте теперь должен быть доступ в интернет через SSH-туннель, можно установить на нём все необходимые пакеты (если хост использует DNS-серверы в локальной сети, желательно поменять их на публичные). После этого нужно обязательно отменить все внесённые изменения.
На удалённом хосте:

# Установите в файле /etc/ssh/sshd_config опцию «PermitTunnel no», и перезапустите SSH-сервер
service sshd restart
 
# Верните маршрут по умолчанию и удалите добавленные маршруты
ip route del default; ip route add default via 192.168.101.1
ip route del 1.2.3.4
ip route del 192.168.201.0/24
 
# Верните DNS-серверы, если меняли их

На локальном хосте:

# Выключите форвардинг пакетов
sysctl -w net.ipv4.ip_forward=0
 
# Удалите добавленные правила iptables и разорвите SSH-соединение

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.