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

Данная статья, это своего рода заметка на тему проброса портов на сервере под управлением ОС 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, их мы и рассмотрим по порядку. 
 

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

С помощью 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 создаем подключение с такими параметрами как на скриншоте ниже и можно пробовать подключатся.

 

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

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

 

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

 

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

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

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


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *