ytil Posted July 30, 2018 (edited) · Report post Провайдер дает 1.1.1.0/29 подсеть. В маршрутизатор от свитча провайдера идет 2 патчкорда, в em1 и em2. Задача часть локальных адресов выпускать в мир через 1.1.1.2, а часть через 1.1.1.3. Возможности организовать ЛАГ нет. Пробовал через setfib делать, но во второй таблице маршрутизации висит маршрут к default route, только через em1, и удалить его не получается. Подскажите как тут быть? Edited July 30, 2018 by ytil Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
gruber Posted July 30, 2018 · Report post Два NAT-а, один с 1.1.1.2 а второй c 1.1.1.3 и соответствующие правила в ipfw / pf ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 30, 2018 · Report post 7 минут назад, gruber сказал: Два NAT-а, один с 1.1.1.2 а второй c 1.1.1.3 и соответствующие правила в ipfw / pf ? так у меня не заработало, NATил через pf, и работало только через em1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted July 30, 2018 · Report post Для начала надо самому себе честно ответить на вопрос: как должны ходить пакеты? Если тебе нужна балансировка какая то - это сложнее, если просто типа разные отделы/конторы пустить с разных IP - настраивай правилами фаера. FIB - таблицы маршрутизации, они для случаев когда у тебя раздельные л2. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 30, 2018 · Report post 8 минут назад, Ivan_83 сказал: они для случаев когда у тебя раздельные л2 У ТС ведь они разные, у него два разных интерфейса. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 30, 2018 · Report post 12 минут назад, Ivan_83 сказал: Для начала надо самому себе честно ответить на вопрос: как должны ходить пакеты? Если тебе нужна балансировка какая то - это сложнее, если просто типа разные отделы/конторы пустить с разных IP - настраивай правилами фаера. FIB - таблицы маршрутизации, они для случаев когда у тебя раздельные л2. да, мне нужно чтобы просто отделы с нужных айпишников ходили, но проблема в том, что на втором интерфейсе у меня не НАТятся адреса почему-то это PF на маршрутизаторе isp1_if = "em1" isp2_if = "em2" int_if = "em3" table <lan1> {192.168.66.0/24} table <lan2> {192.168.67.0/24} set limit { states 10000000, frags 15000 } set skip on lo0 set skip on $int_if scrub in all fragment reassemble nat on $isp1_if from <lan1> to any -> ($isp1_if) nat on $isp2_if from <lan2> to any -> ($isp2_if) rc.conf hostname="bsd1" ifconfig_em1="inet 1.1.1.2/29" ifconfig_em2="inet 1.1.1.3/29" ifconfig_em3="inet 192.168.66.1/24" ifconfig_em3_alias0="inet 192.168.67.1/24" defaultrouter="1.1.1.1" gateway_enable="YES" что тут не так? почему не НАТится сеть 192.168.67.0/24? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 30, 2018 · Report post Наверное потому что это альяс. Да и int_if я бы в скобки обернул. Кроме того, defaultrouter скорее всего навешивается на какой-то один интерфейс. Его нужно задать для обоих интерфейсов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 30, 2018 (edited) · Report post 2 минуты назад, alibek сказал: Наверное потому что это альяс. Кроме того, defaultrouter скорее всего навешивается на какой-то один интерфейс. Его нужно задать для обоих интерфейсов. defaultroute висит на em1 сейчас Прошу, скажите, как defaultroute навесить одновременно на 2 интерфейса? ядро собрано с поддержкой radix_mpath Edited July 30, 2018 by ytil Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 30, 2018 · Report post Я уже FreeBSD не использую, но как-то так: static_routes="r1 r2" route_r1="default 10.1.1.1 -interface em1" route_r2="default 10.1.1.1 -interface em2" Или просто в rc.local добавить команды route add. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 30, 2018 · Report post 6 минут назад, alibek сказал: Я уже FreeBSD не использую, но как-то так: static_routes="r1 r2" route_r1="default 10.1.1.1 -interface em1" route_r2="default 10.1.1.1 -interface em2" Или просто в rc.local добавить команды route add. к сожалению не работает через rc.conf не назначаются маршруты через # route add default 1.1.1.1 -interface em1 # route: bad address: em1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 30, 2018 · Report post А netstat -nr что показывает? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 30, 2018 · Report post 4 минуты назад, alibek сказал: А netstat -nr что показывает? ничего не показывает, маршрута по умолчанию в нем нет. Похоже конструкция неправильная или же freebsd это не может.. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vlad11 Posted July 30, 2018 · Report post 1 час назад, ytil сказал: # route add default 1.1.1.1 -interface em1 route add default 1.1.1.1 -iface em1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted July 30, 2018 · Report post setfib вроде и не нужен, должно хватить двух ipfw nat с разными правилами ipfw. Трафик одной сети будет натиться в 1 ип, трафик второй в другой. остальные правила skip to чтобы чужой трафик не попадал в чужой нат. Хотя вешать Ip из одной подсети на разные интерфейсы - плохая идея. Я бы принял /29 от провайдера на 1 интерфейс 1.1.1.2/29, и повесил, уж если надо для ipfw nat алиасом бы добавил 1.1.1.3/32. В результате - ipfw nat можно вешать и на 1.1.1.2 и на 1.1.1.3. Правила скипту - по источникам, что, что должно идти на 10.1.1.2 скипается на правило nat1, и наоборот, в общем тривиально. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted July 30, 2018 · Report post 2 часа назад, ytil сказал: это PF на маршрутизаторе 2 часа назад, ytil сказал: что тут не так? почему не НАТится сеть 192.168.67.0/24? Тебе нужно прописать reply-to / route-to дополнительно к натам, вместо того чтобы корячится с маршрутами. Или rdr-to. 2 часа назад, ytil сказал: nat on $isp1_if from <lan1> to any -> ($isp1_if) nat on $isp2_if from <lan2> to any -> ($isp2_if) Вот эти два правила на самом деле не в интерфейс пихают, они берут IP адрес с интерфейса и заменяют срц в пакте на него, а дальше пакет уходит по таблице маршрутизации. Вот чтобы это переопределить нужно ещё как минимум одно правило накорябать. Либо тебе нужно два фиба и навешивать их в правилах pass ещё до ната, ну и дальше у тебя будет две таблицы маршрутизации и никаких проблем с двумя дефолтами. А тебе точно нужно через разные интерфейсы отправлять? потому что можно и с одного интерфейса всё отправлять но с разных срц адресов. 2 часа назад, alibek сказал: Да и int_if я бы в скобки обернул. Вредный совет для статических то адресов. Скобочки означают перечитывать адрес с интерфейса каждый раз когда правило обрабатывает пакет, паразитная нагрузка на ровном месте. На не операторском трафике и х86 конечно не заметно будет. 2 часа назад, alibek сказал: Кроме того, defaultrouter скорее всего навешивается на какой-то один интерфейс. Он в принципе всегда ОДИН. Как вы это не поймёте уже. Есть таблица маршрутизации, там всё вида: дст - нехт хоп 1.1.1.1/32 2.2.2.2 Когда по ней делается лукап(поиск) то ищется запись с наибольшим префиксом, те 32- рулит, потом 31 и когда совсем никуя нет то 0 = 0.0.0.0/32. Их две быть не может. Вернее конечно же может быть и 100500 но находить всегда будет только одну такую запись. 2 часа назад, ytil сказал: Прошу, скажите, как defaultroute навесить одновременно на 2 интерфейса? ядро собрано с поддержкой radix_mpath Никак. Одна таблица маршрутизации - один дефолт. Радикс мне кажется немного про другое. 1 час назад, YuryD сказал: Трафик одной сети будет натиться в 1 ип, трафик второй в другой. остальные правила skip чтобы чужой трафик не попадал в чужой нат. Да, хорошо, он и так его отнатил в разные адреса. Но ТС почему то хочет слать его в разные интерфейсы, а после ната пакеты уходят согласно таблице маршрутизации. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted July 30, 2018 · Report post 16 минут назад, Ivan_83 сказал: Да, хорошо, он и так его отнатил в разные адреса. Но ТС почему то хочет слать его в разные интерфейсы, а после ната пакеты уходят согласно таблице маршрутизации. Ну для меня это как-то извращенно :) Ну и да, когда я баловался setfib, что-то мне говорило, что цпу нагружался довольно сильно, а когда одна подсеть на разных интерфейсах, это у меня в моих проектах не укладывается, хотя клиентов-извращенцев маршрутизации хватает. Пример извращения, клиент берет /29, и просит это смаршрузовать на один ip свой. Комп под виндой-сервером, с одним интерфейсом. Другие примеры - их куча, на вопрос нанапуркуя, ответ - а у нас каптива, типа сама разберется. Таких удодов у меня в клиентах полно. В основном - банчки и крупные предприниматели. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
AlKov Posted July 31, 2018 · Report post Требуется жёстко именно так - 19 часов назад, ytil сказал: 1.1.1.2, а часть через 1.1.1.3 т.е. "2" и "3" и никак иначе? Это я к тому, что например мешает порезать /29 на две /30 и заюзать PBR? Вот это вроде как Ваш случай. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 31, 2018 · Report post 1 час назад, AlKov сказал: Требуется жёстко именно так - т.е. "2" и "3" и никак иначе? Это я к тому, что например мешает порезать /29 на две /30 и заюзать PBR? Вот это вроде как Ваш случай. провайдер может дать только /29 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
AlKov Posted July 31, 2018 · Report post 18 минут назад, ytil сказал: провайдер может дать только /29 Гм.. И? Что не так? Или Вы не в курсе, что ДВЕ /30 "вписываются" в ОДНУ /29 ? Т.о. для провайдера это может быть ОДНА /29, а для Вас - ДВЕ /30 10.10.1.0/29: Address: 10.10.1.0 00001010.00001010.00000001.00000 000 Netmask: 255.255.255.248 = 29 11111111.11111111.11111111.11111 000 Wildcard: 0.0.0.7 00000000.00000000.00000000.00000 111 => Network: 10.10.1.0/29 00001010.00001010.00000001.00000 000 HostMin: 10.10.1.1 00001010.00001010.00000001.00000 001 HostMax: 10.10.1.6 00001010.00001010.00000001.00000 110 Broadcast: 10.10.1.7 00001010.00001010.00000001.00000 111 Hosts/Net: 6 Class A, Private Internet 10.10.1.0/30: Address: 10.10.1.0 00001010.00001010.00000001.000000 00 Netmask: 255.255.255.252 = 30 11111111.11111111.11111111.111111 00 Wildcard: 0.0.0.3 00000000.00000000.00000000.000000 11 => Network: 10.10.1.0/30 00001010.00001010.00000001.000000 00 HostMin: 10.10.1.1 00001010.00001010.00000001.000000 01 HostMax: 10.10.1.2 00001010.00001010.00000001.000000 10 Broadcast: 10.10.1.3 00001010.00001010.00000001.000000 11 Hosts/Net: 2 Class A, Private Internet 10.10.1.4/30: Address: 10.10.1.4 00001010.00001010.00000001.000001 00 Netmask: 255.255.255.252 = 30 11111111.11111111.11111111.111111 00 Wildcard: 0.0.0.3 00000000.00000000.00000000.000000 11 => Network: 10.10.1.4/30 00001010.00001010.00000001.000001 00 HostMin: 10.10.1.5 00001010.00001010.00000001.000001 01 HostMax: 10.10.1.6 00001010.00001010.00000001.000001 10 Broadcast: 10.10.1.7 00001010.00001010.00000001.000001 11 Hosts/Net: 2 Class A, Private Internet Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 31, 2018 · Report post 3 минуты назад, AlKov сказал: Гм.. И? Что не так? Или Вы не в курсе, что ДВЕ /30 "вписываются" в ОДНУ /29 ? Т.о. для провайдера это может быть ОДНА /29, а для Вас - ДВЕ /30 10.10.1.0/29: Address: 10.10.1.0 00001010.00001010.00000001.00000 000 Netmask: 255.255.255.248 = 29 11111111.11111111.11111111.11111 000 Wildcard: 0.0.0.7 00000000.00000000.00000000.00000 111 => Network: 10.10.1.0/29 00001010.00001010.00000001.00000 000 HostMin: 10.10.1.1 00001010.00001010.00000001.00000 001 HostMax: 10.10.1.6 00001010.00001010.00000001.00000 110 Broadcast: 10.10.1.7 00001010.00001010.00000001.00000 111 Hosts/Net: 6 Class A, Private Internet 10.10.1.0/30: Address: 10.10.1.0 00001010.00001010.00000001.000000 00 Netmask: 255.255.255.252 = 30 11111111.11111111.11111111.111111 00 Wildcard: 0.0.0.3 00000000.00000000.00000000.000000 11 => Network: 10.10.1.0/30 00001010.00001010.00000001.000000 00 HostMin: 10.10.1.1 00001010.00001010.00000001.000000 01 HostMax: 10.10.1.2 00001010.00001010.00000001.000000 10 Broadcast: 10.10.1.3 00001010.00001010.00000001.000000 11 Hosts/Net: 2 Class A, Private Internet 10.10.1.4/30: Address: 10.10.1.4 00001010.00001010.00000001.000001 00 Netmask: 255.255.255.252 = 30 11111111.11111111.11111111.111111 00 Wildcard: 0.0.0.3 00000000.00000000.00000000.000000 11 => Network: 10.10.1.4/30 00001010.00001010.00000001.000001 00 HostMin: 10.10.1.5 00001010.00001010.00000001.000001 01 HostMax: 10.10.1.6 00001010.00001010.00000001.000001 10 Broadcast: 10.10.1.7 00001010.00001010.00000001.000001 11 Hosts/Net: 2 Class A, Private Internet я понимаю, с моей стороны как настраивать, у меня то 1 шлюз будет по умолчанию, а нужно 2? я к тому, что правайдер не может дать 2 по /30, а может только одну /29 дать Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
AlKov Posted July 31, 2018 · Report post 1 час назад, ytil сказал: я понимаю, с моей стороны как настраивать, у меня то 1 шлюз будет по умолчанию, а нужно 2? я к тому, что правайдер не может дать 2 по /30, а может только одну /29 дать Да, шлюз будет один, как и положено. И актуален он будет только для маршрутизатора. Всё остальное будет разруливать PBR. P.S. Что вообще такое "шлюз по-умолчанию"? Это адрес/интерфейс, куда МАРШРУТИЗАТОР отправляет НЕИЗВЕСТНЫЕ ему "направления". Т.е. то, что в данном случае, неизвестно для PBR. А в PBR у Вас будет прописано, что ВСЮ подсеть 192.168.0.0/24 отправлять через 10.10.1.2, а 192.168.1.0/24 - через 10.10.1.5. Всё, что не попадает под эти правила, пойдёт в default route. Как-то так я представляю этот процесс.. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 31, 2018 · Report post 9 минут назад, AlKov сказал: Т.е. то, что в данном случае, неизвестно для PBR. А в PBR у Вас будет прописано, что ВСЮ подсеть 192.168.0.0/24 отправлять через 10.10.1.2, а 192.168.1.0/24 - через 10.10.1.5. вот послали мы 192.168.0.0/24 на 10.10.1.2, а дальше что происходит? траффик же согласно таблице все равно будет уходить через 1 интерфейс, я так понял вы имеете ввиду конструкцию вида pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 но такая конструкция подразумевает 2 разных шлюза, чтобы через разные интерфейсы выпускать. В чем я ошибаюсь? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
AlKov Posted July 31, 2018 · Report post @ytil , в частностях не подскажу, т.к. подобное приходилось реализовывать всего один раз за всю практику, плюс к тому НЕ на FreeBSD, а на Linux. Я предложил Вам вариант решения с использованием PBR и показал пример. Вы ссылку посмотрели? Ваш вариант, или нет? Если "да", то и конфигурите на его основе. P.S. И ещё раз - шлюз по-умолчанию будет всегда один и используется он только тогда, когда в таблице маршрутизации НЕТ конкретного правила. В данном случае эти правила для подсетей 192.168.ххх будут там. Всё остальное, не указанное в правилах PBR, пойдёт по default route. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted July 31, 2018 · Report post 2 часа назад, ytil сказал: но такая конструкция подразумевает 2 разных шлюза, чтобы через разные интерфейсы выпускать. В чем я ошибаюсь? А если написать один - ругается? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
st_re Posted July 31, 2018 · Report post Самый, наверное, простой вариант две fib. фаерволом входящий от клиента загонять в нужный фиб и ifconfig_em2="inet aaa/29 fib 2" и echo "net.add_addr_allfibs=0" >> /etc/sysctl.conf.local ifconfig_em0_alias0="тоже самое что там есть в дефолтноm фибе с добавлением fib2" и статик рутинг для второго фиба static_routes="def2" route_def2="default xxx.1 -fib 2" натить исходящий на каждом интерфейсе, там уже и так будет только то, что нужно Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...