Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> Rinetd

Редирект портов с помощью Rinetd

Автор: DNK.


Уважаемым автором сайта - паном Лисом, уже был описан принцип редиректа портов с использованием NAT, но все же хочу описать еще более простой способ - с использованием Rinetd.
Предположим что организация купила какую-то дополнительную биллинговую систему ,у стороннего разработчика, управляющуюся 5 серверами да еще под виндой. Разработчик находится в другой стране и для обслуживания системы ему необходим доступ к этим серверам (к примеру радмином). Кроме того, программеры написали и отлаживают какую-то нужную задачку для корпорации но (как обычно) не знают на каком компе она будет дальше эксплуатироваться , а менять 2 раза в неделю IP компа с задачей у пользователей в локальной сети (но во всех регионах страны) "не есть хорошо".
И так приступим к нашей нелегкой работе.

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


Теперь создаем наш конфиг для rinetd.

предположим : внутренние IP 5 серверов 192.168.1.5-9,внешний IP 85.85.85.85,локальный IP любимой фрюки 192.168.1.1
Настраиваем радмины на компах слушать на адресе к примеру : 1234.
"Блуждающий" сервер прогеров имеет текущий IP 192.168.1.50 и порт для проги 9898.

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

85.85.85.85 12341 192.168.1.5 1234
85.85.85.85 12342 192.168.1.6 1234
85.85.85.85 12343 192.168.1.7 1234
85.85.85.85 12344 192.168.1.8 1234
85.85.85.85 12345 192.168.1.9 1234

192.168.1.1 9898 192.168.1.50 9898

Собственно все.

# echo 'rinetd_enable="YES"` >> /etc/rc.conf
# /usr/local/etc/rc.d/rinetd start


Проверяем

#sockstat | grep rinetd

root     rinetd     845   4  tcp4   85.85.85.85:12341    *:*
root     rinetd     845   5  tcp4   85.85.85.85:12342    *:*
root     rinetd     845   6  tcp4   85.85.85.85:12343    *:*
root     rinetd     845   7  tcp4   85.85.85.85:12344    *:*
root     rinetd     845   8  tcp4   85.85.85.85:12345    *:*
root     rinetd     845   9  tcp4   192.168.1.1:9898    *:*


Желательно не забыть дописать в IPFW с каких IP разрешон доступ к внешним портам указанным в rinetd (разработчики как правило имеют статичные IP).Даем разработчику внешний IP и порты 1234Х - с указанием на какой комп они попадут.
Когда у прогеров опять поменяется IP , меняем 192.168.1.50 на другой и рестартум , а клиенты продолжают соединяться с 192.168.1.1 порт 9898

Вытераем натруженный пот и идем читать маны.



размещено: 2008-09-03,
последнее обновление: 2016-05-10,
автор: DNK


abigor, 2008-08-22 в 6:18:59

За статью спасибо. НО если честно, чтоб не городить лес из ipfw и natd или ipfw rinetd ( второй кстати если не изменяет память только tcp порты умеет редиректить) пользуйтесь pf там и нат и бинат из коробки есть :) и синтаксис не страшный как с первого раза кажется :)

DNK, 2008-08-22 в 10:38:46

Действительно pf делает все тоже самое,и легок в понимании синтаксиса,но я , например,привык по старинке с ipfw.
Rinetd проще в настройке и контроле состояния, редиректит все порты (не только tcp).
Данной статьей я не призываю к переходу на rinetd, а лишь показываю (особенно для начинающих админов) насколько прост редирект и в каких задачах хорошо его использовать.
К стати, уважаемый abigor, если вы напишете статью по настройке Pf для указанных и других интересных примеров , думаю это будет очень полезно и интересно для многих желающих мигрировать с ipfw на pf.

Morty, 2008-09-03 в 22:30:33

FreeBSD7 и kernel_nat,все решаемо одним конфигом ipfw ,
без запуска доп демонов , в том числе natd. Хотя в 6.*
связка ipfw+natd меня тоже устраивает.

www2, 2008-09-04 в 7:26:25

А ещё проще - iptables.

pshenya, 2008-09-04 в 11:11:35

кста там ещё можно лог включить временами очень удобно посмотреть кто и когда перебрасывался )

www2, 2008-09-04 в 13:41:28

xinetd, netcat и pptpproxy ещё опишите для комплекта

abigor, 2008-09-08 в 8:10:26

2 DNK зачем писать про это, уже до меня все написано
вот тут

Yarikello, 2008-09-16 в 9:33:49

не упоминается о ограничениях.. не пробрасывает UDP. Долго мучался сервер кс пробрасывал когда =)

Dark, 2008-09-16 в 10:47:15

Это всё конечно замечательно, но автор умолчал о такой бяке как неумение RINETD передавать IP адрес клиента, что делает эту утилитку просто бессмысленной для большинства сетевых сервисов. В логах так и будет вечно светиться IP адресс сервера с которого идёт редирект, вместо реального IP клиента и заниматься сопоставлением логов, скажем, SMTP сервера с логами самого rinetd есть великий изврат.

+ если не изменяет память, в rc.conf также можно добавить rinetd_flags, чтобы указать путь до конфигурационного файла '-c /usr/local/etc/rinetd.conf', в противном случае, если верить документации, то приоритет будет по пути /etc/rinetd.conf

+Помимо указать ipfw с каких IP разрешон доступ у самого rinetd также есть похожие правила фильтрации, прописываемые в конфигурацинном файле.

Ну и всё-таки логирование надо включать logfile /var/log/rinetd.log в конфигурационном файле ибо по умолчанию не пишет.

Вердикт: верните natd на законное место.

Саня, 2008-09-19 в 23:40:49

85.85.85.85 12341 192.168.1.5 1234
так у меня не работает а работает так 0.0.0.0 12341 192.168.1.5 1234 .  незнаю почему . Даже если делаю .sockstat | grep rinetd

kmb, 2008-09-20 в 15:14:19

Перебрасывает только tcp!

ugen0, 2008-10-14 в 13:10:11

rinetd кривое поделие - не способное работать с нормальной нагрузкойскажем в 100 коннектов - удалите эту статью. В FreeBSD  natd прекрасно с этим справляется!

DNK, 2008-10-15 в 10:36:05

Уважаемый ugen0.Проверил работу rinetd
при коннекте 250, проблем нет.Я использую
pf как фиревол и для проброски портов, но (!!)
это не значит что ВСЕ должны использовать только pf.
Данная статья ознакомительная и предназначена (в основном)
для начинающих админов.

apm, 2008-12-06 в 21:39:59

Исходник rinetd выглядит как минимум страшно, мало того что он написан в Visual Studio и предназначет для винды, дык обратите внимание на качество кода.

lissyara, 2008-12-07 в 12:33:31

Он работает.
==========
Напишите свой - лучше. Если будет дейсвительно лучше - про rinetd все быстро забадут.

cawok, 2009-01-14 в 14:52:32

Спасиб! Очень полезно и просто! Кстати конфиг как у ipnat - тоже как вариант

mirlas, 2009-02-07 в 23:12:16

ugen0 прав, rintd - унылое говно. Стоял редирект паралельно с natd - через неделю работы (нагрузка в часы пик денем - ~180 коннектов в теченее 2 часов) или даже меньше - нагрузка на проц 100%, коннекты отваливаются, а нагрузка не падает. Так и работала эта какашка, пока не нашел jumpgate (есть в портах) - забыл про сервак, на котором она стоит :) Наверно уже с полгода аптайм, если не больше.

cawok, 2009-04-02 в 22:51:34

А у меня вот возникла проблемка:
869 root 1 114 0 3104K  1084K RUN 309:02 80.66% rinetd

cat_ua, 2009-04-09 в 17:32:35

За статью спс. А можно ли указать диапазон портов и как?

Saykhan, 2009-06-16 в 5:45:53

Если IP динамический, то вместо внешнего айпи ставится 0.0.0.0

wildcat, 2009-07-16 в 12:45:43

Маленький комментарий. rinetd действительно удобен, но есть нюанс, может кто не знает. Когда на dst ip приходит коннекшн проброшенный со шлюза посредством rinetd, он (dst) думает, что пришли с ip шлюза. В случае, если порт проброшен посредством natd, src ip не меняется. То есть для корректной работы почтового сервера, находящегося в приватной сети за шлюзом с фильтрацией по DRBL rinetd не пригоден. Нужно использовать natd.

Dmitry, 2009-10-14 в 9:42:36

А он работает вообще на 7.2 ?? Замучался....
В конфиге:
cat /usr/local/etc/rinetd.conf
80.64.xx.2xx  1879  192.168.0.15 1879

далее пускаю от рута
/usr/local/etc/rc.d/rinetd start  и получаю

rinetd: couldn't bind to address 80.64.хх.2хх port 1879

Где грабли то? На фряхе 6.3 - все пучком.

wildcat, 2009-10-14 в 12:28:23

Вообще-то прекрасно работает.
Проверьте, кто висит у Вас на этом порту и занимает его.
sockstat -4 |grep 1879
до запуска rinetd
либо проверьте правильность внешнего IP :)

Ivan, 2009-11-29 в 13:26:49

Хорошая вещь, natd конечно лучше, но и rinetd заслуживает внимания.

Саня , 2009-12-24 в 19:25:01

>[оверквотинг удален]
>
>
>РЕШИЛ проблему очень просто:
>в портах /usr/ports/net/rinetd
>ставим, создаем файл конфига /usr/local/etc/rinetd.conf
>
>формат: rinetd.conf
>внешнийIP внешнийПОРТ внутреннийIP внутреннийПОРТ
>


та  как должнобить ((((((((9
>ВСЕ ЗАРАБОТАЛО С ПЕРВОГО РАЗА
Только вот синтаксис ты немножко неправильно написал - у меня заработало вот так:

внутренний_адрес_карточки порт адрес_назначения порт

Александр, 2009-12-24 в 19:52:24

вот мой пример работает !

logcommon                      #тип лог файла
logfile /var/log/rinetd.log    #собственно сам лог файл
allow *.87.154.*
deny 192.*.*.*
deny 192.168.*.*
deny 224.*.*.*
deny 172.16.*.*
deny 172.16.*.*
deny 10.*.*.*
deny 169.254.*.*

0.0.0.0 8020  192.168.3.220 8080

andrey7x7, 2011-04-18 в 13:01:28

А кто-нить сталкивался с тем что при отправке письма с вложением 50-100kb оно в в упор не хочет отправляться?
Только из-за этого пришлось поднять NAT для почты,
но как быть с RDP ибо тоже тупит хотя и работает :)

srg, 2011-10-13 в 1:20:05

Товарищщи! Обратите внимание на то, что тут описываются конкретные случае в большенстве случае по Defoult событиям по настройке сервисов. Если возникают проблемы или же не допонимания к той или иной статье, пишите в форум. не стоит засорять доску, уважайте автора сайта.

Александр, 2020-11-12 в 18:05:32

Проблема вто что програма начала есть место на диске.
/dev/nvd0p2                        447G    447G    -35G   109%    /

./rinetd restart

df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/nvd0p2    447G     52G    359G    13%    /


rinetd.conf
logcommon                      
logfile /var/log/rinetd.log    


0.0.0.0 3398  192.168.3.251 3389 #
#0.0.0.0 2217  192.168.3.17 22 #
0.0.0.0 2222  192.168.3.70 22 #


rinetd.log       85
rinetd.log.0.gz  16578



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0456 секунд
Из них PHP: 18%; SQL: 82%; Число SQL-запросов: 86 шт.
Исходный размер: 37075; Сжатая: 9649