pf nat на много внешних IP + 2 провайдера

Ответить
lasik
Сообщения: 983
Зарегистрирован: Чт янв 10, 2008 5:20 pm
Откуда: Россия, Москва

pf nat на много внешних IP + 2 провайдера

Сообщение lasik »

В общем такая ситуация

Есть сервер под управлением FreeBSD 7.2.
2 провайдера
1 провайдер дает Интернет по трафику и 1 внешний IP
2 провайдер дает безлимитный Интернет и пока 16 внешних IP (в дальнейшем больше)


Следовательно возник вопрос как сделать эти 16 внешних IP, что бы можно было раскидать эти адреса по пулам.

Данные
em0 – один провайдер с ip em0_1 шлюз em0_g
em1 – второй провайдер с ip с em1_1 до em1_17 шлюз em1_g
em3 – интерфейс смотрящий на зверей с ip em2_1
Lpul1 – пул лимитного провайдера
Примечание на Lpul1 я отдаю 64 тысячи адресов (/16)
Upul1 – Upul17 – пулы второго провайдера
Примечание на Upul* я отдаю по 256 адресов (/24)


Ход моего решения

Код: Выделить всё

isp1_if  = "em0"
isp2_if  = "em1"
isp3_if  = "em1"
isp4_if  = "em1"
isp5_if  = "em1"
isp6_if  = "em1"
isp7_if  = "em1"
isp8_if  = "em1"
isp9_if  = "em1"
isp10_if  = "em1"
isp11_if  = "em1"
isp12_if  = "em1"
isp13_if  = "em1"
isp14_if  = "em1"
isp15_if  = "em1"
isp16_if  = "em1"
isp17_if  = "em1"
isp18_if  = "em1"


isp1_gw = "em0_g"
isp2_gw = "em1_g "
isp3_gw = "em1_g "
isp4_gw = "em1_g "
isp5_gw = "em1_g "
isp6_gw = "em1_g "
isp7_gw = "em1_g "
isp8_gw = "em1_g "
isp9_gw = "em1_g "
isp10_gw = "em1_g "
isp11_gw = "em1_g "
isp12_gw = "em1_g "
isp13_gw = "em1_g "
isp14_gw = "em1_g "
isp15_gw = "em1_g "
isp16_gw = "em1_g "
isp17_gw = "em1_g "
isp18_gw = "em1_g "


table <NAT_1> { Lpul1 }
table <NAT_2> { Upul1 }
table <NAT_3> { Upul2 }
table <NAT_4> { Upul3 }
table <NAT_5> { Upul4 }
table <NAT_6> { Upul5 }
table <NAT_7> { Upul6 }
table <NAT_8> { Upul7 }
table <NAT_9> { Upul8 }
table <NAT_10> { Upul9 }
table <NAT_11> { Upul10 }
table <NAT_12> { Upul11 }
table <NAT_13> { Upul12 }
table <NAT_14> { Upul13 }
table <NAT_15> { Upul14 }
table <NAT_16> { Upul15 }
table <NAT_17> { Upul16 }
table <NAT_18> { Upul17 }


set limit { states 100000, frags 5000 }
scrub in all

nat on $isp1_if from <NAT_1> to any -> em0_1
nat on $isp2_if from <NAT_2> to any -> em1_1
nat on $isp3_if from <NAT_3> to any -> em1_2
nat on $isp4_if from <NAT_4> to any -> em1_3
nat on $isp5_if from <NAT_5> to any -> em1_4
nat on $isp6_if from <NAT_6> to any -> em1_5
nat on $isp7_if from <NAT_7> to any -> em1_6
nat on $isp8_if from <NAT_8> to any -> em1_7
nat on $isp9_if from <NAT_9> to any -> em1_8
nat on $isp10_if from <NAT_10> to any -> em1_9
nat on $isp11_if from <NAT_11> to any -> em1_10
nat on $isp12_if from <NAT_12> to any -> em1_11
nat on $isp13_if from <NAT_13> to any -> em1_12
nat on $isp14_if from <NAT_14> to any -> em1_13
nat on $isp15_if from <NAT_15> to any -> em1_14
nat on $isp16_if from <NAT_16> to any -> em1_15
nat on $isp17_if from <NAT_17> to any -> em1_16
nat on $isp18_if from <NAT_18> to any -> em1_17





pass quick on lo0 all
Вопрос.

Буду я иметь успех в этом, или буду иметь кислую физиономию ?

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Re: pf nat на много внешних IP + 2 провайдера

Сообщение sopov »

Вот рабочий конфиг для больших нагрузок с PBR для PF

Код: Выделить всё

set optimization aggressive

set limit states 100000
set limit src-nodes 100000
# Указываем используемые сетевые интерфейсы:

ext_if_a = "fxp0"

ext_if_b = "fxp1"

# Для каждого из каналов задаем IP-адрес шлюза:

ext_gw_a = "ip шлюза а"

ext_gw_b = "ip шлюза б"

ext_ip_a = "ip интерфейса а"

ext_ip_b = "ip интерфейса б"

scrub in all fragment reassemble
#Правило позволяет натить ходить на определенные хосты "от имени" другого ip.
nat on $ext_if_a inet from { сеть_или_ip_из_пула } to { ip_куда_ходить } -> какой_ip_подставить
#Правило позволяет натить трафик для определенных портов через разные каналы
nat on $ext_if_a inet from { сеть_или_ip_из_пула } to any port { 80, 81, 8080 } -> $ext_ip_b
#Весь трафик через канал а
nat on $ext_if_a inet from { сеть_или_ip_из_пула } to any -> $ext_ip_a
#Весь трафик через канал б
nat on $ext_if_a inet from { сеть_или_ip_из_пула } to any -> $ext_ip_b

pass in all
pass out all

#Ограничиваем до 200 "состояний" на ip
pass from { сеть_или_ip_из_пула } to any keep state (source-track rule, max-src-states 200)
#Ограничиваем до 800 установленных сессий для "вредного" клиента
pass from { ip_клиента } to any keep state (max 800)
#Это правило служебное - оставте без изменений
pass out route-to ($ext_if_b $ext_gw_b) inet from ($ext_if_b) to !(self:network) modulate state

Ответить