Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Русификация
  COM-порт
  Монтирование образов
  dd
  burncd
  Консоль
  polling
  redirect_port
  wolf3d
  W.O.L.
  HDD->HDD
  bsdstats
  pdf в html
  monitord
  monit
  dvd в avi
  LAM
  Контроль провайдера
  pppd
  ru man
  geom_uzip
  colorize
  nettop
  немного о ssh
  установка по сети
  ClamAV mirror
  BlueTooth
  WiFi WPA
  iftop
  iPod
  2 CD -> 1 DVD
  ipcalc
  LACP и VLAN
  FFS из-под WinXP
  queues
  NFS & Win2k3
  Dynamic DNS
  ProFTPD+iconv
  deltup, xdelta, bdelta
  Приглашение csh/tcsh
  настрока bash
  Lan over Bluetooth
  pppoe
  метаданные exif
  dd : бэкапируем windows
  mozilla autoconfig
  Proxy Auto Configuration
  NNTP сервер
  Rinetd
  ISO DVD FreeBSD
  my disc1
  sftp+chroot
  SendXMPP
  APCUPSD
  Видеонаблюдение
  Настройка аудиоплеера на ximp3
  HDD(mbr) -> HDD(gpt)
  mc 4.6.2
  Динамический DNS
  axel
  LiveCD
  NAS на MPD
  backup конфигов на почту
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> redirect_port

Редирект порта с гейта на внутреннюю машину (natd)

Автор: lissyara.


    Понадобилось выпустить локальную машину по одному из портов в инет (www сервер, но, ввиду занятости 80 порта, снаружи он будет на 81-м. А вообще народ это юзает для всяких edonkey и прочего хламу). Гейт на FreeBSD6.0 - на нём уже стоял natd - народу из локалки надо же лазить в инет. Почитавши man natd, конкретно, раздел про redirect_port, стало ясно - сложностей особых нету. Для начала, для собственного удобства, решил переделать запуск natd - у меня он стартовал из /etc/rc.conf с указанием в виде флагов всех ключей запуска. Неудобно - а если завтра понадобится ещё на 5-ти машинах подобное мутить? Там строка запуска в километр будет. Итак. Приводим /etc/rc.conf к такому состоянию (показан кусок касающийся тока natd):
# NATD
natd_enable="YES"
natd_flags="-f /etc/natd.conf"

ну и создаём указанный файл, такого содержания:
# Интерфейс на котором работает natd (внешний)
interface rl0
# Пробовать оставить тот же самый порт у исходящих пакетов.
# При таком флаге лучше работают протоколы типа RPC. Если это
# невозможно то порт будет изменён.
same_ports
# nat`ить только частные сети (у вас же внутри частная сеть?)
unregistered_only
# самое интересное - то, ради чего все и затевалось.
# Редиректим пакеты по протоколу tcp, приходящие на внешний порт
# 81 на машину с адресом 192.168.20.251 и на 80-й порт.
redirect_port tcp 192.168.20.251:80 81

Заметтьте в файле используется не краткая а полная форма записи ключей. Потом перезапускаем машину (или убиваем natd и запускаем с командной строки с нужными ключами-файлами), интернет должен работать как и работал, а вот при попытке зайти на 81 порт - скорей всего будет облом. Файрволл. Я убил минут 30 пока понял почему оно работате так и только так:
${FwCMD} add allow tcp from any to 192.168.20.251 80 via ${LanOut}

Видать, пакеты в nat попадают ещё до файрволла, потому и приходится изгаляться с разрешением внутреннего адреса на внешнем интерфейсе (Вообще, если вдаваться в подробности - то пакеты через файр проходят неоднократно, и на каком из заходов действует это правило - я не знаю :()
Вот тока после этого и заработало.



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=5466.

размещено: 2006-04-21,
последнее обновление: 2008-10-30,
автор: lissyara

оценить статью:

Abigor, 2006-04-24 в 9:01:54

было бы не плохо, если бы ты добавил в статью еще редирект для ftp так как это всегда больная тема =)

3EBC, 2006-05-02 в 0:33:23

А чего тут сложного?
Точно также пишешь в /etc/natd.conf:
redirect_port tcp 192.168.20.251:21 21
Всё.
Если пэссив моде используется, то тут надо целый диапазон портов указывать. Например в ProFTPD можно указать какие именно порты использовать для пассивного режима(для этого в proftpd.conf суем строку PassivePorts 8001 8100, таким образом будут использоваться порты с 8001 до 8100). Затем точно также в /etc/natd.conf добавляем:
redirect_port tcp 192.168.20.251:8001-8100 8001-8100
При этом также не забывааем добавить в proftpd.conf такую строку:
MasqueradeAddress <внешний_айпи_роутера>

SergDN, 2006-05-28 в 0:28:29

Когда редиректов несколько (по адресам и портам), как быть?
Есть некоторые неприятные зависимости результатов редиректа от расположения в файле правил на ipfw (особенно c проверкой состояния). Надежнее переходить на редирект в pf от OpenBSD. Тем более что даже от разработчиков толком не добится правильного решения подобных задач для ipfw/ipfw2. Не подставляйте свои шлюзы (примеров не будет :))

lissyara, 2006-05-28 в 9:26:52

По ушам не езди. На данный момент - это беспочвенное утверждение.

none, 2006-10-25 в 12:16:22

Спасибо за статью (-:
Для редиректа портов, для осла, использовал ipnat - очень просто и удобно, советую тоже обратить внимание (-:

FiSHeR, 2006-11-09 в 4:34:29

можно еще серез rinetd
rinetd.conf
0.0.0.0 1234 192.168.0.10 1234
откуда и куда
:)

vek, 2007-01-09 в 13:02:58

Ну спасибо ! Сильно помог.

Zeus, 2007-03-13 в 14:24:17

а еще есть хорошая утилитка в  в портах - bounce
bounce [-a localaddr | -b localaddr] [-p localport] machine port

kapvik, 2007-03-15 в 12:00:37

А ещё есть в портах redir

VAdim, 2007-03-22 в 11:07:18

Redir нормально пашет с ftp passive mode

sergio, 2007-03-30 в 17:03:17

Спасибо!
Есть еще вариант:
1) в файл /etc/services:
прописываем
nashport81     81/tcp
2) в /etc/inetd.conf пишем:
nashport81 stream  tcp     nowait  root    /usr/local/bin/socket   socket 192.168.0.1 80
3) killall -1 inetd


Тоже пашет!

Gracias, 2007-04-19 в 20:47:24

Думал что Nat'ом пользуюсь на 100%,
не тут-то было! echo "Thanks to Lissyara.su";)

Alexander Sheiko, 2007-05-04 в 5:55:23

> Я убил минут 30 пока понял почему оно работате так и только так

Пакеты попадают в файерволл дважды - на входе и на выходе из интерфейса...

Колян, 2007-08-30 в 18:43:34

Советую юзать айпинат, аффтар, пешы на мыло или в аську, 4461828.

ADilm, 2007-09-08 в 14:27:16

PF
время ipfw  уже прошло

Fmod, 2007-10-18 в 17:08:12

redirect_port отказывается работать если комп подключен в инет через адсл, уже все перепробовал :( (нужно чтоб некоторые сервера локальной сети были доступны из инета)
Приходится использовать rinetd и portfwd.
Причем в локальной сети redirect_port работает замечательно.
Заметил такую особенность redirect_port, при редиректе он выдает реальный ип того кто конектится, rinetd и portfwd заменяют ип на ип компа на котором установлены, из за чего невозможно вычислить ип подключившегося.
P.S. rinetd не рекомендую ибо виснет.

Fmod, 2007-10-26 в 21:50:08

Оказалось что и portfwd падает если использовать его для торентов. Вариант sergio с сокетами оказался самым лучшим. Только надо не забыть  cd /usr/ports/sysutils/socket && make install clean  

friman, 2007-12-05 в 13:57:52

Вот разберись как связать и почему так происходит когда nat отдельно, фильтр отдельно, шейпер отдельно ...
PF действительно лучший - умет всё сам.

vid, 2008-04-18 в 8:18:35

Для некоторых портов еще необходимо делать проброс и udp.
redirect_port tcp 192.168.20.251:80 81
redirect_port udp 192.168.20.251:80 81
и еще у меня заработало только когда я в ipfw добавил помимо
${FwCMD} add allow tcp from any to 192.168.20.251 80 via ${LanOut}
еще и
${FwCMD} add allow tcp from any to 192.168.20.251 80 via ${LanIn}

Volkoff, 2008-05-08 в 10:44:56

Предложенная схема не заработала на 7-ке, NAT просто игнорирует файлик natd.conf и слушает только стандартный 8668, скорее всего из-за компиляции в ядро. Зато заработала схема предложенная sergio. Только там надо добавить
${FwCMD} add allow tcp from "ип клиента или any" to ${IpOut} "порт" in via ${LanOut} setup
в правила фаирвола и разрешить inetd в rc.conf
inetd_enable="YES"

HOSTER, 2008-09-09 в 1:48:46

АЛЯ PF(Packet Filter)
rdr on em0 proto tcp from any to any port 99 -> google.com port 80

Прокинет что хочешь и куда хочешь!
Вот что нужно юзать )

mazdayka, 2008-09-19 в 9:34:31

socket -это конечно хорошо, но он показывает только локальный ip при пробросе, а как быть или что использовать если нужно знать реальный ip откуда идёт коннект?

Michael /780, 2008-10-30 в 8:58:09

 Решил поставить почтовый сервак за шлюзом. Этот шлюз раздает nat на несколько сетевых интерфейсов (раздает инет), сервисом natd+ipfw. Как тут быть?
redirect_port tcp 192.168.1.10:25 25
Где 192.168.1.10 - ip почтовика
Правило ipfw
${FwCMD} add allow tcp from any to 192.168.1.10 25 via ${внешний интерфейс с нат'ом}
Непонятки: где разрешать 110 порт на почтовик?

abigor, 2008-11-05 в 11:32:10

to Michael /780
там же
redirect_port tcp 192.168.1.10:110 110
${FwCMD} add allow tcp from any to 192.168.1.10 110 via ${внешний интерфейс с нат'ом}

Zar, 2008-11-18 в 11:57:17

народ, а что с natd в 7ой ветке? что с ним сделали? у меня как и у Volkoff не могу уже неделю настроить,
буква в букву переписал с боевого сервера  6.2... не работает... не редиректит порты... и логов нету..

Zar, 2008-11-19 в 9:20:16

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

Damon_X, 2008-12-24 в 12:01:57

RINETD на 7ки отлично работал. Сбоев замечено не было. Ушёл от него из-за того, что подменяет IP!

Roland, 2009-02-04 в 15:36:42

на 7-ке что только не делал, месяц уже убил.
Не пашет ни ipfw nat ни divert natd(((




Аноним , 2009-02-27 в 17:32:29

Фря 7.1 ipfw + natd
Работает следующая конструкция,

${FwCMD} add allow tcp from any to 192.168.1.10 80 via ${внешний интерфейс с нат'ом}
+ inetd_enable="YES"

респект и уважуха !!!!
Дай вам Бог здоровья )))

daggerok, 2009-03-17 в 2:32:13

на 7-ке у меня так (надеюсь кому-то пригодится):
в /etc/rc.conf ничего о natd нет. я буду его запускать из скрипта фаера, и вообще мне проще по максимуму делать все в нем. скрипт лежит в /usr/local/etc/rc.d/
вот его часть касательно сабжа (пробрасываем, для примера, порт радмина. стандартный):
ipfw="/sbin/ipfw"
natd="/sbin/natd"
sysctl="/sbin/sysctl"
$sysctl net.inet.ip.fw.one_pass=0
oip="222.222.222.2" #внешний ип
oif="em0" #внешний иф
iip="192.168.0.1" #внутренний ип
iif="xl0" #внутренний иф
local_pc_ip="192.168.0.2" #тазик в локалке, на который надо пробросить порт 4899
#стартуем нат на внешнем ифе с редиректом:
$natd -m -s -n $oif -p 8669 -redirect_port tcp $local_pc_ip:4899 4899
#стартуем нат на внутриннем ифе:
$natd -m -s -n $iif -p 8668
#дальше собственно диверты:
$ipfw add divert 8669 log all from any to $oip 4899 in via $oif
$ipfw add divert 8668 log all from any to $local_pc_ip 4899 out via $iif
$ipfw add divert 8668 log all from $local_pc_ip 4899 to me in via $iif
$ipfw add divert 8669 log all from $local_pc_ip 4899 to any out via $oif
#ну и разрешаем нашим пакетам ходить через фаер:
$ipfw add allow tcp from any to $local_pc_ip 4899 via $oif
#в конце последнее правило
$ipfw add deny ip from any to any
#в нескольких статьях от "некоторых" авторов видел примеры с пробросами (более простые), но завершающиеся разрешающим правилом всего:))
$ipfw add allow ip from any to any
#меня это совершенно не вдохновляло, думаю многих так же не порадует.
#предложенная конструкция проверена и работоспособна на 7.1

daggerok, 2009-03-17 в 11:41:00

да, кста, можно так же не извращаться с двумя натами и сделать еще так (у меня работают оба варианта, тот что выше и следующий):

#вешаем нат на внешний ип с редиректом:
$natd -a ${oip} -p 8668 -redirect_port tcp $local_pc_ip:4899 4899

#собсно диверт:
$ipfw add divert 8668 ip from any to $oip in via $oif
$ipfw add divert 8668 ip from $local_pc_ip to any out via $oif

#для проверки обязательно перед денаем пишем следующие правила:
$ipfw add allow ip from any to me 4899
$ipfw add allow ip from any to $local_pc_ip 4899
$ipfw add allow ip from $local_pc_ip 4899 to any
#хотя мне кажется, что первое их этих трех правил (ip from any to me 4899) ненужно :)
# в любом случае потом можно будет по ipfw show посмотреть, ходят ли через него пакеты
#есть не ходят то можно спокойно убить его :)
#лично мне оно было нужно из-за того что в скрипте фаера, ниже - были определенные запреты.

#ну и обязательно последнее запрещающее правило:
$ipfw add deny ip from any to any

#в этом варианте используется один нат, и по идее, так должно быстрее работать чем в примере выше
#хотя хз :))

rexxer, 2010-09-14 в 10:36:49

Всем привет!
Настраивал это дело на 2х машинах - поначалу был везде разный результат и пришлось помучаться. В результате был найден рецепт.
1. НАТД умеет редиректить любые порты в любые.
2. Разрешающее правило для прохождения пакета должно стоять после диверта (у меня он одним правилом).
3. Перед этим не должно стоять правил разрешающих и з апрещающих есстественно.
4. Самое интересное, что net.inet.ip.fw.one_pass=0 не помогло.

yanixoids, 2010-09-28 в 12:09:25

И зачем такие паравозы, все банально и просто в ipfw+ipnat. В ipnat'e достаточно пробросить 80 порт на локальную машинку и всего делов.

rdr em0(вн.интерфейс) from any to out_ip port=80 -> 192.168.1.50 port 81 tcp




Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 23 чел.
За последние 30 мин было: 72 человек
За сегодня было
8577 показов,
1010 уникальных IP
 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.042 секунд
Из них PHP: 21%; SQL: 79%; Число SQL-запросов: 77 шт.
Исходный размер: 141392; Сжатая: 25995