ytil Posted July 30, 2018 Posted July 30, 2018 (edited) Провайдер дает 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
gruber Posted July 30, 2018 Posted July 30, 2018 Два NAT-а, один с 1.1.1.2 а второй c 1.1.1.3 и соответствующие правила в ipfw / pf ? Вставить ник Quote
ytil Posted July 30, 2018 Author Posted July 30, 2018 7 минут назад, gruber сказал: Два NAT-а, один с 1.1.1.2 а второй c 1.1.1.3 и соответствующие правила в ipfw / pf ? так у меня не заработало, NATил через pf, и работало только через em1 Вставить ник Quote
Ivan_83 Posted July 30, 2018 Posted July 30, 2018 Для начала надо самому себе честно ответить на вопрос: как должны ходить пакеты? Если тебе нужна балансировка какая то - это сложнее, если просто типа разные отделы/конторы пустить с разных IP - настраивай правилами фаера. FIB - таблицы маршрутизации, они для случаев когда у тебя раздельные л2. Вставить ник Quote
alibek Posted July 30, 2018 Posted July 30, 2018 8 минут назад, Ivan_83 сказал: они для случаев когда у тебя раздельные л2 У ТС ведь они разные, у него два разных интерфейса. Вставить ник Quote
ytil Posted July 30, 2018 Author Posted July 30, 2018 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
alibek Posted July 30, 2018 Posted July 30, 2018 Наверное потому что это альяс. Да и int_if я бы в скобки обернул. Кроме того, defaultrouter скорее всего навешивается на какой-то один интерфейс. Его нужно задать для обоих интерфейсов. Вставить ник Quote
ytil Posted July 30, 2018 Author Posted July 30, 2018 (edited) 2 минуты назад, alibek сказал: Наверное потому что это альяс. Кроме того, defaultrouter скорее всего навешивается на какой-то один интерфейс. Его нужно задать для обоих интерфейсов. defaultroute висит на em1 сейчас Прошу, скажите, как defaultroute навесить одновременно на 2 интерфейса? ядро собрано с поддержкой radix_mpath Edited July 30, 2018 by ytil Вставить ник Quote
alibek Posted July 30, 2018 Posted July 30, 2018 Я уже 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
ytil Posted July 30, 2018 Author Posted July 30, 2018 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
ytil Posted July 30, 2018 Author Posted July 30, 2018 4 минуты назад, alibek сказал: А netstat -nr что показывает? ничего не показывает, маршрута по умолчанию в нем нет. Похоже конструкция неправильная или же freebsd это не может.. Вставить ник Quote
vlad11 Posted July 30, 2018 Posted July 30, 2018 1 час назад, ytil сказал: # route add default 1.1.1.1 -interface em1 route add default 1.1.1.1 -iface em1 Вставить ник Quote
YuryD Posted July 30, 2018 Posted July 30, 2018 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
Ivan_83 Posted July 30, 2018 Posted July 30, 2018 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
YuryD Posted July 30, 2018 Posted July 30, 2018 16 минут назад, Ivan_83 сказал: Да, хорошо, он и так его отнатил в разные адреса. Но ТС почему то хочет слать его в разные интерфейсы, а после ната пакеты уходят согласно таблице маршрутизации. Ну для меня это как-то извращенно :) Ну и да, когда я баловался setfib, что-то мне говорило, что цпу нагружался довольно сильно, а когда одна подсеть на разных интерфейсах, это у меня в моих проектах не укладывается, хотя клиентов-извращенцев маршрутизации хватает. Пример извращения, клиент берет /29, и просит это смаршрузовать на один ip свой. Комп под виндой-сервером, с одним интерфейсом. Другие примеры - их куча, на вопрос нанапуркуя, ответ - а у нас каптива, типа сама разберется. Таких удодов у меня в клиентах полно. В основном - банчки и крупные предприниматели. Вставить ник Quote
AlKov Posted July 31, 2018 Posted July 31, 2018 Требуется жёстко именно так - 19 часов назад, ytil сказал: 1.1.1.2, а часть через 1.1.1.3 т.е. "2" и "3" и никак иначе? Это я к тому, что например мешает порезать /29 на две /30 и заюзать PBR? Вот это вроде как Ваш случай. Вставить ник Quote
ytil Posted July 31, 2018 Author Posted July 31, 2018 1 час назад, AlKov сказал: Требуется жёстко именно так - т.е. "2" и "3" и никак иначе? Это я к тому, что например мешает порезать /29 на две /30 и заюзать PBR? Вот это вроде как Ваш случай. провайдер может дать только /29 Вставить ник Quote
AlKov Posted July 31, 2018 Posted July 31, 2018 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
ytil Posted July 31, 2018 Author Posted July 31, 2018 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
AlKov Posted July 31, 2018 Posted July 31, 2018 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
ytil Posted July 31, 2018 Author Posted July 31, 2018 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
AlKov Posted July 31, 2018 Posted July 31, 2018 @ytil , в частностях не подскажу, т.к. подобное приходилось реализовывать всего один раз за всю практику, плюс к тому НЕ на FreeBSD, а на Linux. Я предложил Вам вариант решения с использованием PBR и показал пример. Вы ссылку посмотрели? Ваш вариант, или нет? Если "да", то и конфигурите на его основе. P.S. И ещё раз - шлюз по-умолчанию будет всегда один и используется он только тогда, когда в таблице маршрутизации НЕТ конкретного правила. В данном случае эти правила для подсетей 192.168.ххх будут там. Всё остальное, не указанное в правилах PBR, пойдёт по default route. Вставить ник Quote
Ivan_83 Posted July 31, 2018 Posted July 31, 2018 2 часа назад, ytil сказал: но такая конструкция подразумевает 2 разных шлюза, чтобы через разные интерфейсы выпускать. В чем я ошибаюсь? А если написать один - ругается? Вставить ник Quote
st_re Posted July 31, 2018 Posted July 31, 2018 Самый, наверное, простой вариант две 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
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.