Ubuntu Server. Настраиваем форвардинг портов на роутере.

  • Автор:

forwarding.png

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

По сути, форвардинг (перенаправление, проброс на жаргоне) портов дает возможность вынести определенные сервисы локальной сети в интернет. Это дает возможность держать почтовые (Web, FTP и т.п.) сервера в более безопасной зоне локальной сети (а лучше в DMZ).

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

В качестве примера рассмотрим организацию доступа к терминальному серверу в локальной сети через интернет, используя в качестве шлюза роутер на базе Ubuntu Server, настройка которого описана здесь. В нашей тестовой лаборатории была собрана следующая схема:

port-forwarding.png

В данном случае у нас имеется локальная сеть 10.0.0.0/24 в которой присутствует сервер терминалов по адресу 10.0.0.2, роутер с внутренним адресом 10.0.0.1 и внешним 192.168.64.134 (данный адрес взят нами для примера, в реальности здесь должен быть белый IP адрес) и ноутбук во внешней сети, который должен получить доступ к серверу терминалов.

Наиболее очевидным способом для многих будет форвардинг портов при помощи iptables, однако, прежде чем рубить с плеча, вспомним, каким образом работает iptables. Данный момент очень важен и предупреждает ситуации: "я все сделал как написано, но не работает". Правила (цепочки) iptables обрабатываются последовательно, в порядке их перечисления в файле /etc/nat. Допустим у нас там записано три правила:

Правило1
Правило2
Правило3

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

Итак, приступим. Для выполнения нашего условия (перенаправление порта 3389 во внутреннюю сеть) добавим в файл /etc/nat до правила "# Запрещаем доступ снаружи во внутреннюю сеть" следующие строки:

#Разрешаем входящие подключения на 3389
iptables -A FORWARD -i eth0 -p tcp --dport 3389 -j ACCEPT

Это правило разрешает прохождение входящих пакетов на порт 3389 внутрь сети. Теперь опишем форвардинг:

# Форвардинг 3389
iptables -t nat -A PREROUTING -p tcp -d 192.168.64.134 --dport 3389 -j DNAT --to-destination 10.0.0.2:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.2 --dport 3389 -j SNAT --to-source 10.0.0.1

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

Сохраняем файл, перезагружаем сервер:

sudo reboot

Проверяем, все должно работать:

port-forwarding2.pngКак видим, ничего сложного. Главное - понимание того, что вы делаете. Не тупое повторение скопированных команд, а знание того, что вы делаете, зачем и почему именно таким образом. Успехов!

Дополнительные материалы:

1. Ubuntu Server. Форвардинг PPTP средствами iptables.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments