Биллинговая система Nodeny
26 Ноября 2024, 08:21:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: UPnP ipfw freebsd 8.2 nodeny+  (Прочитано 8141 раз)
ivanmfan
Постоялец
***

Карма: 9
Offline Offline

Сообщений: 131


Просмотр профиля Email
« : 20 Апреля 2013, 07:46:33 »

Подскажите, при помощи чего реализовать нормально UPnP когда сервер в nat-e и существуют vlan'ы.
Записан
versus
Администратор
Спец
*****

Карма: 21
Offline Offline

Сообщений: 845


44306843
Просмотр профиля WWW Email
« Ответ #1 : 20 Апреля 2013, 09:08:51 »

Безумству храбрых поем мы песни! Идти на поводу качальчищов торента это убивать свою сеть!
Записан
versus
Администратор
Спец
*****

Карма: 21
Offline Offline

Сообщений: 845


44306843
Просмотр профиля WWW Email
« Ответ #2 : 20 Апреля 2013, 09:20:05 »

Исходные данные - шлюз на FreeBSD с сетевым экраном на PF

Задача - обеспечить автоматический проброс портов при помощи UPnP и NAT-PMP

Реализация:

Начнем с установки miniupnp

Код:
# cd /usr/ports/net/miniupnpd
# make install clean
# rehash
Затем настраиваем конфиг демона

Код:
# cd /usr/local/etc
# cp miniupnp.conf.samble
# ee miniupnp.conf

Код:
# WAN-интерфейс, у меня это ng0, это vpn-соединение с провайдером
# Грубо говоря, указываем тот, где белый IP =)
ext_ifname=ng0
# Можно указать конкретный IP адрес для
# WAN-интерфейса, если их несколько
#ext_ip=

# На каком IP будет слушать демон
#  10.5.0.1 - это моя домашняя сетка
#listening_ip= 192.168.0.61
listening_ip=10.5.0.1

# Порт для HTTP ставим автоматом, 0.
port=0

# path to the unix socket used to communicate with MiniSSDPd
# If running, MiniSSDPd will manage M-SEARCH answering.
# default is /var/run/minissdpd.sock
#minissdpdsocket=/var/run/minissdpd.sock

# Разрешаем поддержку NAT-PMP
enable_natpmp=yes

# lease file location
#lease_file=/var/log/upnp.leases

# bitrates reported by daemon in bits per second
bitrate_up=131072
bitrate_down=524288

# "secure" mode : when enabled, UPnP client are allowed to add mappings only
# to their IP. (default is yes)
#secure_mode=yes

# default presentation url is http address on port 80
#presentation_url=

# report system uptime instead of daemon uptime
system_uptime=yes

# unused rules cleaning.
# never remove any rule before this threshold for the number
# of redirections is exceeded. default to 20
#clean_ruleset_threshold=10
# clean process work interval in seconds. default to 0 (disabled).
# a 600 seconds (10 minutes) interval makes sense
clean_ruleset_interval=600

# notify interval in seconds default is 30 seconds.
#notify_interval=240

# log packets in pf
#packet_log=no
# ALTQ queue in pf
# filter rules must be used for this to be used.
# compile with PF_ENABLE_FILTER_RULES (see config.h file)
#queue=queue_name1

# uuid : generated by the install a new one can be created with
# uuidgen
uuid=29f628ec-2cf7-11df-a746-00105a477213

# UPnP permission rules
# (allow|deny) (external port range) ip/mask (internal port range)
# A port range is <min port>-<max port> or <port> if there is only
# one port in the range.
# ip/mask format must be nn.nn.nn.nn/nn
# Разрешаем доступ с домашней локалки
allow 1024-65535 10.5.0.0/24 1024-65535
#allow 1024-65535 10.0.2.0/24 1024-65535
# Запрещаем все остальное
deny 0-65535 0.0.0.0/0 0-65535
Есно, что это минимальный конфиг.

Теперь добавляем якоря в конфиг PF
Код:
# ee /etc/pf.conf
Помним про очередность правил в конфиге - макросы/опции, нормализация, трансляция (NAT), перенаправление, фильтрация.

Сразу после правил NAT
Код:
nat on {$ext_if} from $int_if:network to any -> {$ext_if}
nat on {$vpn_if} from $int_if:network to any -> {$vpn_if}

добавляем якорь на редирект портов

Код:
## ... ...
rdr-anchor "miniupnpd"
## ... ...
Ниже, где начинаются правила фильтрации трафика, добавляем такой якорь

Код:
## ... ...
anchor "miniupnpd"
## ... ...
Сохраняем и проверяем конфиг

Код:
# pfctl -nf /etc/pf.conf
Если ошибок нет, применяем новый конфиг

Код:
# pfctl -f /etc/pf.conf
Теперь добавляем в /etc/rc.conf такие строки

Код:
miniupnpd_enable="YES" # стартуем демон
miniupnpd_config="/usr/local/etc/miniupnpd.conf" # путь к конфигу
miniupnpd_flags="" # флаги демона
Стартуем демон в тестовом режиме, выход с него стандартный, по Ctrl+C

Код:
# miniupnpd -d
Будет примерно такое

Код:
 miniupnpd -d
miniupnpd[53695]: HTTP listening on port 52377
miniupnpd[53695]: Listening for NAT-PMP traffic on port 5351
miniupnpd[53695]: set nextnatpmptoclean_timestamp to 80151
miniupnpd[53695]: HTTP connection from 10.5.0.5:4138
miniupnpd[53695]: HTTP REQUEST : GET /rootDesc.xml (HTTP/1.1)
miniupnpd[53695]: HTTP connection from 10.5.0.3:2721
Если все ок, и демон ожил, можно убить демон и стартовать его как положено

Код:
# /usr/local/etc/rc.d/miniupnpd start
Работу miniupnpd можно проверить/увидеть вот так

Код:
# pfctl -a miniupnpd -sn


утянул с http://forum.inmart.ua/showthread.php?t=12383
Записан
ivanmfan
Постоялец
***

Карма: 9
Offline Offline

Сообщений: 131


Просмотр профиля Email
« Ответ #3 : 20 Апреля 2013, 14:15:06 »

Видал статью, вот момент не понятен

# На каком IP будет слушать демон
#  10.5.0.1 - это моя домашняя сетка
#listening_ip= 192.168.0.61
listening_ip=10.5.0.1


выходит что слушает только один интерфейс? у меня vlan'ы на несколько подсетей.
Записан
versus
Администратор
Спец
*****

Карма: 21
Offline Offline

Сообщений: 845


44306843
Просмотр профиля WWW Email
« Ответ #4 : 20 Апреля 2013, 17:18:17 »

Видал статью, вот момент не понятен

# На каком IP будет слушать демон
#  10.5.0.1 - это моя домашняя сетка
#listening_ip= 192.168.0.61
listening_ip=10.5.0.1


выходит что слушает только один интерфейс? у меня vlan'ы на несколько подсетей.

Ну уж если вам влом прочитать доку по программе или глянуть довольно таки живой форум этой же программы или вас забанили в гугле, то почему мы должны помогать лентяям?

Лично я нашел ответ на этот вопрос за несколько минут,  уверяю вас ничего сложного
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #5 : 21 Апреля 2013, 00:04:26 »

Нет, ну вы вообще обнаглели в край! Говно форум! Ничего не делаете!
P.S. Охренеть... просто походу в гугл пускают только избранных...
Записан
versus
Администратор
Спец
*****

Карма: 21
Offline Offline

Сообщений: 845


44306843
Просмотр профиля WWW Email
« Ответ #6 : 21 Апреля 2013, 14:57:12 »

Нет, ну вы вообще обнаглели в край! Говно форум! Ничего не делаете!
P.S. Охренеть... просто походу в гугл пускают только избранных...

мало того мы нарушаем права человека декларируемые ООН!!!

Цитировать
Свободный доступ в интернет — одно из основных прав человека, а ограничение доступа — нарушение этого основного права, говорится в авторитетном докладе спецпредставителя ООН Франка Ла Рю. По мнению автора доклада, интернет в XXI в. превратился в один из самых мощных инструментов — и институтов — реализации прав человека

Я боюсь по отношению к нам теперь могут применить симметричный и ассиметричный ответ

Цитировать
"Ограничены в правах люди... Никакое суверенное государство терпеть такого и оставлять такое без ответа не может и не должно, если хочет, чтобы его уважали и с ним считались. У нашей исполнительной власти достаточно инструментов, которые могут быть применены для симметричного или асимметричного ответа, а ответ последует незамедлительно, в этом я не сомневаюсь", - отметил сенатор.
Записан
ivanmfan
Постоялец
***

Карма: 9
Offline Offline

Сообщений: 131


Просмотр профиля Email
« Ответ #7 : 22 Апреля 2013, 07:51:26 »

Спасибо, разберусь обязательно. Просто я по большей части создаю темы на форуме, не для того что бы вас понапрягать, а для тех кого в будущем заинтересует данный вопрос, он смог быстро найти здесь.
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #8 : 22 Апреля 2013, 18:15:44 »

Не знав про існування такої програми - після встановлення вихідний трафік зріс в 2 рази.
З внутрішніми інтерфейсами проблем не виникло - працює зі всіма вланами. Питання як заставити працювати з кількома зовнішініми інтерфесами ? Якщо вказати кілька то реально працює тільки з останнім.  Запускати кілька копій програми чи є ще якісь варіанти ?
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #9 : 23 Апреля 2013, 08:02:48 »

Як найпростіше скриптом  з файлу -

Код:
rdr pass quick on vlan123 inet proto udp from any to any port = 21068 keep state label NAT-PMP 21068 udp rtable 0 ->10.1.103.201 port 21068
rdr pass quick on vlan123 inet proto tcp from any to any port = 60496 keep state label MediaGet2 2.01.2257 at 10.1.113.106:60496 rtable 0 -> 10.1.113.106 port 60496
rdr pass quick on vlan123 inet proto udp from any to any port = 60496 keep state label MediaGet2 2.01.2257 at 10.1.113.106:60496 rtable 0 -> 10.1.113.106 port 60496
rdr pass quick on vlan123 inet proto udp from any to any port = 35809 keep state label NAT-PMP 35809 udp rtable 0 -> 10.1.113.106 port 35809

Зробити такий файл -
Код:
rdr on vlan222 inet proto udp from any to any port = 21068 -> 10.1.103.201 port 21068
rdr on vlan222 inet proto tcp from any to any port = 60496 -> 10.1.113.106 port 60496
rdr on vlan222 inet proto udp from any to any port = 60496 -> 10.1.113.106 port 60496
rdr on vlan222 inet proto udp from any to any port = 35809 -> 10.1.113.106 port 35809

По крону буду раз в 1 хв. запускати цей скрипт і проблема з кількома зовнішніми інтерфейсами вирішиться
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #10 : 23 Апреля 2013, 14:58:52 »

Розібрався, файлик генерується таким скриптом -

Код:
#!/usr/bin/perl

while (<>) {
     @line = split(/ /);
     $col = @line;
     print "$line[0] $line[3] vlan188 $line[5] $line[6] $line[7] $line[8] $line[9] $line[10] $line[11] $line[12] $line[13] $line[14] -> " .
     $line[$col-3] . " " . $line[$col-2] . " " . $line[$col-1];
     }


відповідно -
Код:
/sbin/pfctl -a miniupnpd -sn | /usr/bin/perl script.pl > 123.txt
після цього -
Код:
pfctl -a uaix -f "123.txt"

ну і в /etc.pf.conf добавити
Код:
rdr-anchor "uaix"
anchor "uaix"
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!