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

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-04 15:29:08

Нужна помощь в такой проблеме: " не могу изменить 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.
Последний раз редактировалось f_andrey 2014-03-04 15:35:28, всего редактировалось 1 раз.
Причина: Автору. пожалуйста, выбирайте соответствующий раздел форума.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-04 20:06:43

Тема закрыта, решение найдено.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35182
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2014-03-04 21:27:11

admin_sv писал(а):Тема закрыта, решение найдено.
вообще, принято решениями делится =)
Убей их всех! Бог потом рассортирует...

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-13 9:36:44


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

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-13 14:55:07

А кто мешает в правило форвардинга засунуть доп проверку наличия в обоих таблицах
было

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

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

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-13 15:39:14

Еще красивее решение

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

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

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-13 15:46:21

Только нат поставить в нужное место

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-15 16:09:26

Извините но вы дочитать пробивали то что я написал? Как только пакет до трубы доходит, он не проверяется на последующие правила. Тоже касаемо и форвардинга. Если заставить дальше идти по списку правил, то форвардинг все равно не срабатывает. Так как устроен так, ну или я чего не понимаю. По сути то что вы пишите я делал счетчик на правиле растет, но пакеты все идут через default route.

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-15 16:11:57

и задача отправить не две таблицы через другой хоп, а только часть.

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-15 16:13:43

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

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-15 16:41:34

Если заставить дальше идти по списку правил, то форвардинг все равно не срабатывает.
И я несовсем понимаю роль этих правил:

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

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

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-15 17:38:00

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 свои подставьте

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-16 20:49:56

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

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-16 21:13:33

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

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-16 23:43:37

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

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-18 9:09:42

Есть пару вопросов по написанному конфигу:
  • 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 надо балансировать.

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-18 9:36:28

для Такой задачи не достаточно такого набора?
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 пойдут.

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-18 13:26:04

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 тегом, вот и все

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-18 14:17:42

Писать в таблицы необходимость в моем случае. Вопрос прежний такова набора достаточно?
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 будут не нужны?

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-18 14:20:44

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 будут не нужны?
Нужны для того чтобы если попадут в системе не в ту таблицу(страховка)

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-28 14:51:35

Не помогло (

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

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

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-28 17:04:16

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
Вот рабочий вариант, от него и отталкивайтесь!(У меня данный конфиг в продакшене и все пучком)

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-03-28 23:12:15

Проблема не может быть вызвана pppoe интерфейсов? За готовое решение спасибо но я понять проблему хочу, поможете буду признателен.

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2014-03-29 0:42:46

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

admin_sv
мл. сержант
Сообщения: 94
Зарегистрирован: 2014-01-03 2:45:53
Контактная информация:

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

Непрочитанное сообщение admin_sv » 2014-04-02 12:55:11

Давайте еще разок.
Задача такова: есть 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