URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 83313
[ Назад ]

Исходное сообщение
"Два канала + ipfw."

Отправлено RusBiT , 11-Дек-08 16:42 
FreeBSD 6.2-RELEASE
Пытаюсь настроить двойной nat. Срабатывает только nat на порту 8668. По умолчанию маршрутом прописан шлюз второг канала, wan2_gw
#NATD
${fwcmd} add divert 8778 ip from ${wan1_nat} to any out via ${wan1_if}
${fwcmd} add fwd ${wan1_gw} ip from ${wan1_ip} to any out via ${wan1_if}

${fwcmd} add divert 8668 log ip from ${wan2_nat} to any out via ${wan2_if}
${fwcmd} add fwd ${wan2_gw} log ip from ${wan2_ip} to any out via ${wan2_if}

${fwcmd} add divert 8778 ip from any to ${wan1_ip} in via ${wan1_if}
${fwcmd} add divert 8668 ip from any to ${wan2_ip} in via ${wan2_if}

В логах
Dec 10 15:27:34 user kernel: ipfw: 5201 Forward to 10.0.7.7 UDP 10.0.7.15:60895 194.87.0.50:33448 out via rl1

Как понимаю на шлюз первого канала , идет через интерфейс второго канала, по этому ничего и не срабатывает.

В ядре включено.
options         NETGRAPH
options         NETGRAPH_BPF
options         NETGRAPH_IFACE
options         NETGRAPH_KSOCKET
options         NETGRAPH_MPPC_ENCRYPTION
options         NETGRAPH_PPP
options         NETGRAPH_PPTPGRE
options         NETGRAPH_SOCKET
options         NETGRAPH_TCPMSS
options         NETGRAPH_VJC
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_FORWARD
options         IPDIVERT
options         DUMMYNET
options      TCP_DROP_SYNFIN


Содержание

Сообщения в этом обсуждении
"Два канала + ipfw."
Отправлено Alex123 , 11-Дек-08 17:32 

>#NATD
>${fwcmd} add divert 8778 ip from ${wan1_nat} to any out via ${wan1_if}
>
>${fwcmd} add fwd ${wan1_gw} ip from ${wan1_ip} to any out via ${wan1_if}
>

@2
>${fwcmd} add divert 8668 log ip from ${wan2_nat} to any out via
>${wan2_if}
>${fwcmd} add fwd ${wan2_gw} log ip from ${wan2_ip} to any out via
>${wan2_if}

если я правильно понял то Вам надо перекинуть трафф  с wan1_nat в wan1_if, а с wan2_nat в wan2_if
тогда зачем ставить указание направления out , по крайней мере в 7-ой ветки это делается конфигурацией ната
add nat 123 config ip wan2_ip deny_in кажись так, с синтаксисом мог намудрить --т.к. на память


"Два канала + ipfw."
Отправлено Pahanivo , 11-Дек-08 17:34 
>[оверквотинг удален]
>>${wan2_if}
>>${fwcmd} add fwd ${wan2_gw} log ip from ${wan2_ip} to any out via
>>${wan2_if}
>
>если я правильно понял то Вам надо перекинуть трафф  с wan1_nat
>в wan1_if, а с wan2_nat в wan2_if
>тогда зачем ставить указание направления out , по крайней мере в 7-ой
>ветки это делается конфигурацией ната
>add nat 123 config ip wan2_ip deny_in кажись так, с синтаксисом мог
>намудрить --т.к. на память

вопрос постоянно задается - policy based routing freebsd


"Два канала + ipfw."
Отправлено RusBiT , 11-Дек-08 17:50 
Да, Alex123  именно так.
Я читал все большинство статей про pbr , то увы не помогло. Трафик как второго интерфейса почему то отправляется через первый =(

"Два канала + ipfw."
Отправлено Alex123 , 11-Дек-08 18:03 
>Да, Alex123  именно так.
>Я читал все большинство статей про pbr , то увы не помогло.
>Трафик как второго интерфейса почему то отправляется через первый =(

ну тогда попробуй принудительный skipto поставить перед первым на второй с правилом вида
add skipto №правил_нат2 ip from wan2_nat to not wan2_nat via wan2_if


на всякий в rc.conf gateway_enable="YES" стоит?


"Два канала + ipfw."
Отправлено Alex123 , 11-Дек-08 18:11 
>Да, Alex123  именно так.

а это читали?
http://www.opennet.me/tips/info/788.shtml


"Два канала + ipfw."
Отправлено RusBiT , 11-Дек-08 19:11 
>>Да, Alex123  именно так.
>
>а это читали?
>http://www.opennet.me/tips/info/788.shtml

Прочитал, в принципе у меня все так.

Сделал как вы просили, если я правильно понял
#NATD
${fwcmd} add skipto 8778 ip from ${wan2_ip} to not ${wan2_ip} via ${wan2_if}
${fwcmd} add divert 8778 ip from ${wan1_nat} to any out via ${wan1_if}
${fwcmd} add fwd ${wan1_gw} ip from ${wan1_ip} to any out via ${wan1_if}

${fwcmd} add divert 8668 log ip from ${wan2_nat} to any out via ${wan2_if}
${fwcmd} add fwd ${wan2_gw} log ip from ${wan2_ip} to any out via ${wan2_if}

${fwcmd} add divert 8778 ip from any to ${wan1_ip} in via ${wan1_if}
${fwcmd} add divert 8668 ip from any to ${wan2_ip} in via ${wan2_if}

Счетчик понулям в первом правиле.

Забыл добавить что я использую на сервере VPN. То есть ${wan1_ip} и ${wan1_ip} айпи которые выдаются при подключении к впн серверу.


"Два канала + ipfw."
Отправлено Alex123 , 11-Дек-08 19:20 
>[оверквотинг удален]
>
>${fwcmd} add divert 8778 ip from any to ${wan1_ip} in via ${wan1_if}
>
>${fwcmd} add divert 8668 ip from any to ${wan2_ip} in via ${wan2_if}
>
>
>Счетчик понулям в первом правиле.
>
>Забыл добавить что я использую на сервере VPN. То есть ${wan1_ip} и
>${wan1_ip} айпи которые выдаются при подключении к впн серверу.

Выкмнте ipfw show


"Два канала + ipfw."
Отправлено RusBiT , 11-Дек-08 19:24 
04901         0           0        add skipto 8669 ip from 10.0.7.7 to not 10.0.7.7 via rl2
05101         0           0        divert 8669 ip from 192.168.11.0/24 to any out via rl2
05201         0           0        fwd 10.0.7.7 ip from 10.0.7.15 to any out via rl2
05301  35446814 37343784966        divert 8668 log logamount 100 ip from 192.168.10.0/24 to any out via rl1
05401     62046    77376812        fwd 84.22.1**.1 log logamount 100 ip from 84.22.1**.2 to any out via rl1
05501         0           0       divert 8669 ip from any to 10.0.7.5 in via rl0
05601  28490585 16983034146       divert 8668 ip from any to 84.22.1**.2 in via rl1
05701        23        2181       allow ip from 192.168.10.0/23 to any in via ng*
05801  28442420 16980467659       allow ip from not 192.168.10.0/23 to 192.168.10.0/23

Может из за впн ? С маршрутами что не так?


"Два канала + ipfw."
Отправлено Alex123 , 11-Дек-08 19:45 
>[оверквотинг удален]
>in via rl0
>05601  28490585 16983034146       divert 8668
>ip from any to 84.22.1**.2 in via rl1
>05701        23    
>    2181      
>allow ip from 192.168.10.0/23 to any in via ng*
>05801  28442420 16980467659       allow ip
>from not 192.168.10.0/23 to 192.168.10.0/23
>
>Может из за впн ? С маршрутами что не так?

ну так разница между 8669 и 5301 есть?

Лучьше задовайте правила в отд. файле, а ссылку на него укажите в rc.conf
friewall_type="/etc/my.firewall.conf" -- кажись так;

а правила в нём пишутся так:
add 1000 divert 8669 ip from 192.168.11.0/24 to not 10.0.7.7 via rl2
и т.д. где 1000 -- порядковый номер правила

соответственно правило
add 1002 skipto 1001 ip from any to any
--передаёт пакеты правилу 1001 и ниже и в данном примере получается петля -- что крайне не рекомендуется :)



"Два канала + ipfw."
Отправлено Alex123 , 11-Дек-08 20:17 
а что показывает
sysctl net.inet.ip.fw.one_pass
[q=http://ipfw.ism.kiev.ua/ipfw.html]
net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится в брандмауэр по следующему правилу.
[q]

"Два канала + ipfw."
Отправлено RusBiT , 12-Дек-08 04:45 
>а что показывает
>sysctl net.inet.ip.fw.one_pass
>[q=http://ipfw.ism.kiev.ua/ipfw.html]
>net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через
>брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится
>в брандмауэр по следующему правилу.
>[q]

net.inet.ip.fw.one_pass: 1
pipe в конфиге файрвола присутствуют(точнее abills добавляет pipe), срабатывают нормально.


"Два канала + ipfw."
Отправлено Pahanivo , 12-Дек-08 08:27 
>>а что показывает
>>sysctl net.inet.ip.fw.one_pass
>>[q=http://ipfw.ism.kiev.ua/ipfw.html]
>>net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через
>>брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится
>>в брандмауэр по следующему правилу.
>>[q]
>
>net.inet.ip.fw.one_pass: 1
>pipe в конфиге файрвола присутствуют(точнее abills добавляет pipe), срабатывают нормально.

при использовании пайпов net.inet.ip.fw.one_pass должно быть выставлено в НОЛЬ!
почему? - читаем доки!



"Два канала + ipfw."
Отправлено Alex123 , 12-Дек-08 16:29 
>net.inet.ip.fw.one_pass: 1
>pipe в конфиге файрвола присутствуют(точнее abills добавляет pipe), срабатывают нормально.

переставь в 0 -- тогда работа фаервола станет более очивидной

теперь в краце:
когда
ipfw show
то в самой левой колонки номера правил фаервола;
пакеты в фаерволе бегут по правилам с первого по 65*** последне правило с номером 65*** (*** -- точно не помню), всегда существует и в зависимости от конфигурации ядра может быть либо
add 65*** allow ip from any to any
или
add 65*** deny ip from any to any

пакеты попадают в фаервол не однократно, а на каждом интерфейсе, и это надо учитывать.
пакет уничтожается, если подподает под правило с deny и переходит на следующий интерфейс, если встречает правило с allow, в любом случае движение вниз по правилам прекращается.

если пакет подпадает под правило c skipto №№№, то пакет переходит к правилу №№№, если такого н существует, то к ближайшему, но с более высоки номером, № №№№ правила можно увидить командой ipfw show, в самой левой колонки номера правил фаервола
для добавления правила с указанием номера

после add ставится номер правила


"Два канала + ipfw."
Отправлено RusBiT , 12-Дек-08 19:22 
>>net.inet.ip.fw.one_pass: 1
>>pipe в конфиге файрвола присутствуют(точнее abills добавляет pipe), срабатывают нормально.
>
>переставь в 0 -- тогда работа фаервола станет более очивидной
>
>теперь в краце:
>когда
>ipfw show

Спасибо за помощь. Как будет возможность проверю.
Описание принципа работы ipfw - не к чему, ибо я прочитал не одну статью на эту тему. Понравилась - http://www.lissyara.su/?id=1536 , pbr настраивал по статье http://ipfw.ism.kiev.ua/pbr.html , слегка изучил man.

>после add ставится номер правила

и перед add ставится номер правила.

>правила можно увидить командой ipfw show

Правила можно увидеть ipfw list, а ipfw show показывает правила и счётчики пакетов (2 и 3 колонка), которые совпали с этими правилами.

Вообщем я о том, к чему пустые слова?
Жду мнения экспертов о моей проблеме :)


"Два канала + ipfw."
Отправлено Alex123 , 12-Дек-08 20:23 
>Вообщем я о том, к чему пустые слова?
>Жду мнения экспертов о моей проблеме :)

Да, я точно не эксперт, но всётаки гляньте на http://www.unixdoc.ru/print.php?print_id=15
синтаксис у ната несколько другой, просто в 7-ой ядерный нат и сантаксис отличается от 6-ой, но как оказалось не столь сильно, запрет на входящие (могу предположить) делается в natd.conf а не в правилах чем-нить типа deny_incoming yes

что по Вашему должна делать:
>05201         0           0        fwd 10.0.7.7 ip from 10.0.7.15 to any out via rl2

я тоже без понятия, если это попытка роутинга или проброса, то это делается не так.


"Два канала + ipfw."
Отправлено Alex123 , 13-Дек-08 16:25 
Да, ещё в ядре должна быть опция IPFIREWALL_FORWARD_EXTENDED, или её кажись можно задать через sysctl


"Два канала + ipfw."
Отправлено RusBiT , 13-Дек-08 18:03 
>Да, ещё в ядре должна быть опция IPFIREWALL_FORWARD_EXTENDED, или её кажись можно
>задать через sysctl

В моем версии freebsd данная опция отсутсвует.
        The IPFIREWALL_FORWARD_EXTENDED option is gone and the behaviour
        for IPFIREWALL_FORWARD is now as it was before when it was first
        committed and for years after. The behaviour is now ON.



"Два канала + ipfw."
Отправлено Kos , 13-Дек-08 00:58 
>по статье http://ipfw.ism.kiev.ua/pbr.html , слегка изучил man.
>

ну и где там написано про "in via" или "out via"? Если ошибаюсь, пусть меня поправят, но Ваше правило типа
{fwcmd} add divert 8778 ip from ${wan1_nat} to any out via ${wan1_if}
никогда не сработает, потому что фря все равно будет пихать пакет в шлюз по-умолчанию.

статья 100% рабочая и опробована на 5, 6 и 7 фре.


"Два канала + ipfw."
Отправлено RusBiT , 13-Дек-08 18:07 

>ну и где там написано про "in via" или "out via"? Если
>ошибаюсь, пусть меня поправят, но Ваше правило типа
> {fwcmd} add divert 8778 ip from ${wan1_nat} to any out via
>${wan1_if}
>никогда не сработает, потому что фря все равно будет пихать пакет в
>шлюз по-умолчанию.

Без out via ${wan1_if} в логе я вижу, что пакет пытается идти через шлюз по умолчанию. Как я понимаю не работает из-за того, что я использую vpn. Все клиенты подключаются через впн.
Сегодня попробую реализовать все без pptp на тестовой машине .
>
>статья 100% рабочая и опробована на 5, 6 и 7 фре.


"Два канала + ipfw."
Отправлено Alex123 , 13-Дек-08 19:06 

>
>Без out via ${wan1_if} в логе я вижу, что пакет пытается идти
>через шлюз по умолчанию. Как я понимаю не работает из-за того,
>что я использую vpn. Все клиенты подключаются через впн.
>Сегодня попробую реализовать все без pptp на тестовой машине .

пропиши роутинг в ppp.conf для подмены при поднятии


"Два канала + ipfw."
Отправлено Alex123 , 13-Дек-08 19:10 

>пропиши роутинг в ppp.conf для подмены при поднятии

или пропиши роутинг, как в статье!!


"Два канала + ipfw."
Отправлено RusBiT , 27-Дек-08 12:52 
>
>>пропиши роутинг в ppp.conf для подмены при поднятии
>
>или пропиши роутинг, как в статье!!

Вот так оно и заработало :) И работает две недели.

05205 divert 8669 log logamount 100 ip from 192.168.11.0/24 to any out xmit rl1
05245 fwd 10.0.7.7 log logamount 100 ip from 10.0.7.5 to any out xmit rl1
05265 divert 8669 ip from any to 10.0.7.5 in via rl0

05301 divert 8668 ip from 192.168.10.0/24 to any out via rl1
05401 fwd 84.22.13*.1 ip from 84.22.13*.** to any out via rl1
05601 divert 8668 ip from any to 84.22.13*.** in via rl1