Различия

Показаны различия между двумя версиями страницы.


balansirovka_nagruzki_isxodjaschego_trafika_mezhdu_dvumja_i_bolee_vneshnimi_kanalami_internet [2022/07/27 10:34] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Балансировка нагрузки исходящего трафика между двумя и более внешними каналами ======
 +
 +Пулы адресов могут использоваться для балансировки нагрузки между двумя и более внешними каналами с использованием опции route-to в случае невозможности организовать динамическую маршрутизацию (например, с использованием протокола [[BGP]]4). Совместное использование route-to  и пула адресов round-robin  позволяет распределить исходящие соединения между разными провайдерами.
 +
 +В качестве дополнительной информации необходимо указать адреса маршрутизаторов для каждого Интернет-соединения. Это нужно для опции **route-to**, дабы управлять исходящими пакетами.
 +
 +Следующий пример иллюстрирует балансировку нагрузки между двумя каналами:
 +<code>
 +lan_net = "192.168.0.0/24"
 +int_if  = "dc0"
 +ext_if1 = "fxp0"
 +ext_if2 = "fxp1"
 +ext_gw1 = "68.146.224.1"
 +ext_gw2 = "142.59.76.1"
 +
 +pass in on $int_if route-to \
 +   { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
 +   from $lan_net to any keep state
 +</code>
 +Опция route-to используется для приёма трафика на внутреннем интерфейсе и назначения ему внешнего сетевого интерфейса и шлюза, таким образом обеспечивая балансировку. Обратите внимание, что опция route-to должна быть указана в каждом правиле, предназначенном для балансировки трафика. Ответные пакеты приходят на тот интерфейс, с которого ушёл запрос и они будут перенаправлены во внутрь как обычно.
 +
 +Для гарантии того, что пакеты с $ext_if1 всегда направляются к $ext_gw1 (и соответственно для $ext_if2 к $ext_gw2), в правилах можно указать следующее:
 +<code>
 +pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
 +pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
 +</code>
 +====== 2 ======
 +  * Пример настройки PF для балансировка нагрузки исходящего трафика
 +Пулы адресов могут использоваться для балансировки нагрузки между двумя и более внешними каналами с использованием опции route-to в случае невозможности организовать динамическую маршрутизацию (например, с использованием протокола BGP4). Совместное использование route-to и пула адресов round-robin исходящие соединения могут быть распределены между разными провайдерами.
 +
 +В качестве дополнительной информации необходимо указать адреса маршрутизаторов для каждого Интернет-соединения. Это необходимо для опции route-to, дабы управлять исходящими пакетами.
 +
 +Этот пример покажет нам балансировку нагрузки между двумя каналами:
 +<code>
 +      lan_net = "192.168.0.0/24"
 +      int_if  = "dc0"
 +      ext_if1 = "fxp0"
 +      ext_if2 = "fxp1"
 +      ext_gw1 = "68.146.224.1"
 +      ext_gw2 = "142.59.76.1"
 +
 +      pass in on $int_if route-to \
 +        { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
 +        from $lan_net to any keep state 
 +</code>
 +Опция route-to используется для приема трафика на внутреннем интерфейсе и назначения ему внешнего сетевого интерфейса и шлюза, таким образом обеспечивая балансировку. Обратите внимание, что опция route-to должна быть указана в каждом правиле, предназначенном для балансировки трафика. Ответные пакеты приходят на тот интерфейс, с которого ушел запрос и они будут перенаправлены во внутрь как обычно.
 +
 +Для гарантии того, что пакеты с $ext_if1 всегда направляются к $ext_gw1 (и соответственно для $ext_if2 к $ext_gw2), в правилах можно указать следующее:
 +<code>
 +      pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 \
 +        to any
 +      pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 \
 +        to any
 +</code>
 +В заключение хочу сказать, что NAT можно использовать на каждом из внешних интерфейсов:
 +<code>
 +      nat on $ext_if1 from $lan_net to any -> ($ext_if1)
 +      nat on $ext_if2 from $lan_net to any -> ($ext_if2)
 +</code>
 +Полный пример балансировки исходящего трафика будет выглядеть так:
 +<code>
 +      lan_net = "192.168.0.0/24"
 +      int_if  = "dc0"
 +      ext_if1 = "fxp0"
 +      ext_if2 = "fxp1"
 +      ext_gw1 = "68.146.224.1"
 +      ext_gw2 = "142.59.76.1"
 +
 +      #  nat outgoing connections on each internet interface
 +      nat on $ext_if1 from $lan_net to any -> ($ext_if1)
 +      nat on $ext_if2 from $lan_net to any -> ($ext_if2)
 +
 +      #  default deny
 +      block in  from any to any
 +      block out from any to any
 +
 +      #  pass all outgoing packets on internal interface
 +      pass out on $int_if from any to $lan_net
 +      #  pass in quick any packets destined for the gateway itself
 +      pass in quick on $int_if from $lan_net to $int_if
 +      #  load balance outgoing tcp traffic from internal network.
 +      pass in on $int_if route-to \
 +          { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
 +          proto tcp from $lan_net to any flags S/SA modulate state
 +      #  load balance outgoing udp and icmp traffic from internal network
 +      pass in on $int_if route-to \
 +          { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
 +          proto { udp, icmp } from $lan_net to any keep state
 +
 +      #  general "pass out" rules for external interfaces
 +      pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
 +      pass out on $ext_if1 proto { udp, icmp } from any to any keep state
 +      pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
 +      pass out on $ext_if2 proto { udp, icmp } from any to any keep state
 +
 +      #  route packets from any IPs on $ext_if1 to $ext_gw1 and the same for
 +      #  $ext_if2 and $ext_gw2
 +      pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
 +      pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
 +
 +
 +</code>
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!