LINUX.ORG.RU
решено ФорумAdmin

FreeBSD маршрутизация и ipfw

 , ,


2

1

Доброго всем дня, прошу помощи у опытных в BSD системах. Есть 2 провайдера и локальная сеть. Задача, выпускать определенные локальные адреса с первого адреса первого провайдера, вторую часть со второго адреса первого провайдера и третью через второго провайдера.

Входные данные такие:

ISP1 IP: 1.1.1.5, 1.1.1.6 GW 1.1.1.1
ISP2 IP 2.2.2.2 GW 2.2.2.1
LOCAL 3.3.3.0/24

В rc.conf вношу:

# Первый провайдер
ifconfig_em0="inet 1.1.1.5 netmask 255.255.255.224 fib 0"
ifconfig_em0_alias0="inet 1.1.1.6 netmask 255.255.255.224 fib 0"

# Второй провайдер
ifconfig_em1="inet 2.2.2.2 netmask 255.255.255.224 fib 1"

# Локальная сеть
ifconfig_em2="inet 3.3.3.1 netmask 255.255.255.0"

# Задаем маршруты
static_routes="isp1 isp2"

route_isp1="-fib 0 default 1.1.1.1"
route_isp2="-fib 1 default 2.2.2.1"

В ipfw следующее:

#!/bin/sh -
fwcmd="/sbin/ipfw -q"

${fwcmd} -f flush

# Выпускаем всех кто в таблице через второго провайдера
${fwcmd} add setfib 1 all from 'table(0)' to any
${fwcmd} nat 1 config if em1
${fwcmd} add nat 1 all from 3.3.3.0/24 to any out via em1
${fwcmd} add nat 1 all from any to 2.2.2.2 in via em1

# Выпускаем всех через 1й адрес первого провайдера.
${fwcmd} add setfib 0 all from any to any
${fwcmd} nat 2 config if em0
${fwcmd} add nat 2 all from 3.3.3.0/24 to any out via em0
${fwcmd} add nat 2 all from any to 1.1.1.5 in via em0

${fwcmd} add allow all from any to any

При этой конфигурации все прекрасно работает, пингуются и 1.1.1.5 и 1.1.1.6 и второй провайдер тоже. При выходе в сеть, и проверке через 2ip.ru показывает 1.1.1.5, если внести в таблицу 0 нужный из локалки адрес то, 2ip.ru покажет 2.2.2.2, но вот в чем грабля и я никак не могу понять что я делаю не так ), если в nat 2 поставить второй адрес первого провайдера то есть 1.1.1.6 то nat перестает работать… почему?

По факту надо сделать так что бы например локльный 3.3.3.5 выходил через 1.1.1.5, локальный 3.3.3.6 выходил через 1.1.1.6, а все остальные через 2.2.2.2

Прошу помощи….

Решение оказалось простым.

${fwcmd} nat 1 config if em1
${fwcmd} add nat 1 all from 'table(0)' to any out via em1
${fwcmd} add nat 1 all from any to 2.2.2.2 in via em1

${fwcmd} nat 2 config ip 1.1.1.6
${fwcmd} add nat 2 all from 3.3.3.5 to any out via em0
${fwcmd} add nat 2 all from any to 1.1.1.6 in via em0

${fwcmd} nat 3 config ip 1.1.1.5
${fwcmd} add nat 3 all from 3.3.3.0/24 to any out via em0
${fwcmd} add nat 3 all from any to 1.1.1.5 in via em0

${fwcmd} add allow all from any to any via em2

На выходе мы получаем что если внести адрес 3.3.3.5 в таблицу 1, то внешний будет 2.2.2.2 Если не вносить то внешний будет 1.1.1.6, если убрать его из второй таблицы ната то адрес будет 1.1.1.5

Всем спасибо, сам задал и сам решил ;)

yakunin ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей