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

ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-04 15:29:08
admin_sv
Нужна помощь в такой проблеме: " не могу изменить next hop для ip-адресов из таблицы 1. пакеты ходят но без изменения в маршрутизации. Чтобы срезать разговор об pipe скажу сразу что изменил параметер net.inet.ip.fw.one_pass=0, что заставляет пакеты из pipe идти дальше по правилам, а не покидать ядро.

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

18502 pipe tablearg ip from table(24) to any
18503 pipe tablearg ip from table(21) to any
31996 fwd 192.168.2.1 ip from table(1) to any
31997 allow ip from table(24) to any
31998 allow ip from table(21) to any
32000 deny ip from any to any
Но чувствую что этот-же параметр и регулирует работу fwd, но не уверен не нашел описания. Задача стоит в том чтобы маршрутизировать пакеты идущие по pipe.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-04 20:06:43
admin_sv
Тема закрыта, решение найдено.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-04 21:27:11
Alex Keda
admin_sv писал(а):Тема закрыта, решение найдено.
вообще, принято решениями делится =)

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-13 9:36:44
admin_sv

вообще, принято решениями делится =)
Делится нечем, fwd пакеты пропускает дальше на остальные правила. А в мануале написано что как только пакет соответствует правилу fwd он выбрасывается из ядра(не проверяется) и уходит по месту назначения с подменой мака следующего прыжка. Тоже в отношении pipe, попал в правило будь добр иди. Совместить не возможно. Решено через правило route-to из комплекта pf и удалением бесполезного правила fwd. :drinks:
PS
Трубы режут скорость, pf роутит некоторых товарищей и держит nat.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-13 14:55:07
harmless
А кто мешает в правило форвардинга засунуть доп проверку наличия в обоих таблицах
было

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

18502 pipe tablearg ip from table(24) to any
18503 pipe tablearg ip from table(21) to any
31996 fwd 192.168.2.1 ip from table(1) to any
31997 allow ip from table(24) to any
31998 allow ip from table(21) to any
32000 deny ip from any to any
станет

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

18502 pipe tablearg ip from table(24) to any
18503 pipe tablearg ip from table(21) to any
31996 fwd 192.168.2.1 ip from { table(1) and table(24) } to any //что-то типо того
31997 allow ip from table(24) to any
31998 allow ip from table(21) to any
32000 deny ip from any to any

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-13 15:39:14
harmless
Еще красивее решение

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

00001 reass ip from any to any in
00100 pipe tablearg ip from table(1) to any in
00101 pipe tablearg ip from table(2) to any out
00200 nat 1 ip from any to any via em0
00300 count tag tablearg ip from table(3) to any
00501 fwd 127.0.0.1 ip from { table(1) or table(2) } to any tagged 1
00502 fwd 127.0.0.2 ip from { table(1) or table(2) } to any tagged 2
00503 fwd 127.0.0.3 ip from { table(1) or table(2) } to any tagged 3
65000 allow ip from any to any
65534 deny ip from any to any
В новой версии параметром tablearg можно задавать даже номер правила для skipto

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-13 15:46:21
harmless
Только нат поставить в нужное место

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-15 16:09:26
admin_sv
Извините но вы дочитать пробивали то что я написал? Как только пакет до трубы доходит, он не проверяется на последующие правила. Тоже касаемо и форвардинга. Если заставить дальше идти по списку правил, то форвардинг все равно не срабатывает. Так как устроен так, ну или я чего не понимаю. По сути то что вы пишите я делал счетчик на правиле растет, но пакеты все идут через default route.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-15 16:11:57
admin_sv
и задача отправить не две таблицы через другой хоп, а только часть.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-15 16:13:43
harmless
admin_sv писал(а):Извините но вы дочитать пробивали то что я написал? Как только пакет до трубы доходит, он не проверяется на последующие правила. Тоже касаемо и форвардинга. Если заставить дальше идти по списку правил, то форвардинг все равно не срабатывает. Так как устроен так, ну или я чего не понимаю. По сути то что вы пишите я делал счетчик на правиле растет, но пакеты все идут через default route.
Пакеты после трубы и ната выходят с фаерволла только при nen.inet.ip.fw.one_pass=1!!!!!
Дочитайте и разберитесь с теми правилами что я написал.
Если вам разные маршруты нужны - тогда вам дорога к set fib

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-15 16:41:34
admin_sv
Если заставить дальше идти по списку правил, то форвардинг все равно не срабатывает.
И я несовсем понимаю роль этих правил:

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

00501 fwd 127.0.0.1 ip from { table(1) or table(2) } to any tagged 1
00502 fwd 127.0.0.2 ip from { table(1) or table(2) } to any tagged 2
00503 fwd 127.0.0.3 ip from { table(1) or table(2) } to any tagged 3

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-15 17:38:00
harmless
harmless писал(а):Еще красивее решение

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

00001 reass ip from any to any in
00100 pipe tablearg ip from table(1) to any in
00101 pipe tablearg ip from table(2) to any out
00200 nat 1 ip from any to any via em0
00300 count tag tablearg ip from table(3) to any // этим правилом вешаем метки согласно аргента в таблице
00501 fwd 127.0.0.1 ip from { table(1) or table(2) } to any tagged 1 // тут форвардим согласно метке = 1
00502 fwd 127.0.0.2 ip from { table(1) or table(2) } to any tagged 2 // тут форвардим согласно метке = 2
00503 fwd 127.0.0.3 ip from { table(1) or table(2) } to any tagged 3 // тут форвардим согласно метке = 3
65000 allow ip from any to any
65534 deny ip from any to any
В новой версии параметром tablearg можно задавать даже номер правила для skipto
У меня все работает!
Вместо 127.0.0.1, 127.0.0.2, 127.0.0.3 свои подставьте

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-16 20:49:56
admin_sv
ну принцип я вижу, но непонятно происхождение table 3
00300 count tag tablearg ip from table(3) to any
и еще каждый новый пакет идет на другой хоп по принципу round-robin, правильно понял? Также хочу уточнить о каком трафике идет речь: in or out? У меня такое впечатление что вы описываете ответы на запросы пришедшие не из default rote.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-16 21:13:33
admin_sv
Задача стоит следующая: есть роутер у него 2 in (они равнозначны по качеству и скорости), за роутером сеть около 40 точек. Доступ к интернету контролирует pipe, то есть режется только скорость. Стоит потребность в том чтобы часть из 40 точек отправить на другой канал(все пакеты должны идти только через него!!!).

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-16 23:43:37
harmless
admin_sv писал(а):Задача стоит следующая: есть роутер у него 2 in (они равнозначны по качеству и скорости), за роутером сеть около 40 точек. Доступ к интернету контролирует pipe, то есть режется только скорость. Стоит потребность в том чтобы часть из 40 точек отправить на другой канал(все пакеты должны идти только через него!!!).
тю, так бы и писали
короткий вариант

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

    #!/bin/sh

    #############################################
    #**** FireWall - конфигурационный файл *****#
    #############################################
    # бинарник ipfw
    FwCMD="/sbin/ipfw -q "
    # шаблон таблицы
    FwTable="${FwCMD} table "
    # Шаблон трубы
    FwPipe="${FwCMD} pipe "

    #*******************************************#
    #**** ISP1 ****#
    #*******************************************#
    # Локальная сеть
    NetOut_ISP1="1.1.1.0/24"
    # IP сервера в сети ISP1
    IpOut_ISP1="1.1.1.2"
    # Интерфейс, смотрящий в сеть ISP1
    LanOut_ISP1="vr0"

    GW_ISP1="1.1.1.2"

    /usr/sbin/setfib -0 route add default ${GW_ISP1}
    /usr/sbin/setfib -1 route add default ${GW_ISP1}

    #*******************************************#
    # Разбросаем всех клиентов по разным таблицам маршрутизации 0 - 2
    ${FwTable} 1 add 10.0.0.2/32 1
    ${FwTable} 1 add 10.0.0.3/32 2
    ${FwTable} 1 add 10.0.0.4/32 2
    ${FwTable} 1 add 10.0.0.5/32 1
    ${FwTable} 1 add 10.0.0.6/32 2
    ${FwTable} 1 add 10.0.0.7/32 1
    ${FwTable} 1 add 10.0.0.8/32 2
    ${FwTable} 1 add 10.0.0.9/32 1
    ${FwTable} 1 add 10.0.0.10/32 1
    ${FwTable} 1 add 10.0.0.11/32 2
    ${FwTable} 1 add 10.0.0.12/32 1
    ${FwTable} 1 add 10.0.0.13/32 2
    ${FwTable} 1 add 10.0.0.14/32 0
    ${FwTable} 1 add 10.0.0.15/32 0

    #*******************************************#
    #**** Все что качается ISP2 ****#
    #*******************************************#
    # Локальная сеть ISP2
    NetOut_ISP2="2.2.2.0/24"
    # IP сервера в сети ISP2
    IpOut_ISP2="2.2.2.2"
    # Интерфейс, смотрящий в сеть ISP2
    LanOut_ISP2="re0"

    GW_ISP2="2.2.2.1"

    /usr/sbin/setfib -2 route add default ${GW_ISP2}

    #############################################

    #*******************************************#
    #* Все что качается локальной сети *#
    #*******************************************#
    # Локальная сеть
    NetIn="10.0.0.0/24"
    # IP сервера в локальной сети
    IpIn="10.0.0.1"
    # Интерфейс, смотрящий в локальную сеть
    LanIn="em0"

    #############################################

    #*******************************************#
    #***************** СЕРВИСЫ *****************#
    #*******************************************#

    #* DNS *#

    TCP="domain"
    UDP="domain"

    #############################################


    #############################################
    ${FwCMD} disable one_pass
    #############################################

    ################# CLEAN ALL #################

    ${FwCMD} -f flush
    ${FwCMD} -f pipe flush
    ${FwCMD} -f queue flush
    ${FwCMD} -f sched flush

    ${FwCMD} nat 4 config  if ${LanOut_ISP1} unreg_only same_ports reset log
    ${FwCMD} nat 5 config  if ${LanOut_ISP2} unreg_only same_ports reset log

    #*******************************************#
       # LoopBack lo0
    ${FwCMD} add skipto 15000 in via lo0
    ${FwCMD} add skipto 20000 out via lo0

    # ISP1 LanOut_ISP1
    ${FwCMD} add skipto 25000 in via ${LanOut_ISP1}
    ${FwCMD} add skipto 30000 out via ${LanOut_ISP1}

    # ISP2 LanOut_ISP2
    ${FwCMD} add skipto 35000 in via ${LanOut_ISP2}
    ${FwCMD} add skipto 40000 out via ${LanOut_ISP2}

    # Lan
    ${FwCMD} add skipto 45000 in via ${LanIn}
    ${FwCMD} add skipto 50000 out via ${LanIn}

    # Deny statement for any other packets
    ${FwCMD} add skipto 65534 via any

    #############################
    # LoopBack lo0
    # IN pass
    ${FwCMD} add 15000 count in via lo0
    ${FwCMD} add permit in via lo0

    # Out pass
    ${FwCMD} add 20000 count out via lo0
    ${FwCMD} add permit out via lo0

    # ISP1 LanOut_ISP1
    # IN pass
    ${FwCMD} add 25000 count in via ${LanOut_ISP1}
    ${FwCMD} add skipto 65534 not dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1}
    ${FwCMD} add nat 4 dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1}
    ${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1} established
    ${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP1} dst-port ${TCP} in via ${LanOut_ISP1} setup keep-state
    ${FwCMD} add permit udp from any to any dst-ip ${IpOut_ISP1} dst-port ${UDP} in via ${LanOut_ISP1} keep-state
    ${FwCMD} add permit log tcp from any to any dst-ip ${IpOut_ISP1} dst-port 22 in via ${LanOut_ISP1} setup keep-state
    ${FwCMD} add permit dst-ip table\(100\) in via ${LanOut_ISP1}
    ${FwCMD} add permit icmp from any to any dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1} keep-state
    ${FwCMD} add skipto 65534 in via ${LanOut_ISP1}

    # OUT pass
    ${FwCMD} add 30000 count out via ${LanOut_ISP1}
    ${FwCMD} add nat global src-ip table\(100\) out via ${LanOut_ISP1}
    ${FwCMD} add skipto 34000 src-ip ${IpOut_ISP1} out via ${LanOut_ISP1}
    ${FwCMD} add fwd ${GW_ISP2} src-ip ${IpOut_ISP2}
    ${FwCMD} add nat 4 src-ip table\(100\) out via ${LanOut_ISP1}
    ${FwCMD} add 34000 permit src-ip ${IpOut_ISP1} out via ${LanOut_ISP1} keep-state
    ${FwCMD} add skipto 65534 out via ${LanOut_ISP1}

    # ISP2 LanOut_ISP2
    # IN pass
    ${FwCMD} add 35000 count in via ${LanOut_ISP2}
    ${FwCMD} add skipto 65534 not dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2}
    ${FwCMD} add nat 5 dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2}
    ${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2} established
    ${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP2} dst-port ${TCP} in via ${LanOut_ISP2} setup keep-state
    ${FwCMD} add permit udp from any to any dst-ip ${IpOut_ISP2} dst-port ${UDP} in via ${LanOut_ISP2} keep-state
    ${FwCMD} add permit log tcp from any to any dst-ip ${IpOut_ISP2} dst-port 22 in via ${LanOut_ISP2} setup keep-state
    ${FwCMD} add permit dst-ip table\(100\) in via ${LanOut_ISP2}
    ${FwCMD} add permit icmp from any to any dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2} keep-state
    ${FwCMD} add skipto 65534 in via ${LanOut_ISP2}

    # OUT pass
    ${FwCMD} add 40000 count out via ${LanOut_ISP2}
    ${FwCMD} add nat global src-ip table\(100\) out via ${LanOut_ISP2}
    ${FwCMD} add skipto 44000 src-ip ${IpOut_ISP2} out via ${LanOut_ISP2}
    ${FwCMD} add fwd ${GW_ISP1} src-ip ${IpOut_ISP1}
    ${FwCMD} add nat 5 src-ip table\(100\) out via ${LanOut_ISP2}
    ${FwCMD} add 44000 permit src-ip ${IpOut_ISP2} out via ${LanOut_ISP2} keep-state
    ${FwCMD} add skipto 65534 out via ${LanOut_ISP2}

    # Lan
    # IN pass
    ${FwCMD} add 45000 count in via ${LanIn}
    ${FwCMD} add setfib tablearg src-ip table\(1\) in via ${LanIn}
    ${FwCMD} add permit in via ${LanIn}

    # OUT pass
    ${FwCMD} add 50000 count out via ${LanIn}
    ${FwCMD} add permit out via ${LanIn}

    ${FwCMD} add 65534 deny via any

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-18 9:09:42
admin_sv
Есть пару вопросов по написанному конфигу:
  • 1) зачем назначать 1 и тот-же маршрут 0 и 1

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

    /usr/sbin/setfib -0 route add default ${GW_ISP1}
    /usr/sbin/setfib -1 route add default ${GW_ISP1}
    
    2) В примере я понимаю настроена стена за которой стоят компы к которым есть прямой доступ из инета?
Мне нужно пользователей из таблицы 1(всех) отправить через шлюз 1(весь трафик, доступ к ним из вне ненужен!), а пользователей из таблицы 2 на шлюз 2. То есть нужна балансировка с контролем скорости, скорость режу норм, а вот балансировку пытаюсь выполнить. Еще пользователи подключаются по pppoe, соответственно пакеты от сетевок ng надо балансировать.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-18 9:36:28
admin_sv
для Такой задачи не достаточно такого набора?
ipfw add 1 setfib 0 all from table(1) to any
ipfw add 2 setfib 1 all from table(2) to any
ipfw add allow all from any to any

setfib -0 route add default 127.0.0.1
setfib -1 route add default 127.0.0.2
nat настроен отдельно, и честно говоря правило для 2 таблицы не обязательно, эти ip сами на default rout пойдут.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-18 13:26:04
harmless
admin_sv писал(а):для Такой задачи не достаточно такого набора?
ipfw add 1 setfib 0 all from table(1) to any
ipfw add 2 setfib 1 all from table(2) to any
ipfw add allow all from any to any

setfib -0 route add default 127.0.0.1
setfib -1 route add default 127.0.0.2
nat настроен отдельно, и честно говоря правило для 2 таблицы не обязательно, эти ip сами на default rout пойдут.
Я так делаю чтоб в таблицы не писать ипы с 0 тегом, вот и все

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-18 14:17:42
admin_sv
Писать в таблицы необходимость в моем случае. Вопрос прежний такова набора достаточно?
ipfw add 1 setfib 0 all from table(1) to any
ipfw add 2 setfib 1 all from table(2) to any
ipfw add allow all from any to any

setfib -0 route add default 127.0.0.1
setfib -1 route add default 127.0.0.2
правила с fwd будут не нужны?

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-18 14:20:44
harmless
admin_sv писал(а):Писать в таблицы необходимость в моем случае. Вопрос прежний такова набора достаточно?
ipfw add 1 setfib 0 all from table(1) to any
ipfw add 2 setfib 1 all from table(2) to any
ipfw add allow all from any to any

setfib -0 route add default 127.0.0.1
setfib -1 route add default 127.0.0.2
правила с fwd будут не нужны?
Нужны для того чтобы если попадут в системе не в ту таблицу(страховка)

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-28 14:51:35
admin_sv
Не помогло (

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

18503  880085727  310427995115 pipe tablearg ip from table(21) to any
31997      21714       4225455 setfib 1 ip from table(2) to any
31999   20034677    5428352183 allow ip from table(21) to any

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

 setfib 1 netstat -nr | grep default
default            1.0.0.0            UGS         0    24666   tun
Пользователь ходит через основной шлюз, а не должен.

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

uname -a
FreeBSD 9.2-STABLE FreeBSD 9.2-STABLE

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-28 17:04:16
harmless
harmless писал(а):
admin_sv писал(а):Задача стоит следующая: есть роутер у него 2 in (они равнозначны по качеству и скорости), за роутером сеть около 40 точек. Доступ к интернету контролирует pipe, то есть режется только скорость. Стоит потребность в том чтобы часть из 40 точек отправить на другой канал(все пакеты должны идти только через него!!!).
тю, так бы и писали
короткий вариант

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

    #!/bin/sh

    #############################################
    #**** FireWall - конфигурационный файл *****#
    #############################################
    # бинарник ipfw
    FwCMD="/sbin/ipfw -q "
    # шаблон таблицы
    FwTable="${FwCMD} table "
    # Шаблон трубы
    FwPipe="${FwCMD} pipe "

    #*******************************************#
    #**** ISP1 ****#
    #*******************************************#
    # Локальная сеть
    NetOut_ISP1="1.1.1.0/24"
    # IP сервера в сети ISP1
    IpOut_ISP1="1.1.1.2"
    # Интерфейс, смотрящий в сеть ISP1
    LanOut_ISP1="vr0"

    GW_ISP1="1.1.1.2"

    /usr/sbin/setfib -0 route add default ${GW_ISP1}
    /usr/sbin/setfib -1 route add default ${GW_ISP1}

    #*******************************************#
    # Разбросаем всех клиентов по разным таблицам маршрутизации 0 - 2
    ${FwTable} 1 add 10.0.0.2/32 1
    ${FwTable} 1 add 10.0.0.3/32 2
    ${FwTable} 1 add 10.0.0.4/32 2
    ${FwTable} 1 add 10.0.0.5/32 1
    ${FwTable} 1 add 10.0.0.6/32 2
    ${FwTable} 1 add 10.0.0.7/32 1
    ${FwTable} 1 add 10.0.0.8/32 2
    ${FwTable} 1 add 10.0.0.9/32 1
    ${FwTable} 1 add 10.0.0.10/32 1
    ${FwTable} 1 add 10.0.0.11/32 2
    ${FwTable} 1 add 10.0.0.12/32 1
    ${FwTable} 1 add 10.0.0.13/32 2
    ${FwTable} 1 add 10.0.0.14/32 0
    ${FwTable} 1 add 10.0.0.15/32 0

    #*******************************************#
    #**** Все что качается ISP2 ****#
    #*******************************************#
    # Локальная сеть ISP2
    NetOut_ISP2="2.2.2.0/24"
    # IP сервера в сети ISP2
    IpOut_ISP2="2.2.2.2"
    # Интерфейс, смотрящий в сеть ISP2
    LanOut_ISP2="re0"

    GW_ISP2="2.2.2.1"

    /usr/sbin/setfib -2 route add default ${GW_ISP2}

    #############################################

    #*******************************************#
    #* Все что качается локальной сети *#
    #*******************************************#
    # Локальная сеть
    NetIn="10.0.0.0/24"
    # IP сервера в локальной сети
    IpIn="10.0.0.1"
    # Интерфейс, смотрящий в локальную сеть
    LanIn="em0"

    #############################################

    #*******************************************#
    #***************** СЕРВИСЫ *****************#
    #*******************************************#

    #* DNS *#

    TCP="domain"
    UDP="domain"

    #############################################


    #############################################
    ${FwCMD} disable one_pass
    #############################################

    ################# CLEAN ALL #################

    ${FwCMD} -f flush
    ${FwCMD} -f pipe flush
    ${FwCMD} -f queue flush
    ${FwCMD} -f sched flush

    ${FwCMD} nat 4 config  if ${LanOut_ISP1} unreg_only same_ports reset log
    ${FwCMD} nat 5 config  if ${LanOut_ISP2} unreg_only same_ports reset log

    #*******************************************#
       # LoopBack lo0
    ${FwCMD} add skipto 15000 in via lo0
    ${FwCMD} add skipto 20000 out via lo0

    # ISP1 LanOut_ISP1
    ${FwCMD} add skipto 25000 in via ${LanOut_ISP1}
    ${FwCMD} add skipto 30000 out via ${LanOut_ISP1}

    # ISP2 LanOut_ISP2
    ${FwCMD} add skipto 35000 in via ${LanOut_ISP2}
    ${FwCMD} add skipto 40000 out via ${LanOut_ISP2}

    # Lan
    ${FwCMD} add skipto 45000 in via ${LanIn}
    ${FwCMD} add skipto 50000 out via ${LanIn}

    # Deny statement for any other packets
    ${FwCMD} add skipto 65534 via any

    #############################
    # LoopBack lo0
    # IN pass
    ${FwCMD} add 15000 count in via lo0
    ${FwCMD} add permit in via lo0

    # Out pass
    ${FwCMD} add 20000 count out via lo0
    ${FwCMD} add permit out via lo0

    # ISP1 LanOut_ISP1
    # IN pass
    ${FwCMD} add 25000 count in via ${LanOut_ISP1}
    ${FwCMD} add skipto 65534 not dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1}
    ${FwCMD} add nat 4 dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1}
    ${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1} established
    ${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP1} dst-port ${TCP} in via ${LanOut_ISP1} setup keep-state
    ${FwCMD} add permit udp from any to any dst-ip ${IpOut_ISP1} dst-port ${UDP} in via ${LanOut_ISP1} keep-state
    ${FwCMD} add permit log tcp from any to any dst-ip ${IpOut_ISP1} dst-port 22 in via ${LanOut_ISP1} setup keep-state
    ${FwCMD} add permit dst-ip table\(100\) in via ${LanOut_ISP1}
    ${FwCMD} add permit icmp from any to any dst-ip ${IpOut_ISP1} in via ${LanOut_ISP1} keep-state
    ${FwCMD} add skipto 65534 in via ${LanOut_ISP1}

    # OUT pass
    ${FwCMD} add 30000 count out via ${LanOut_ISP1}
    ${FwCMD} add nat global src-ip table\(100\) out via ${LanOut_ISP1}
    ${FwCMD} add skipto 34000 src-ip ${IpOut_ISP1} out via ${LanOut_ISP1}
    ${FwCMD} add fwd ${GW_ISP2} src-ip ${IpOut_ISP2}
    ${FwCMD} add nat 4 src-ip table\(100\) out via ${LanOut_ISP1}
    ${FwCMD} add 34000 permit src-ip ${IpOut_ISP1} out via ${LanOut_ISP1} keep-state
    ${FwCMD} add skipto 65534 out via ${LanOut_ISP1}

    # ISP2 LanOut_ISP2
    # IN pass
    ${FwCMD} add 35000 count in via ${LanOut_ISP2}
    ${FwCMD} add skipto 65534 not dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2}
    ${FwCMD} add nat 5 dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2}
    ${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2} established
    ${FwCMD} add permit tcp from any to any dst-ip ${IpOut_ISP2} dst-port ${TCP} in via ${LanOut_ISP2} setup keep-state
    ${FwCMD} add permit udp from any to any dst-ip ${IpOut_ISP2} dst-port ${UDP} in via ${LanOut_ISP2} keep-state
    ${FwCMD} add permit log tcp from any to any dst-ip ${IpOut_ISP2} dst-port 22 in via ${LanOut_ISP2} setup keep-state
    ${FwCMD} add permit dst-ip table\(100\) in via ${LanOut_ISP2}
    ${FwCMD} add permit icmp from any to any dst-ip ${IpOut_ISP2} in via ${LanOut_ISP2} keep-state
    ${FwCMD} add skipto 65534 in via ${LanOut_ISP2}

    # OUT pass
    ${FwCMD} add 40000 count out via ${LanOut_ISP2}
    ${FwCMD} add nat global src-ip table\(100\) out via ${LanOut_ISP2}
    ${FwCMD} add skipto 44000 src-ip ${IpOut_ISP2} out via ${LanOut_ISP2}
    ${FwCMD} add fwd ${GW_ISP1} src-ip ${IpOut_ISP1}
    ${FwCMD} add nat 5 src-ip table\(100\) out via ${LanOut_ISP2}
    ${FwCMD} add 44000 permit src-ip ${IpOut_ISP2} out via ${LanOut_ISP2} keep-state
    ${FwCMD} add skipto 65534 out via ${LanOut_ISP2}

    # Lan
    # IN pass
    ${FwCMD} add 45000 count in via ${LanIn}
    ${FwCMD} add setfib tablearg src-ip table\(1\) in via ${LanIn}
    ${FwCMD} add permit in via ${LanIn}

    # OUT pass
    ${FwCMD} add 50000 count out via ${LanIn}
    ${FwCMD} add permit out via ${LanIn}

    ${FwCMD} add 65534 deny via any
Вот рабочий вариант, от него и отталкивайтесь!(У меня данный конфиг в продакшене и все пучком)

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-28 23:12:15
admin_sv
Проблема не может быть вызвана pppoe интерфейсов? За готовое решение спасибо но я понять проблему хочу, поможете буду признателен.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-03-29 0:42:46
harmless
admin_sv писал(а):Проблема не может быть вызвана pppoe интерфейсов? За готовое решение спасибо но я понять проблему хочу, поможете буду признателен.
Как раз у меня один пров по кабелю а второй по pppoe)
Все работает!
Опишите подробнее свои правила и что нужно - попробую помочь.

Re: ipfw fwd & pipe связать вместе.

Добавлено: 2014-04-02 12:55:11
admin_sv
Давайте еще разок.
Задача такова: есть 2 канала 1 из которых PPPOE туннель. Существует возможность распределения пользователей по 2 таблицам, скажем 1 таблица - первый канал, 2 таблица второй канал. первый канал defoult route, правило для него я игнорирую. а вот пользователей из 2 таблицы надо завернуть на 2 канал.
создаю правило :
18503 880085727 310427995115 pipe tablearg ip from table(21) to any
31997 21714 4225455 setfib 1 ip from table(2) to any
31999 20034677 5428352183 allow ip from table(21) to any
Как видно пакеты идут по правилам, но при этом пользователи идут через шлюз по умолчанию.
Таблица 21 содержит список пользователей доступ в интернет которым разрешено.
вот конфиг 1 setfib :
setfib 1 netstat -nr | grep default
default 1.0.0.0 UGS 0 24666 tun