Мдя..Чё людям спокойно не живётся. Попал ты однако.
Итак, что мы знаем, что входящий пакет от твоих клиентов (клиентских VLAN) будет отправлен через default gateway.
Но, задача отправлять всегда в VLAN прова (для каждого клиентского VLAN свой VLAN прова), а это значит что придётся использовать ipfw fwd.
1. Принимаем пакеты из всех клиентских VLAN'ов.
2. Нужно применять NATD (или аналоги) для каждого клиентского VLAN'а. (у каждого VLAN NATD будет свой) Т.е. натим.
3. Затем отправлять через нужный провайдерский VLAN'у. (ipfw fwd)
4. При приёме из провайдерского VLAN'а, пакет обязательно должен попадать в NATD из п.2
5. Принимаем этот пакет.
6. Отправляем клиенту.
Образно примерно так.
Код: Выделить всё
Подробнее отправка через нужные VLAN провайдера:
1. allow ip from КЛИЕНТСКИЕ_VLAN'ы to ИНТЕРНЕТ in
2.
divert natd1(vlan1) from IP-Адреса_VLAN1 to интернет
divert natd2(vlan2) from IP-Адреса_VLAN2 to интернет
divert natd2(vlan2) from IP-Адреса_VLAN3 to интернет
...
3.
ipfw fwd ШЛЮЗ_vlan1(прова) from IP_natd1 to any
ipfw fwd ШЛЮЗ_vlan2(прова) from IP_natd2 to any
ipfw fwd ШЛЮЗ_vlan3(прова) from IP_natd3 to any
Подробнее приём:
4.
divert natd1(vlan1) from интернет to IP-Адрес_VLAN1
divert natd2(vlan2) from интернет to IP-Адрес_VLAN2
divert natd3(vlan3) from интернет to IP-Адрес_VLAN3
5. allow from Интернет to СПИСОК_IP_ВСЕХ_VLAN'ов in
6. allow from Интернет to СПИСОК_IP_ВСЕХ_VLAN'ов out
Лучше интерфейсы использовать конечно.
к примеру (я не помню как маркируются vlan интерфейсы, пусть будет ng0,ng1,ng2 и т.д.):
1. allow ip from КЛИЕНТСКИЕ_VLAN'ы(IP-Адреса) to ИНТЕРНЕТ in via ng*
тут пакет будет принят к отправке через default gateway, таким образом у него будет метка
recv ng0(1,2,3 - Это метко о интерфейсе, через который вошёл пакет. В зависимости от того VLAN, по которому вошёл пакет, метка будет разная)
2. NATD можно использовать в зависимости от того интерфейса, по котором пакет вошёл.
divert natd1(vlan1) from IP-Адреса_VLAN1 to интернет out
recv ng0
ipfw fwd ШЛЮЗ_vlan1(прова) from IP_natd1 to any out
recv ng0
Что нибудь типа этого нужно использовать, так проще потом понять откуда ноги растут.
P.S. Нагрузка на NATD очень большая может быть, там смотри сам, переходить на ipnat или pf.