Страница 1 из 1

Ipfw NAT и mpd5

Добавлено: 2010-12-20 19:56:33
hranitel_y2k
Люди помогите, поиск в гугле и чтение man не помогает.

Проблема в том,что на серваке работала схема IPFW+NATD+MPD5. Mpd5 используется в качестве клиента для PPPoE подключения к интернету.
Решил перевести всю схему на ipfw nat (kernel), вылезла проблема:
При старте системы в логах ошибка:

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

gate kernel: ipfw:
gate kernel: unknown interface name ng0
Правило для ipfw на котором возникает ошибка:

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

ipfw nat 1 config log if ng0 reset same_ports deny_in
Интернета, естественно, и в сетке, и на сервере нет, поскольку нат не работает (mpd5 благополучно соединяется и все что нужно получает). Если после загрузки соединиться с серваком и сделать ipfw forcerestart, то ошибка не возникает и инет пашет и на самом сервере и на всех хостах сети. Потом, даже если соединение с провом рвется, когда связь восстанавливается, инет у всех появляется.
Я так понимаю, поправьте если не прав, проблема в том,что ipfw инициализируется раньше mpd5, и когда он пытается это сделать, интерефейса ng0 еще нет - отсюда и ошибка.
Как это можно исправить?
Есть мысль сделать для mpd up_script, но у меня это скрипт почему-то не пашет. Может есть более правильное решение проблемы?

Re: Ipfw NAT и mpd5

Добавлено: 2010-12-20 20:07:50
terminus
проблема в том,что ipfw инициализируется раньше mpd5, и когда он пытается это сделать, интерефейса ng0 еще нет - отсюда и ошибка.
так точно.
Может есть более правильное решение проблемы
Можно попробовать выставить зависимости в rc.c скрипте MPD. А вообще народ с этим уже воевал - поищите по форуму.

Re: Ipfw NAT и mpd5

Добавлено: 2010-12-20 20:13:08
hranitel_y2k
Находил, тоже говорили про зависимости. Подскажите или, подкиньте ссылку на маны, как это можно сделать?

Re: Ipfw NAT и mpd5

Добавлено: 2010-12-20 20:37:13
hizel
в mpd есть свой nat в client-mode, зачем вам natd и kernel nat?

Re: Ipfw NAT и mpd5

Добавлено: 2010-12-20 20:52:23
hranitel_y2k
hizel писал(а):в mpd есть свой nat в client-mode, зачем вам natd и kernel nat?
Ng_nat?
А зачем использовать дополнительный модуль, когда у ipfw уже есть весь необходимый функционал? Да и конфиг один получается,настраивать проще...

Re: Ipfw NAT и mpd5

Добавлено: 2010-12-20 21:03:51
hizel
угу, по вашей проблеме и видно что проще :-)

Re: Ipfw NAT и mpd5

Добавлено: 2010-12-20 21:16:15
hranitel_y2k
hizel писал(а):угу, по вашей проблеме и видно что проще :-)
Проще вообще было не трогать NATD,у него такой проблемы нет:)
Но все таки вопрос остается открытым... Как более удобным и простым методом решить проблему?
Мне пока видятся только скрипты в mpd, пойду читать мануалы на данную тему...

Re: Ipfw NAT и mpd5

Добавлено: 2011-01-03 23:12:29
armadex
ну наверное что то типа такого костыля
cat /usr/local/etc/mpd5/start_nat.pl

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

#!/usr/bin/perl

$ppp_nat_addr=$ARGV[2];
$gw_nat_addr='10.78.233.253';


$ppp_nat_cmd=sprintf("/usr/sbin/ngctl -f - << -EOF
mkpeer ipfw: nat 1 out
name ipfw:1 PPP_NAT
connect ipfw: PPP_NAT: 2 in
msg PPP_NAT: setaliasaddr %s
",$ppp_nat_addr);
system($ppp_nat_cmd);

$gw_nat_cmd=sprintf("/usr/sbin/ngctl -f - << -EOF
mkpeer ipfw: nat 3 out
name ipfw:3 GW_NAT
connect ipfw: GW_NAT: 4 in
msg GW_NAT: setaliasaddr %s
",$gw_nat_addr);
system($gw_nat_cmd);


$fw_one=sprintf("/sbin/ipfw add netgraph 2 all from any to %s via ng0 in",$ppp_nat_addr);
$fw_two=sprintf("/sbin/ipfw add netgraph 1 all from 192.168.1.2 to any via ng0 out");
$fw_third=sprintf("/sbin/ipfw add netgraph 4 all from any to 10.78.233.253 via rl0 in");
$fw_four=sprintf("/sbin/ipfw add netgraph 3 all from 192.168.1.2 to any via rl0 out");

`$fw_one`;
`$fw_two`;
`$fw_third`;
`$fw_four`;
cat /usr/local/etc/mpd5/stop_nat.pl

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

#!/usr/bin/perl

$nat_type="PPP";
$gw_type="GW";

$stop_ppp_nat_cmd=sprintf("/usr/sbin/ngctl shutdown %s_NAT:",$nat_type);
`$stop_ppp_nat_cmd`;
$stop_gw_nat_cmd=sprintf("/usr/sbin/ngctl shutdown %s_NAT:",$gw_type);
`$stop_gw_nat_cmd`;
########## ЧИСТИМ ФАЕРВОЛ #######################
$stop_fw_cmd=sprintf("/sbin/ipfw -f flush");
`$stop_fw_cmd`;
фаер DEFAULT_TO_ACCEPT
ну и в mpd.conf добавить

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

        set iface up-script /usr/local/etc/mpd5/start_nat.pl
        set iface down-script /usr/local/etc/mpd5/stop_nat.pl
если не нужно натить во внутреннюю сеть провайдера провайдера, то пункты с GW_NAT можно пропустить!

Re: Ipfw NAT и mpd5

Добавлено: 2011-01-04 3:04:07
hranitel_y2k
Спасибо, после праздников буду тестить!

Всех с НОВЫМ ГОДОМ!!!

Re: Ipfw NAT и mpd5

Добавлено: 2011-01-05 16:11:53
hranitel_y2k
Решил проблему через mpd скрипт, заодно прописал через него маршрут по умолчанию. Down скрипт не делал, поскольку проблема только при старте системы и поднятии интефейса.
Может кому пригодиться:

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

set iface up-script /usr/local/etc/mpd5/link_up.sh

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

#!/bin/sh
route delete default
route add default $4
ipfw nat 1 config log if $1 reset same_ports deny_in
Вообще, очень интересная ситуация с ipfw, сам нат он создавать не хочет (пишет нет интерфейса), зато спокойно создает правила с ним связанные :cz2: