ytil Posted July 5, 2018 Добрый день. Имеется маршрутизатор с FreeBSD на борту. Ядро собрано с поддержкой множественных таблиц маршрутизации. Задача состоит в том, чтобы одновременно работало 3 разных канала, для разных пулов адресов свои вот конфиг pf пояснения. с пула <ch1> мы натируем соединение к первому провайдеру и всё работает в первой таблице маршрутизации с пула <ch2> всё идет на шлюз по умолчанию 192.168.0.4 (от другого провайдера) и тоже все работает c пула <ch3> тоже всё идет на шлюз по умолчанию 10.100.201.1 (этот шлюз назначен на другом маршрутизаторе ежели 192.168.0.4). Но почему-то исходящий траффик идет через <ch2>, а входящий как надо. Поясните, что же тут не так, и как мне заставить всё это работать) /etc/pf.rules isp1_if = "em0" isp2_if = "bce0" isp3_if = "bce1" int_if = "em1" table <ch1> {172.16.14.0/24} table <ch2> {172.16.15.0/24} table <ch3> {172.16.16.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 <ch1> to any -> 1.1.1.1 pass all pass in from <ch1> to any rtable 0 pass in from <ch2> to any rtable 1 pass in from <ch3> to any rtable 2 netstat -rn | grep default default 1.1.1.1 UGS em0 setfib 1 netstat -rn | grep default default 192.168.0.4 UGS bce0 setfib 2 netstat -rn | grep default default 10.201.1.1 UGS bce1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted July 5, 2018 Я с таблицами не работал но: set skip on $int_if похоже лишнее. nat on $isp1_if from <ch1> to any -> 1.1.1.1 Натить ты должен в адрес на локальном интерфейсе. У тебя должно быть три правила для нат. И вообще, раз у тебя ничего не пересекается то вроде и таблицы машрутизации не нужны: на выход ты гонишь правилами, на вход у тебя таблица нат+маршрутизации. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ytil Posted July 5, 2018 (edited) 33 минуты назад, Ivan_83 сказал: Я с таблицами не работал но: set skip on $int_if похоже лишнее. nat on $isp1_if from <ch1> to any -> 1.1.1.1 Натить ты должен в адрес на локальном интерфейсе. У тебя должно быть три правила для нат. И вообще, раз у тебя ничего не пересекается то вроде и таблицы машрутизации не нужны: на выход ты гонишь правилами, на вход у тебя таблица нат+маршрутизации. да, бред немного написал, натирую я на локальный интерфейс. т.е. на 1.1.1.2, а шлюз у меня 1.1.1.1. Очепятка почему у меня должно быть 3 правила для ната? 2 других канала у меня натируются на других маршрутизаторах, а на этом я просто указываю к ним default route. Я просто не знаю, как без таблиц маршрутизации загонять трафик с какого-то пула, на нужный шлюз по умолчанию. Не знаю считается это, что каналы пересекаются или нет но маршрутизаторы для второго и третьего канала в одной ospf зоне и вставлены в один свитч. 1 канал мне приходит от Провадера Х, а 2 других канала принадлежат мне. Edited July 5, 2018 by ytil Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted July 5, 2018 Да, не внимательно читал, один нат. Тогда там есть rdr и может route-to, нужно документацию читать, я бы через них как то указывал. (параллельно вместо ещё двух натов) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...