Наверх

FreeBSD: Проброс портов в локальную сеть для RDP и Radmin

Автор kbaott, 30.09.2017 | Просмотров: 5 208 |

Написал я эту статью уже очень давно, опубликована она была на другом сайте и вот я решил выложить ее на своем блоге, — все-таки трудился, зря что ли.

Данная статья, это своего рода заметка на тему проброса портов на сервере под управлением ОС FreeBSD. Итак исходные данные задачи: сервер с FreeBSD и двумя сетевыми картами.  Первая — fxp0 (10.0.0.10) — смотрит на роутер с адресом 10.0.0.1 — выход в интернет; вторая — ed0 (192.168.1.1) — подключена ко второму серверу M$ Windows 2008. Задача: пробросить порты на первом сервере для доступа ко второму через RDP и Radmin. Способов есть несколько с помощью IPNAT, NATd, PF и Rinetd, их мы и рассмотрим по порядку.

 

С помощью IPNAT

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

Подгружаем IPNAT со следующими параметрами:

# cat /etc/rc.conf | grep ipnat

 ipnat_enable="YES"

 ipnat_program="/sbin/ipnat -CF -f"

 ipnat_rules="/etc/ipnat.rules"

или можно по другому:

# ee /etc/rc.conf

добавляем в конец файла:

ipnat_enable="YES"
ipnat_program="/sbin/ipnat -CF -f"
ipnat_rules="/etc/ipnat.rules"

RDP работает на 3389 порту, а Radmin по умолчанию на 4899 (если не указан другой порт в его настройках). В целях безопасности у рекомендую указывать другой порт я советую указывать порт отличный от стандартных, но для наглядности в статье буду использовать стандартные порты.

Для проброса портов в IPNAT применяется инструкция rdr:

# cat /etc/ipnat.rules | grep rdr
 rdr fxp0 0.0.0.0 port 3389 -> 192.168.1.1 port 3389
 rdr fxp0 0.0.0.0 port 4899 -> 192.168.1.1 port 4899

Рассмотрим значения каждой части строки конфигурации:

rdr — (от англ. — redirect) указывает, что это именно перенаправление;

fxp0 — интерфейс маршрутизатора, который «смотрит» в интернет;

0.0.0.0 — статический ip-шник сервера (сетевого интерфейса который «смотрит» интернет и на который приходят пакеты, именно этот IP указывается, как адресс удаленной компьютера в RDP или Radmin);

port 3389 — собственно порт, с которого трафик перенаправляется из внешней сети во внутреннюю сеть;

192.168.1.1 — ip-адрес машины во внутренней сети, на который и будем заворачивать трафик;

port 3389 — порт на который происходит перенаправление во внутренней сети.

Точно также и для второй строки. Также можно строку редиректа прочитать так: перенаправляем (rdr) пакеты с интерфейса (fxp0) с адресом (0.0.0.0), если они пришли на порт (port 3389), во внутреннюю сеть (->) на адрес (192.168.1.1) на порт (port 3389). (Шото я гоню такое… :) )

После того как в /etc/ipnat.rules внесены все правила редиректа, IPNAT нужно перезапустить:

# /sbin/ipnat -CF -f /etc/ipnat.rules

С помощью NATd:

При испольвовании NATd, используется опция ядра DIVERT. Подгружаем NATd так:

# cat /etc/rc.conf | grep nat
 natd_enable="YES"                      #включаем поддержку natd
 natd_interface="fxp0"                 #указываем интерфейс, на котором работает natd
 natd_flags="-f /etc/natd.conf"    #указываем конфигурационный файл для natd

Теперь переходим к natd.conf, здесь синтаксис отличается от предыдущего, но тоже в целом понятен:

# cat /etc/natd.conf
 redirect_port tcp 192.168.1.1:3389 3389
 redirect_port tcp 192.168.1.1:4899 4899

Здесь:

redirect_port — тоже самое, что rdr, инструкция перенаправления;

tcp (udp) — тип трафика, который будем редиректить;

192.168.1.1:3389 — сокет (связка ip + порт), на который будет перенаправляться трафик;

3389 — номер порта, с которого будет заворачиваться трафик.

Перезапускаем NATd:

# sh /etc/rc.d/natd restart
Stopping natd.
Waiting for PIDS: ..........
Starting natd.
Loading ..........

Будьте внимательны!

Файл /etc/natd.conf (как и многие другие конфигурационные файлы) должен заканчиваться пустой строкой!

С помощью PF

В этом случае проброс реализуем, добавляя в /etc/pf.conf такие строки:

rdr on fxp0 proto { tcp, udp } from any to 0.0.0.0 port 3389 -> 192.168.1.1 port 3389
rdr on fxp0 proto { tcp, udp } from any to 0.0.0.0 port 4899 -> 192.168.1.1 port 4899

Здесь:

rdr — уже понятно, что это такое :)

on fxp0 — интерфейс маршрутизатора, который «смотрит» в интернет;

proto { tcp, udp } — тип трафика для проброса;

from any — сети, с которых будет работать переадресация, в данном случае — любая сеть;

to 0.0.0.0 — на этот IP приходит трафик извне;

port 3389 — на этом порту «слушаем» пакеты, которые будут перенаправляться;

192.168.1.1 port 3389 — IP и порт, на который будет форвардиться трафик в локальной сети.

Теперь о неприятном. Недостаток этих способов в том, что с ними много возни и не всегда получается сделать так как хочется — быстро и чтоб сразу работало. Тем более, что например для IPNAT нужен внешний статический ip-шник, а это не всегда доступно. Для решения всех проблем сразу есть замечательный инструмент — rinetd, которым я теперь пользуюсь все время — и быстро и сразу работает.

 

С помощью Rinetd

Устанавливаем rinetd:

# cd /usr/ports/net/rinetd
# make install clean

Добавляем rinetd в rc.conf:

# ee /etc/rc.conf
 rinetd_enable="YES"

Открываем файл конфигурации rinetd

# ee /usr/local/etc/rinetd.conf

и добавляем в него следующие правила:

xxx.xxx.xxx.xxx 4899 192.168.1.1 4899
xxx.xxx.xxx.xxx 3389 192.168.1.1 3389

Вот первая прелесть: вместо xxx.xxx.xxx.xxx можно указать 0.0.0.0 если нет статического IP.

Строка редиректа проста до безобразия:

ххх.ххх.ххх.ххх – внешний IP адрес, на который приходит трафик;

4899 – номер порта, на котором «слушаем» пакеты;

192.168.1.1 – внутренний IP адрес на который мы делаем проброс портов;

4899 — порт во внутренней сети, на который заворачиваем пакеты.

Пример:
0.0.0.0 40001 192.168.1.2 4899
0.0.0.0 40002 192.168.1.2 3389

Здесь для пущей безопасности, порты на которых «слушаем» изменены на 40001 и 40002. В этом случае в настройках Radmin на удаленной машине нужно указать, не стандартный порт у молчанию, а этот — 40001. В случае с RDP нужно на локальной машине, с которой подключаемся, указывать порт через двоеточие прямо в строке подключения ххх.ххх.ххх.хххх:40002.

После этого необходимо внести исключения в firewall, чтобы он не отфутболивал пакеты адресованные нашим портам. Для этого открываем файл конфигурации firewall и вносим в него следующие строки:

${fwcmd} add allow tcp from any to me 3389
${fwcmd} add allow tcp from any to me 4899

Теперь перезагружаем rinetd и firewall:

# /etc/rc.d ipfw restart
# /usr/local/sbin/rinetd rinetd restart (или start если он не был запущен).

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

Вот, собственно и все. О таких прописных истинах, как то, что Radmin должен быть установлен на удаленной машине и RDP разрешен, думаю, говорить не стоит.

— — — — — — — — — — — уже не актуально- — — — — — — — — — —

Также замечу, что способ с rinetd замечательно работает с сервисом DDNS от «Укртелекома» — в этом случае заказываем на сайте my.ukrtelecom.ua в личном кабинете себе динамический DNS вида *.ddns.ukrtel.net, который будет доступен независимо от того, с каким IP в данный момент поднята сессия. Например, вы заказали DDNS такого вида cooldomain.ddns.ukrtel.net, то в Radmin в поле «IP адрес или DNS имя» указываем именно его, а в поле порт или оставляем «По умолчанию» 4899 или задаем свой порт. В случае с RDP, в окне «Подключение к удаленному рабочему столу» указываем так: cooldomain.ddns.ukrtel.net — если rinetd настроена на прослушивание стандартного порта, или так: cooldomain.ddns.ukrtel.net:40002 — если rinetd настроена на другой порт.

— — — — — — — — — — — /уже не актуально- — — — — — — — — — —

Еще раз уточняю детали:

— для Radmin: на удаленной машине (к которой будем коннектиться), устанавливаем Radmin Server, в настройках создаем пользователя и пароль для подключения, а также даем ему права; далее настраиваем rinetd как указано выше (например на нестандартный порт 40001); на локальной машине в Radmin создаем подключение с такими параметрами как на скриншоте ниже и можно пробовать подключатся.

— для RDP: на удаленной машине настраиваем уделенный доступ (Свойства системы -> Настойка удаленного доступа -> вкладка Удаленное использование -> ставим переключатель напротив Разрешать подключения от компьютеров с любой версией удаленного рабочего стола); настраиваем rinetd на нестандартный порт (например 40002); на локальной машине в окне подключения прописываем такую строку: cooldomain.ddns.ukrtel.net:40002

Если все правильно сделано и нет других факторов, которые могут мешать нормальному пробросу портов (например кривые правила фаервола), то все должно работать.

Удачных пробросов, честь имею.

Вместо эпилога:

Обижаться и негодовать, это все равно, что выпить яд в надежде, что он убьет твоих врагов

— Нельсон Мандела

Метки: , , , , , , ,
Писано 30.09.2017

Понравилась статья? Тогда получайте обновления на e-mail: