Страница 16 из 31

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-08 21:06:53
cthtuf
terminus писал(а):

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

add 01075 allow ip from any to 10.0.2.16 in recv em0
add 01076 allow ip from any to 10.0.3.16 in recv em1
эти не нужны. с ними ответный трафик не доходит до ната.

Это помогло?
блин точно. я их делал чтобы перекрыть 10130 и 10131 и не подумал что они могут перекрыть нат.

Спасибо за помощь!

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-08 21:20:21
terminus
я их делал чтобы перекрыть 10130 и 10131
Не надо перекрывать. Из интернета не могут приходить "правельные" пакеты на внешний интерфейс якобы от внутренней сети. С 10130 и 10131 все будет работать.

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-08 21:29:00
cthtuf
terminus писал(а): Не надо перекрывать. Из интернета не могут приходить "правельные" пакеты на внешний интерфейс якобы от внутренней сети. С 10130 и 10131 все будет работать.
Да, я понимаю, но у меня не прямое подключение к интернету, а через nat virtualbox'a, и он по dhcp выдает ip в диапазоне 10.0.0.0/16
а реальная система будет работать через 2 adsl модема и между модемами и шлюзом будут опять же приватные ip.
но это не проблема, я попробую как-нибудь иначе сделать 10130 и 10131.

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-13 12:08:16
cthtuf
пытаюсь реализовать отказоустойчивость, используя оба канала и меня все время вопрос один мучает - в какой момент времени и как часто запускается скрипт setfib1? один раз при старте системы? я тут просто думаю, что если я в своем скрипте буду использовать команды

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

setfib 1 route delete default
setfib 1 route add default ${setfib1_defaultroute}
то не будет ли скрипт setfib1 затирать результат выполнения моего скрипта?

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-13 16:07:55
terminus
в какой момент времени и как часто запускается скрипт setfib1?
один раз при старте системы. или вручную потом.
то не будет ли скрипт setfib1 затирать результат выполнения моего скрипта?
если рукми его не выполнять, то до следующей перезагрузки.

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-17 23:12:09
cthtuf
написал небольшой скрипт, который будет определять жив ли тот или иной провайдер. если один из них мертв - направлять весь трафик на другого. прошу посмотреть, нет ли тут подводных камней, которые я мог по неопытности раскидать )

я прописал статические маршруты для h1 и h2 через gw1, а для h3 и h4 через gw2.
/etc/gwchecker

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

#!/bin/sh

gw1=10.0.2.2
gw2=10.0.3.2

h1=77.88.21.3           #ya.ru
h2=93.158.134.11        #ya.ru
h3=74.125.43.147        #google.com
h4=74.125.43.99         #google.com
ping -q -c 1 $h1 > /dev/null 2>&1
ph1=$?
ping -q -c 1 $h2 > /dev/null 2>&1
ph2=$?
pgw1=`expr $ph1 '*' $ph2`

ping -q -c 1 $h3 > /dev/null 2>&1
ph3=$?
ping -q -c 1 $h4 > /dev/null 2>&1
ph4=$?
pgw2=`expr $ph3 '*' $ph4`

lg(){
        echo `date` \|$ph1 $ph2 $ph3 $ph4\| $1 >> /var/log/gwchecker.log
}

case $pgw1 in
0)      if [ -f /tmp/gw1.na ]; then
                ( route change default $gw1 && rm /tmp/gw1.na && lg 'gw1 is up now. change fib0 to gw1') || lg '!!! gw1 restore failed'
        fi
        case $pgw2 in
        0)      if [ -f /tmp/gw2.na ]; then
                        ( setfib 1 route delete default && setfib 1 route add default $gw2 && rm /tmp/gw2.na && lg 'gw2 is up now. change fib1 to gw2') || lg '!!! gw2 restore failed'
                else lg OK #delete this line for decrease log size
                fi
                ;;
        *)      if [ ! -f /tmp/gw2.na ]; then
                        ( setfib 1 route delete default && setfib 1 route add default $gw1 && touch /tmp/gw2.na && lg 'gw2 is down. change fib1 to gw1') || lg '!!! change fib1 to gw1 failed'
                else lg 'gw2 still NA'
                fi
                ;;
        esac;;
*)      if [ ! -f /tmp/gw1.na ]; then
                touch /tmp/gw1.na
        fi
        case $pgw2 in
        0)      if [ -f /tmp/gw2.na ]; then
                        ( setfib 1 route delete default && setfib 1 route add default $gw2 && rm /tmp/gw2.na ) || lg '!!! change fib1 to gw2 failed'
                        lg 'gw2 is up now. change fib1 to gw2'
                fi
                if [ -f /tmp/gw1.na ]; then
                        route change default $gw2 || lg '!!! change fib0 to gw2 failed'
                        lg 'change fib0 to gw2'
                else
                        lg 'gw1 still NA'
                fi
                ;;
        *)      if [ ! -f /tmp/gw2.na ]; then
                        touch /tmp/gw2.na
                fi
                lg 'gw1 and gw2 are still NA'
                ;;
        esac;;
esac
прошу меня извинить за то что это по сути оффтоп. в свое оправдание могу сказать лишь то, что этот скрипт может послужить дополнением к пятому примеру )

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-17 23:54:18
cthtuf
и ещё у меня возник вопрос по пятому примеру

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

add 1040 setfib 0 ip from any to any via fxp0 keep-state
add 1050 allow ip from any to any via fxp0

add 1060 setfib 1 ip from any to any via fxp0 keep-state
add 1070 allow ip from any to any via fxp0
почему keep-state стоит на правилах 1040 и 1060, а не на правилах 1050 и 1070?

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-18 11:53:29
terminus
почему keep-state стоит на правилах 1040 и 1060, а не на правилах 1050 и 1070?
http://nuclight.livejournal.com/124348.html

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

         |
         v  фрагмент ipfw_chk(): начало правила с keep-state
         |                                             ______________________
         |                                            | ТАБЛИЦА ДИНАМИЧЕСКИХ |
    проверить таблицу (неявный check-state): <=======>|        ПРАВИЛ        |
    есть ли соответствующее пакету правило?           | (с таймером удаления |
         |     \                            .-------->| для каждого правила) |
        нет    да-->--перейти к действию в /          '----------------------'   
         |          найденном "родительском"                     ^
         v          правиле и сбросить таймер                    |
         |                в таблице         \                    |
         |                                   \                   |
   правило N: пакет соответствует указанному  |                  |
   условию в статическом правиле номер N ?    |         указано keep-state:
         |     \                              |         создать в таблице
        нет    да-->----------------->--------|-------> новое динамическое
         |                                    |         правило  |
         v                                    v                  |
   перейти к проверке следующего       выполнить параметры   <---'
   по списку статического правила      действия статического
         |                             правила N (log, tag, ...)
         v                                    |
         |    выполнить действие,             |
         |    указанное в статическом <-------'
         |    правиле N и обновить на
         |    правиле N счетчики
         v
Потому, что нам нужно запоминать состояние присвоенной пакету таблицы маршрутизации. Если поставить kepp-state на 1050 и 1070, то порядок действий будет такой:

пришел из локальной сети, на проходе IN пошел по правилам:
- на правиле "1010 prob 0.5 skipto 1060" пакет перепрыгнул на 1060
- на 1060 получил таблицу
- на 1070 в таблицу состояний попала записть IP 192.168.1.56 <-> IP 8.8.8.8 и действие "allow ip"
- на 1070 применяется "allow ip"

трафик ужел дальше, дошел до ната и ухел в интернет.

пришел из интернета, на проходе IN дошел до ната, демаскировался, ушел в проход OUT.
- дошел до 1040 и уже получил неверную таблицу
- дошел до 1050 и на check-state получил действие allow

ответный трафик который сново пришел из локальной сети, на проходе IN пошел по правилам:
- на правиле "1010 prob 0.5 skipto 1060" пакет перепрыгнул на 1040
- на 1040 получил неправильную таблицу
- на 1050 на check-state перепрыгнул на 1070, выполнил действие allow и ушел дальше...

В такой последовательности сессии будут ломаться - пакеты станут произвольно прыгать между подключениями, что нежелательно.

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-18 12:15:39
cthtuf
terminus спасибо! мне почему-то и в голову не пришло, что keep-state запоминает таблицу маршрутизации

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-18 22:54:57
terminus
он запоминает не таблицу маршрутизации, а действие родительского правила. Правила 1040 и 1060 имеют действие setfib. Вот и весь номер.

Почитайте внимательно статью nuclight'а - много интересного для себя откроете. :smile:

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-19 0:09:39
cthtuf
terminus писал(а):он запоминает не таблицу маршрутизации, а действие родительского правила
ну да, я просто имел ввиду что на правилах 1040 и 1060 keep-state делает именно это :smile:
terminus писал(а):Почитайте внимательно статью nuclight'а - много интересного для себя откроете. :smile:
да, я решил что стоит снова перечитать его статью о сложных случаях) статьи nuclight'а таковы, что лично я их не могу сразу усвоить всю ту информацию, которая в них преподносится, поэтому каждый раз читая их делаю для себя все новые и новые открытия :smile:

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-21 20:58:05
uasash
перехожу на ядерный нат (пока не совсем проникся), може кто кинет сылку на пример проброски на внутрений фтп

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-22 9:12:48
mak_v_
Господа, а кто-нибудь уже прикручивал setfib к pf?
Тема до боли избитая, но (пока без setfib):
1) 2 канала (дорогой, дешёвый)
2) На сервере прокся, фтп, почта, днс
3) с помощью route-to, reply-to закрутили ответ по нужным интерфейсам, работают ответы со всех интерфейсов (почта, ссх и т.д.)

Но вот незадача, надо сквиду выпустить через альтернативный канал.....бьюсь уже неделю
7.2-RELEASE, pf

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-22 9:39:10
terminus
uasash писал(а):перехожу на ядерный нат (пока не совсем проникся), може кто кинет сылку на пример проброски на внутрений фтп

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

ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port tcp 192.168.1.2:21 21 
redirect_port tcp 192.168.1.2:21 21
192.168.1.2:21 - куда делаем мапинг
21 - какой внешний порт мапим

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-22 10:11:19
uasash
terminus писал(а):
uasash писал(а):перехожу на ядерный нат (пока не совсем проникся), може кто кинет сылку на пример проброски на внутрений фтп

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

ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port tcp 192.168.1.2:21 21 
redirect_port tcp 192.168.1.2:21 21
192.168.1.2:21 - куда делаем мапинг
21 - какой внешний порт мапим
а как же все остальное у меня это прописано...

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

 
redirect_port tcp 192.168.1.205:21 21 \
redirect_port tcp 192.168.1.205:20 20 \
но все равно не работает, блокирует входящие на $extip 1024-65353 вроде как alias_ftp должен рулить но че то не рулит.
Куда копать?

Re: Подробное руководство по ipfw nat

Добавлено: 2010-09-22 10:18:25
terminus
В остальные правила? :unknown:

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-07 15:43:32
SOBAN
Пользовался файрволом pf. Сейчас решил пользоваться ipfw, но разобраться после за не такая уж и легкая задача... все как то не могу разобраться, имеет ли смысл переходить с pf на ipfw ?

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-08 13:01:41
SOBAN
Подскажите что может быть!
FreeBSD шлюзом, локальной сети раздает интернет
Правила в ipfw:

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

add allow ip from 127.0.0.0/8 to any
add allow ip from any to 127.0.0.0/8


add allow ip from any to any via sis0

nat 1 config log if ng0 same_ports reset deny_in
add nat 1 ip from any to any via ng0

add allow ip from any to any

add divert natd all from any to any via ng0 
Такое ощущение что канал стал раз в 7-8 уже, скорость упала, страницы грузятся меееедленно. Некоторые сайты не открываются вообще. До этого стоял шлюз на FreeBSD 8.0 и с темеже сетевыми настройками и DNS серверами все открывалось...

В подписи софт и железо которое на нынешней машине.

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-08 13:11:18
terminus
Зачем два ната ipfw nat + natd?

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-08 13:14:50
Kazak
Доброго времени суток, честной компании.

Есть проблемное наследство от прошлого админа - конфиг для ipfw. Сама проблема состоит в том что всем пользователям дается НАТ, я категорически хочу это изменить, потому подразобравшись немного создал таблицу table(3) из тех машин которые НАТить,но вот проблема - без any to any (правило № 2200) ничего не работает.

Правила:
-

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

FwCMD="/sbin/ipfw"
IfExt="vr0"
IfInt="nfe0"
IpExt="212.12.111.115"
IpInt="10.10.10.76" 
## Servers table ##
ipfw table 3 flush
ipfw table 3  add 10.10.10.1
ipfw table 3  add 10.10.10.2
ipfw table 3  add 10.10.10.65
ipfw table 3  add 10.10.10.101
ipfw table 3  add 10.10.10.76
ipfw table 3  add 10.10.10.78
ipfw table 3  add 10.10.10.113
ipfw table 3  add 10.10.10.100
ipfw table 3  add 10.10.10.119


Netmask="24"
Netmask1="30"

NetInt="10.10.10.0/24"

${FwCMD} -f flush
${FwCMD} add  check-state

${FwCMD} add 00600 allow all from any to any via nfe0

ipfw nat 1 config  log if vr0  reset same_ports
ipfw  add 02000 nat 1 all from "table(3)" to any via vr0
ipfw  add 02100 allow all from "table(3)" to any via  nfe0

ipfw  add 02110 allow icmp from "table(3)" to any via  nfe0
ipfw  add 02120 allow icmp from "table(3)" to any via  vr0

ipfw add 02200 nat 1 all from any to any via vr0
ipfw add 02300 allow icmp from any to any via vr0
ipfw add  02400 allow all from me to any via nfe0
Тоесть либо натится все либо ничего, не понимаю почему не натится только таблица 3?

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-08 13:53:00
SOBAN
А да... сори, не убрал natd, вообще, ситуация как с natd так и с ipfw nat складываеться одинаковая! По этому и пробывал все.

Так же часть ресурсов не открывается и низкая скорость.

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-08 15:41:27
terminus
Есть проблемное наследство от прошлого админа

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


FwCMD="/sbin/ipfw"
IfExt="vr0"
IfInt="nfe0"
IpExt="212.12.111.115"
IpInt="10.10.10.76" 
Netmask="24"
Netmask1="30"
NetInt="10.10.10.0/24"

## Servers table ##
${FwCMD} table 3 flush

${FwCMD} table 3  add 10.10.10.1
${FwCMD} table 3  add 10.10.10.2
${FwCMD} table 3  add 10.10.10.65
${FwCMD} table 3  add 10.10.10.101
${FwCMD} table 3  add 10.10.10.76
${FwCMD} table 3  add 10.10.10.78
${FwCMD} table 3  add 10.10.10.113
${FwCMD} table 3  add 10.10.10.100
${FwCMD} table 3  add 10.10.10.119


${FwCMD} -f flush

${FwCMD} nat 1 config log if vr0 deny_in reset same_ports


${FwCMD} add 00600 allow all from ${NetInt} to me in recv nfe0
${FwCMD} add 00601 allow all from me to ${NetInt} out xmit nfe0

${FwCMD} add 00602 allow all from "table(3)" to any in recv nfe0
${FwCMD} add 00603 allow all from any to "table(3)" out xmit nfe0

${FwCMD} add 00604 deny all from any to any via nfe0

${FwCMD} add 00700 nat 1 all from any to any via vr0

${FwCMD} add 00800 allow all from any to any

:unknown:

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-08 15:45:21
terminus
Игорь писал(а):А да... сори, не убрал natd, вообще, ситуация как с natd так и с ipfw nat складываеться одинаковая! По этому и пробывал все.

Так же часть ресурсов не открывается и низкая скорость.
netstat ошибок не показывет?

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

netstat -ibdn

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-08 16:06:17
hizel
Игорь писал(а):А да... сори, не убрал natd, вообще, ситуация как с natd так и с ipfw nat складываеться одинаковая! По этому и пробывал все.

Так же часть ресурсов не открывается и низкая скорость.
ng это pptp\pppoe? тогда mtu\mss проблема

Re: Подробное руководство по ipfw nat

Добавлено: 2010-10-08 17:09:11
Curious mind
terminus писал(а):
Есть проблемное наследство от прошлого админа

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


FwCMD="/sbin/ipfw"
IfExt="vr0"
IfInt="nfe0"
IpExt="212.12.111.115"
IpInt="10.10.10.76" 
Netmask="24"
Netmask1="30"
NetInt="10.10.10.0/24"

## Servers table ##
${FwCMD} table 3 flush

${FwCMD} table 3  add 10.10.10.1
${FwCMD} table 3  add 10.10.10.2
${FwCMD} table 3  add 10.10.10.65
${FwCMD} table 3  add 10.10.10.101
${FwCMD} table 3  add 10.10.10.76
${FwCMD} table 3  add 10.10.10.78
${FwCMD} table 3  add 10.10.10.113
${FwCMD} table 3  add 10.10.10.100
${FwCMD} table 3  add 10.10.10.119


${FwCMD} -f flush

${FwCMD} nat 1 config log if vr0 deny_in reset same_ports


${FwCMD} add 00600 allow all from ${NetInt} to me in recv nfe0
${FwCMD} add 00601 allow all from me to ${NetInt} out xmit nfe0

${FwCMD} add 00602 allow all from "table(3)" to any in recv nfe0
${FwCMD} add 00603 allow all from any to "table(3)" out xmit nfe0

${FwCMD} add 00604 deny all from any to any via nfe0

${FwCMD} add 00700 nat 1 all from any to any via vr0

${FwCMD} add 00800 allow all from any to any

:unknown:
Извиняюсь что не до конца уточнил,это шлюзовая машина раздающая инет. Мне нужно чтобы чтобы потребители не указанные в таблице получали инет только с прокси, мне не совсем понятно следующее:

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

${FwCMD} nat 1 config log if vr0 deny_in reset same_ports - Зачем запрещать вход пакетов на внешний интерфейс ?

${FwCMD} add 00600 allow all from ${NetInt} to me in recv nfe0
${FwCMD} add 00601 allow all from me to ${NetInt} out xmit nfe0

${FwCMD} add 00602 allow all from "table(3)" to any in recv nfe0
${FwCMD} add 00603 allow all from any to "table(3)" out xmit nfe0   Не до конца понятна логика этих правил хотя возможно я просто не правильно их трактую
И почему последнее правило

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

${FwCMD} add 00800 allow all from any to any