Две сети, один влан или natd + ipfw

26 Дек
2011

Столкнулся, вот с проблемой. До недавнего времени, две компании находились в одном влане и одной сети. В нет их выпускали два шлюза с разными внешними ip. С ростом компаний, возникла необходимость разделить сети, но оставить маршрутизацию между онными. Да и давно хотелось, избавиться от стареньких дешевых роутеров. С маршрутами проблем не возникло, но встала задача, как их теперь выпустить наружу. Проблема в том, что внешние ip принадлежат разным договорим и трафик считается для разных компаний.

Из останков офисных машин был собран тестовый зверек, на борт которого была водружена (привычная лично мне) freebsd.
С предварительной настройкой, не возникло проблем:
ifconfig_sis0="inet 192.168.1.254 netmask 255.255.255.0"
ifconfig_rl0="inet 192.168.2.254 netmask 255.255.255.0"
ifconfig_xl0="inet 1.1.1.1 netmask 255.255.255.0"
ifconfig_xl0_alias0="inet 1.1.1.2 netmask 255.255.255.0"

gateway_enable="YES"
firewall_enable="YES"
natd_enable="YES"
natd_interface="1.1.1.1"

где, 1.1.1.1 и 1.1.1.2 внешние адреса данные местным itsp, а 192.168.1.254 и 192.168.2.254 адреса шлюзов моих офисных сетей.
И оба офиса резво забегали через один из внешних адресов(1.1.1.1). Что же, зверек с нагрузкой справился, но оставлять так, негоже. Все таки, разные тарифные планы.
Вот тут, возникает не очевидная с первого взгляда трудность. Как решать такую задачу, за что хвататься?
Первый день поисков был убит на чтение мануалов natd и поиска альтернатив ему. В итоге, ушел домой, подумывая о переходе на iptables. Однако, после здорового сна, пришло озарение. Изначально, ОС имеет один шлюз «по умолчанию», в который и отправляет все пакеты. Но, если включить в ядре FreeBSD опции IPFIREWALL, IP DIVERT, IPFIREWALL_FORWARD, это позволит использовать команду:
ipfw fwd <альтернативный шлюз>

которая перенаправит пакет в обход статических маршрутов в т.ч. шлюза по умолчанию.

Остается запустить второй нат с не стандартным портом:
natd -a 1.1.1.2 -p 8672


Теперь, нужно направить трафик из 192.168.2.0/24 в альтернативный нат
ipfw add 40 divert 8672 ip4 from 192.168.2.0/24 to any via 1.1.1.2


Далее, отправим шлюзу провайдера(1.1.1.254) продукты жизнидеятельности нашего второго ната:
ipfw add 50 fwd 1.1.1.254 ip from 1.1.1.2 to any


Главное, не забыть обратный divert:
ipfw add 45 divert 8672 ip4 from any to 1.1.1.2


Проверяем ipfw show. Да, пакеты пошли. Для надежности, проверил из разных офисов, 2ip.ru кажет разные адреса натов.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх