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
>#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 кажись так, с синтаксисом мог намудрить --т.к. на память
>[оверквотинг удален]
>>${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
Да, Alex123 именно так.
Я читал все большинство статей про pbr , то увы не помогло. Трафик как второго интерфейса почему то отправляется через первый =(
>Да, Alex123 именно так.
>Я читал все большинство статей про pbr , то увы не помогло.
>Трафик как второго интерфейса почему то отправляется через первый =(ну тогда попробуй принудительный skipto поставить перед первым на второй с правилом вида
add skipto №правил_нат2 ip from wan2_nat to not wan2_nat via wan2_if
на всякий в rc.conf gateway_enable="YES" стоит?
>Да, Alex123 именно так.а это читали?
http://www.opennet.me/tips/info/788.shtml
>>Да, 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} айпи которые выдаются при подключении к впн серверу.
>[оверквотинг удален]
>
>${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
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Может из за впн ? С маршрутами что не так?
>[оверквотинг удален]
>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 и ниже и в данном примере получается петля -- что крайне не рекомендуется :)
а что показывает
sysctl net.inet.ip.fw.one_pass
[q=http://ipfw.ism.kiev.ua/ipfw.html]
net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится в брандмауэр по следующему правилу.
[q]
>а что показывает
>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), срабатывают нормально.
>>а что показывает
>>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 должно быть выставлено в НОЛЬ!
почему? - читаем доки!
>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 ставится номер правила
>>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 колонка), которые совпали с этими правилами.
Вообщем я о том, к чему пустые слова?
Жду мнения экспертов о моей проблеме :)
>Вообщем я о том, к чему пустые слова?
>Жду мнения экспертов о моей проблеме :)Да, я точно не эксперт, но всётаки гляньте на 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я тоже без понятия, если это попытка роутинга или проброса, то это делается не так.
Да, ещё в ядре должна быть опция IPFIREWALL_FORWARD_EXTENDED, или её кажись можно задать через sysctl
>Да, ещё в ядре должна быть опция 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.
>по статье 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 фре.
>ну и где там написано про "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 фре.
>
>Без out via ${wan1_if} в логе я вижу, что пакет пытается идти
>через шлюз по умолчанию. Как я понимаю не работает из-за того,
>что я использую vpn. Все клиенты подключаются через впн.
>Сегодня попробую реализовать все без pptp на тестовой машине .пропиши роутинг в ppp.conf для подмены при поднятии
>пропиши роутинг в ppp.conf для подмены при поднятииили пропиши роутинг, как в статье!!
>
>>пропиши роутинг в 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 rl005301 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