mpd5.5+ng_nat dynamic port_mapping

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
zentarim
мл. сержант
Сообщения: 73
Зарегистрирован: 2010-07-22 23:10:56

mpd5.5+ng_nat dynamic port_mapping

Непрочитанное сообщение zentarim » 2010-09-28 21:35:06

Доброго времени суток всем!
Для начала хотелось бы выразить благодарность самому lissyara и всем здесь присутствующим за великолепный сборник статей. Ответы на очень многие вопросы были найдены именно здесь. Спасибо вам за ваш труд!

Теперь к делу:
У меня ADSL, раздаваемый компанией у которой "с октября месяца не было ни единого разрыва!!"
белый IP адрес, сессия поднимается, естественно, на фряхе. Разрыв :crazy: PPPOE сессии один раз в 24 часа, после которого IP адрес меняется
Сначал я работал через связку pppd+ipfw+natd, но при этом мой P233, служащий в качестве шлюза, загружался на 98-99 %. из них порядка 30% жрал pppd, еще 30% забирал natd, и еще 30% отбирала сетевая карточка (ISA 10 мбит/с, определилась как ed1).
Естественно скорость соединения нехило падала, особенно при включенных торрентах. Поэтому взялся за настройку mpd + ng_nat + IPFW. К сожалению при пробросе портов через ng_nat возникла проблема. Выдержка из мануала к ng_nat:
set nat red-port proto alias_addr alias_port local_addr local_port [ remote_addr remote_port ]
Redirect incoming connections arriving to given public (alias) address and port, (optionally from specified remote address)
to a host and port of a machine on the local network.
то есть получается, что внешний IP адрес также нужно прописать в конфиге mpd. Но на момент запуска mpd этот адрес неизвестен. Я пробовал писать конструкции типа:
set nat red-port tcp <внешний порт> <внутренний IP> <внутренний порт>
set nat red-port tcp 0.0.0.0 <внешний порт> <внутренний IP> <внутренний порт>
set nat red-port tcp self <внешний порт> <внутренний IP> <внутренний порт>
однако проброс портов не появился и вывод команды

Код: Выделить всё

# ngctl msg mpd`cat /var/run/mpd5.pid`-B1-nat: listredirects
ничего не дал. В логе mpd ничего про нат не было. Пришлось выкручиваться при помощи link-up скрипта:

Код: Выделить всё

# cat /usr/local/etc/mpd5/link-up
#!/bin/sh

MPD_PID=`cat /var/run/mpd5.pid`
#mpd передает link-up скрипту несколько параметров, среди них и ip адрес ...
ALIAS=$3
# ... и имя интерфейся
IFACE=$1
# соответствия протоколов (сугубо для личного удобства)
TCP=6
UDP=17

#собственно проброс портов:
ngctl msg mpd${MPD_PID}-B1-nat: redirectport { local_addr='<внутренний IP>' alias_addr=${ALIAS} local_port='<внутренний порт1>'  alias_port='<внешний порт1>' proto=${TCP} }
ngctl msg mpd${MPD_PID}-B1-nat: redirectport { local_addr='<внутренний IP>' alias_addr=${ALIAS} local_port='<внутренний порт2>'  alias_port='<внешний порт2>' proto=${TCP} }
ngctl msg mpd${MPD_PID}-B1-nat: redirectport { local_addr='<внутренний IP>' alias_addr=${ALIAS} local_port='<внутренний порт3>'  alias_port='<внешний порт3>' proto=${TCP} }


#запуск ipfw и передача ему имени интерфейса
/usr/local/etc/firewall.sh.ng_nat $IFACE
# обновление записи dynamic dns
/usr/local/etc/rc.d/ddclient restart
После этого вывод ngctl уже содержит список редиректов

Код: Выделить всё

# ngctl msg mpd`cat /var/run/mpd5.pid`-B1-nat: listredirects
Rec'd response "listredirects" (10) from "[e]:":
Args:   { total_count=3 redirects=[ { id=1 local_addr=<внутренний адрес> alias_addr=<внешний адрес> local_port=<внутренний порт1> alias_port=<внешний порт1> proto=6 } { id=2 local_addr=<внутренний адрес> alias_addr=<внешний адрес> local_port=<внутренний порт2> alias_port=<внешний порт2> proto=6 } { id=3 local_addr=<внутренний адрес> alias_addr=<внешний адрес> local_port=<внутренний порт3> alias_port=<внешний порт3> proto=6 }   ] }
конфиг mpd:

Код: Выделить всё

# cat /usr/local/etc/mpd5/mpd.conf
startup:
        set user <name> <password>
        set console self 127.0.0.1 5005
        set console open
        set web self 192.168.72.1 5006
        set web open
       set log +*

default:
        load adsl_stream

adsl_stream:
        create bundle static B1
        set iface route default
        set iface up-script "/usr/local/etc/mpd5/link-up"
        set iface enable nat
# вот тут должен идти блок редиректов
#        set nat red-port tcp <внешний порт> <внутренний IP> <внутренний порт>
#        set nat red-port tcp 0.0.0.0 <внешний порт> <внутренний IP> <внутренний порт>
#        set nat red-port tcp self <внешний порт> <внутренний IP> <внутренний порт>
        set nat enable same-ports
        set nat enable incoming
        set ipcp ranges 0.0.0.0/0 0.0.0.0/0
        set ipcp enable req-pri-dns
        set ipcp enable req-sec-dns
#        set link disable multilink
#        set link disable incoming
#        set ipcp disable vjcomp
        set iface enable tcpmssfix

        create link static L1 pppoe
        set link action bundle B1
        set auth authname <stream_authname>
        set auth password <stream_password>
        set link max-redial 0
        set link mtu 1492
#        set link mru 1492
        set link keep-alive 10 100
        set pppoe iface ed1
        set pppoe service "stream"
        open
Релиз:

Код: Выделить всё

# uname -r
7.3-RELEASE
ядро собрано с дополнительными опциями :

Код: Выделить всё

options IPFIREWALL
options IPFIREWALL_FORWARD
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT
options DUMMYNET
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_SOCKET
options NETGRAPH_PPP
options NETGRAPH_PPPOE
options NETGRAPH_ASYNC
options NETGRAPH_IFACE
options NETGRAPH_MPPC_COMPRESSION
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_TEE
options NETGRAPH_TCPMSS
options NETGRAPH_PPTPGRE
options NETGRAPH_KSOCKET
options NETGRAPH_NAT
версия mpd:

Код: Выделить всё

# pkg_info | grep mpd
mpd-5.5             Multi-link PPP daemon based on netgraph(4)
теперь собственно вопрос:
Можно ли как-то настроить проброс портов на динамическом адресе через конфиги? Так как то, что получилось у меня - костыль еще тот. Заранее благодарю за помощь.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35267
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: mpd5.5+ng_nat dynamic port_mapping

Непрочитанное сообщение Alex Keda » 2010-09-29 16:23:28

снимать адресок с интерфейса в переменную и оперировать ею
Убей их всех! Бог потом рассортирует...

Аватара пользователя
zentarim
мл. сержант
Сообщения: 73
Зарегистрирован: 2010-07-22 23:10:56

Re: mpd5.5+ng_nat dynamic port_mapping

Непрочитанное сообщение zentarim » 2010-09-29 20:42:45

Alex Keda писал(а):снимать адресок с интерфейса в переменную и оперировать ею
Я имел в виду - можно ли обойтись без этого геморроя и настроить проброс портов с динамического IP через mpd.conf

Гость
проходил мимо

Re: mpd5.5+ng_nat dynamic port_mapping

Непрочитанное сообщение Гость » 2010-09-29 20:45:53

Можно ли как-то настроить проброс портов на динамическом адресе через конфиги?
в mpd есть официальная документация, почитайте а?

Аватара пользователя
zentarim
мл. сержант
Сообщения: 73
Зарегистрирован: 2010-07-22 23:10:56

Re: mpd5.5+ng_nat dynamic port_mapping

Непрочитанное сообщение zentarim » 2010-09-30 19:27:59

Гость писал(а): в mpd есть официальная документация, почитайте а?
/usr/local/share/doc/mpd5/mpd39.html:
set nat red-port proto alias_addr alias_port local_addr local_port [ remote_addr remote_port ]
Redirect incoming connections arriving to given public (alias) address and port, (optionally from specified remote address)
to a host and port of a machine on the local network.
пробовалось вот так:
set nat red-port tcp <внешний порт> <внутренний IP> <внутренний порт>
так
set nat red-port tcp 0.0.0.0 <внешний порт> <внутренний IP> <внутренний порт>
и так
set nat red-port tcp self <внешний порт> <внутренний IP> <внутренний порт>
не работает

Гость
проходил мимо

Re: mpd5.5+ng_nat dynamic port_mapping

Непрочитанное сообщение Гость » 2010-09-30 19:40:07

вариант - "не работает"
не информативен
включайте логирование и изучайте, что именно не работает

Аватара пользователя
Laa
ст. лейтенант
Сообщения: 1032
Зарегистрирован: 2008-02-21 18:25:33
Откуда: Украина, Россия

Re: mpd5.5+ng_nat dynamic port_mapping

Непрочитанное сообщение Laa » 2011-10-20 16:31:46

(случайно нашел эту тему в гугле...)

Для истории, может кто еще столкнется и кому-то пригодится тоже.

В mpd был баг, который разработчики устранили, а в порт патч не внесли.
Вот этот файл надо влить http://mpd.cvs.sourceforge.net/viewvc/m ... ision=1.13 в ports/net/mpd5/work/mpd-5.5/src/ вместо nat.c оригинального. Пересобрать и переустановить порт и редирект портов из mpd начинает работать корректно.

Успехов.
exim: помните, что выдавая deny, вы можете недоставить ваше же письмо, зарубив sender-verify удаленного MTA к вашему MTA!!!

Аватара пользователя
zentarim
мл. сержант
Сообщения: 73
Зарегистрирован: 2010-07-22 23:10:56

Re: mpd5.5+ng_nat dynamic port_mapping

Непрочитанное сообщение zentarim » 2011-11-29 6:43:28

Laa писал(а):(случайно нашел эту тему в гугле...)

Для истории, может кто еще столкнется и кому-то пригодится тоже.

В mpd был баг, который разработчики устранили, а в порт патч не внесли.
Вот этот файл надо влить http://mpd.cvs.sourceforge.net/viewvc/m ... ision=1.13 в ports/net/mpd5/work/mpd-5.5/src/ вместо nat.c оригинального. Пересобрать и переустановить порт и редирект портов из mpd начинает работать корректно.

Успехов.
Спасибо большое за ответ. Тема до сих пор актуальна, пусть и в меньшей степени. В ближайшее время я попробую пересобрать mpd и обязательно сообщу о результатах.