Инструменты пользователя

Инструменты сайта


freebsd:pf
Warning: Undefined array key 11 in /home/virtwww/w_linko22-ru_c0d3353b/http/inc/html.php on line 1453 Warning: Undefined array key -1 in /home/virtwww/w_linko22-ru_c0d3353b/http/inc/html.php on line 1458

Различия

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

Ссылка на это сравнение

Следующая версия
Предыдущая версия
freebsd:pf [2010/08/30 20:37]
linko22@gmail.com создано
freebsd:pf [2010/08/30 21:08] (текущий)
linko22@gmail.com
Строка 1: Строка 1:
-====== pf.conf ======+====== Работа с фильтром pf ====== 
 + 
 +Схема такая. 
 + 
 +Есть роутер на FreeBSD, с внешним аплинком к провайдеру по трафику. Надо завернуть все трафикопожирающие сервисы на Yota. Так же в случае падения основного канала, осуществлялось бы автоматическое переключение всего трафика на Yota и обратно, в случае, когда бы основной канал поднимался бы. 
 + 
 +===== pf.conf =====
  
   ext_if="re0" # внешний аплинк провайдера   ext_if="re0" # внешний аплинк провайдера
Строка 15: Строка 21:
   nat on $ext_if inet from $wlan_if:network to any -> ($ext_if) # НАТ для пользователей сети Wi-Fi   nat on $ext_if inet from $wlan_if:network to any -> ($ext_if) # НАТ для пользователей сети Wi-Fi
      
-  rdr on $ext_if proto tcp from any to $ext_if port 444 -> $svn_srv port 443 +  rdr on $ext_if proto tcp from any to $ext_if port 444 -> $svn_srv port 443 # проброс порта на сервер разработчиков снаружи 
-  pass in on $int_if from $int_if:network to any keep state +  pass in on $int_if from $int_if:network to any keep state # разрешающие правила на выход внутренней сети в интернет 
-  pass in on $wlan_if from $wlan_if:network to any keep state+  pass in on $wlan_if from $wlan_if:network to any keep state # разрешающие правила на выход Wi-Fi сети в интернет
      
-  pass in on $int_if route-to ($int_if $yota_addr) from $int_if:network to <yota> keep state +  pass in on $int_if route-to ($int_if $yota_addr) from $int_if:network to <yota> keep state # заворачивание адресов на Yota из внутренней сети 
-  pass in on $wlan_if route-to ($wlan_if $yota_addr) from $wlan_if:network to <yota> keep state+  pass in on $wlan_if route-to ($wlan_if $yota_addr) from $wlan_if:network to <yota> keep state # заворачивание адресов на Yota из Wi-Fi сети
      
-  pass in on $int_if route-to ($int_if $yota_addr) proto { udp, icmp } from $int_if:network to <yota> keep state +  pass in on $int_if route-to ($int_if $yota_addr) proto { udp, icmp } from $int_if:network to <yota> keep state # заворачивание остальных пакетов на Yota из внутренней сети 
-  pass in on $wlan_if route-to ($wlan_if $yota_addr) proto { udp, icmp } from $wlan_if:network to <yota> keep state+  pass in on $wlan_if route-to ($wlan_if $yota_addr) proto { udp, icmp } from $wlan_if:network to <yota> keep state # заворачивание остальных пакетов на Yota из Wi-Fi сети
      
-  pass in on $int_if reply-to ($int_if $yota_addr) proto tcp from ! $int_if:network to self port 222 flags S/SA keep state+  pass in on $int_if reply-to ($int_if $yota_addr) proto tcp from ! $int_if:network to self port 222 flags S/SA keep state # обратный проброс порта ssh из Yota во вне, сделано, что бы в случае пропажи основного линка можно было зайти на роутер 
 + 
 +===== pf.yota-gw ===== 
 + 
 +Это файл таблиц адресов, которые надо посылать через Yota. Используется в случае падения основного канала. 
 +  !194.87.0.50 # этот адрес мы исключаем, что бы пинговать его, проверяя доступность канала провайдера (www.ru) 
 +  !10.8/16 # исключаем всю свою внутреннюю сеть 
 +  0/0 # Все адреса 
 + 
 + 
 +===== pf.yota-table.conf ===== 
 + 
 +В этом файле таблиц прописываются те адреса или подсети, которые используются для заворачивания на Yota в обычном режиме работы. 
 + 
 +===== pf.yota.conf ===== 
 + 
 +Файл, который считывается непосредственно при загрузке pf.conf 
 +===== Переключалка каналов ===== 
 +==== Скрипт переключения ==== 
 + 
 +Скрипт на bash, полный путь к нему /home/scripts/sw-isp.sh 
 + 
 +  #!/usr/local/bin/bash 
 +   
 +  ping -q -c 5 -W 60 194.87.0.50                          # пингуем 5 раз адрес (с первого раза бывает, хоть и очень редко, пинг не идет и это принимается за падение канала) 
 +  if [ $? -ne  "0" ] ; then                               # если пинг не проходит и возвращаемое значение не 0 тогда 
 +      pfctl -t yota -T show | grep "194.87.0.50"          # смотрим, есть ли адрес для пинга в таблице, т.е. переключение на Yota уже произошло 
 +      if [ $? -ne "0" ] ; then                            # если нет, это первое падение канала 
 +          cp /etc/pf.yota-gw.conf /etc/pf.yota.conf       # меняем файл таблицы адресов 
 +          pfctl -f /etc/pf.conf                           # перезагружаем правила 
 +      fi 
 +  else                                                    # пинг есть 
 +      pfctl -t yota -T show | grep "194.87.0.50"          # смотрим, какая таблица активна 
 +      if [ $? -eq "0" ] ; then                            # если таблица Yota в качестве шлюза 
 +          cp /etc/pf.yota-table.conf /etc/pf.yota.conf    # тогда меняем файл таблицы на часть адресов через Yota 
 +          pfctl -f /etc/pf.conf                           # применяем правила 
 +      fi 
 +  fi 
 + 
 +==== Запись в /etc/crontab ==== 
 + 
 +''                              root    /home/scripts/sw-isp.sh''
  
freebsd/pf.1283186234.txt.gz · Последнее изменение: 2010/08/30 20:37 — linko22@gmail.com