Страница 1 из 1

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-09 16:06:19
k0ma
Собсно, не пашет нат, не могу дойти почему. То ли порядок правил не тот, или еще чего-то.

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

#!/bin/sh
ipfw='/sbin/ipfw -q'
flush='/sbin/ipfw -q -f flush'
flushnat='/sbin/ipfw -q -f nat flush'
flushpipe='/sbin/ipfw -q pipe flush'
pipe='/sbin/ipfw -q pipe'
#traffmeter='/usr/local/TraffMeter/ipacctd.sh'

${flush}
${flushnat}
${flushpipe}
worknet='172.17.12.0/22' - рабочая сеть
usernet='172.16.0.0/24' - домашняя сеть
vpn='192.168.10.0/24' -  адреса получают клиенты при подключении впн
vpn1='192.168.1.14/32' - такой адрес получает отдельный клиент
bibl='192.168.168.0/24' - еще одна сеть
vlans200='172.20.0.0/19' - куча вланов, выделил как одну подсеть
vlan20='10.0.0.0/24' - еще один влан


ng0ip=`ifconfig ng0 inet | grep inet | awk '{print $2}'` - чтобы вычленить адрес динамически выдаваемый
ng0gw=`ifconfig ng0 inet | grep inet | awk '{print $4}'`- чтобы вычленить gateway для адреса динамически выдаваемый
ng2ip=`ifconfig ng1 inet | grep inet | awk '{print $2}'`- чтобы вычленить адрес динамически выдаваемый
ng2gw=`ifconfig ng1 inet | grep inet | awk '{print $4}'`- чтобы вычленить gateway для адреса динамически выдаваемый

#local
${ipfw} add 10 allow icmp from any to any
${ipfw} add    allow all from any to any via lo0
${ipfw} add    deny all from any to 127.0.0.0/8
${ipfw} add    deny all from 127.0.0.0/8 to any

${ipfw} add 12 allow all from me to any keep-state
${ipfw} add 40 allow all from 192.168.10.15/32 to any via ng*
${ipfw} add 40 allow all from any to 192.168.10.15/32 via ng*
${ipfw} add 40 allow all from 172.20.4.251/32 to 172.17.12.0/22
${ipfw} add 40 allow all from 172.17.12.0/22 to 172.20.4.251/32
${ipfw} add 41 allow all from 172.17.12.236/32 to me keep-state

#vse ko mne
${ipfw} add 50 allow all from ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn} to me
${ipfw} add 51 allow all from me to ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn}
${ipfw} add 52 allow all from 192.168.10.0/24 to ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn}
${ipfw} add 53 allow all from ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn} to 192.168.10.0

#запрет общения между интерфейсами
${ipfw} add 800 deny all from ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn} to any

#mts 3g
${ipfw} add 811 allow all from 192.168.1.14/32 to any via ${ng1ip}
${ipfw} add 812 allow all from any to 192.168.1.14/32 via ${ng1ip}

#10 - local
#20 - inet
#30 - deny
#############################################################################
${ipfw} add 10000 deny all from table\(30\) to any
${ipfw} add 10001 deny all from any to table\(30\)
${ipfw} add 12000 allow all from table\(20\) to any via ng*
${ipfw} add 12000 allow all from any to table\(20\) via ng*
#############################################################################
#NAT from
${ipfw} nat 1 config log ip ${ng0ip} reset same_ports deny_in
${ipfw} add 13000 nat 1 ip from 192.168.10.15/32 to any out via ng0
${ipfw} add 13001 nat 1 ip from any to 192.168.10.15/32 in via ng0
:st:

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-10 7:33:50
Alex Keda

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

ipfw show

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-10 8:04:49
k0ma

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

root@router:/usr/home/koma # ipfw show
00001       0          0 pipe 1 ip from any to 192.168.10.12 out
00001       0          0 pipe 1 ip from 192.168.10.12 to any out
00001       0          0 pipe 2 ip from any to 192.168.10.12 out
00001       0          0 pipe 2 ip from 192.168.10.12 to any out
00010  211095   15143440 allow icmp from any to any
00010     121       6000 allow ip from any to any via lo0
00010       0          0 deny ip from any to 127.0.0.0/8
00010       0          0 deny ip from 127.0.0.0/8 to any
00012 5279476 3984206867 allow ip from me to any keep-state
00040       0          0 allow ip from 172.20.4.251 to 172.17.12.0/22
00041    8947    1144146 allow ip from 172.17.12.236 to me keep-state
00050    1077      74711 allow ip from 10.0.0.0/24,172.20.0.0/19,172.16.0.0/24,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24 to me
00051       0          0 allow ip from me to 10.0.0.0/24,172.20.0.0/19,172.16.0.0/24,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24
00052  840569   49167445 allow ip from 192.168.10.0/24 to 10.0.0.0/24,172.20.0.0/19,172.16.0.0/24,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24,192.168.100.22
00053 1398288 1812905081 allow ip from 10.0.0.0/24,172.20.0.0/19,172.16.0.0/24,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24,192.168.100.22 to 192.168.10.0/24
00800  809978   79064273 deny ip from 10.0.0.0/24,172.20.0.0/19,172.16.0.0/24,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24 to any
00900       0          0 allow ip from 192.168.10.15 to any via ng0
13000       0          0 nat 3 ip from 192.168.10.15 to any out via ng*
13001       0          0 nat 3 ip from any to 192.168.10.15 in via ng*
65535   30937    8551563 deny ip from any to any
Если лишнее есть, то от незнания все возможно...

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-10 12:16:43
Alex Keda
Пологгируйте те которые deny....

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-10 19:12:48
Dirty.Eager
Пакеты с адреса 192.168.10.15 на адреса 10.0.0.0/24,172.20.0.0/19,172.16.0.0/24,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24,192.168.100.22 пропускаются правилом 00052:
k0ma писал(а): 00052 840569 49167445 allow ip from 192.168.10.0/24 to 10.0.0.0/24,172.20.0.0/19,172.16.0.0/24,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24,192.168.100.22
На этом ipfw прекращает обработку пакета.

Пакеты с адреса 192.168.10.15 на все другие адреса режутся правилом 00800:
k0ma писал(а): 00800 809978 79064273 deny ip from 10.0.0.0/24,172.20.0.0/19,172.16.0.0/24,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24 to any
На этом ipfw прекращает обработку пакета.

В результате до правила 13000 ipfw просто не доходит:
k0ma писал(а): 13000 0 0 nat 3 ip from 192.168.10.15 to any out via ng*

Собственно, если есть желание применять и nat, и фильтрацию, то надо выносить правило 13000 в начало (ранее 00052 и 00800) и выключать one_pass

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

     To let the packet continue after being (de)aliased, set the sysctl vari-
     able net.inet.ip.fw.one_pass to 0.  For more information about aliasing
     modes, refer to libalias(3).  See Section EXAMPLES for some examples
     about nat usage.

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-11 9:59:04
k0ma
круто! Я знал что где-то что-то не то!
Спасибо

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-14 12:59:28
k0ma

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

#!/bin/sh
ipfw='/sbin/ipfw -q'
flush='/sbin/ipfw -q -f flush'
flushnat='/sbin/ipfw -q -f nat flush'
flushpipe='/sbin/ipfw -q pipe flush'
pipe='/sbin/ipfw -q pipe'
#traffmeter='/usr/local/TraffMeter/ipacctd.sh'

${flush}
${flushnat}
${flushpipe}
worknet='172.17.12.0/22'
usernet='172.16.0.0/19'
vpn='192.168.10.0/24'
vpn1='192.168.1.14/32'
bibl='192.168.168.0/24'
vlans200='172.20.0.0/19'
vlan20='10.0.0.0/24'

#local
${ipfw} add 10 allow icmp from any to any
${ipfw} add 10 allow all from any to any via lo0
${ipfw} add 10 deny all from any to 127.0.0.0/8
${ipfw} add 10 deny all from 127.0.0.0/8 to any

#perfilovvy
${ipfw} add 11 allow all from me to any keep-state
${ipfw} add 12 allow all from 172.17.12.236/32 to me keep-state

#NAT from
${ipfw} nat 1 config if vlan201 same_ports
${ipfw} add 13 skipto 100 ip from 192.168.10.15/32 to 172.20.1.0/24 out xmit vlan201

#vse ko mne
${ipfw} add 50 allow all from ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn} to me
${ipfw} add 51 allow all from me to ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn}

${ipfw} add 100 nat 1 ip from 192.168.10.15/32 to 172.20.1.0/24 xmit vlan201
${ipfw} add 150 nat 1 ip from 172.20.1.0/24 to 192.168.10.15/32 recv vlan201

#vse vsem
${ipfw} add 1000 allow all from any to any
${ipfw} add 65500 deny all from any to any
Передалал, так верно или еще криво?
Нат не пашет...

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-20 7:23:05
Alex Keda

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

ipfw show

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-20 7:46:03
k0ma

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

 # ipfw show
00010     33647      5727242 allow icmp from any to any
00010       727        32120 allow ip from any to any via lo0
00010         0            0 deny ip from any to 127.0.0.0/8
00010         0            0 deny ip from 127.0.0.0/8 to any
00011 163810285 151882021551 allow ip from me to any keep-state
00012     20444      2612494 allow ip from 172.17.12.236 to me via vlan1 keep-state
00013         0            0 skipto 100 ip from 192.168.10.15 to 172.20.1.0/24 out xmit vlan201
00014         0            0 skipto 150 ip from 172.20.1.0/24 to 192.168.10.15 in recv vlan201
00050  73099255  66003453169 allow ip from 10.0.0.0/24,172.20.0.0/19,172.16.0.0/19,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24 to me keep-state
00051         0            0 allow ip from me to 10.0.0.0/24,172.20.0.0/19,172.16.0.0/19,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24
00200        48         2272 allow ip from 192.168.10.0/24 to 192.168.10.0/24 via ng* keep-state
00202    391847    140754001 allow ip from 192.168.10.0/24 to 172.16.0.0/19 via ng* keep-state
00204   9418730   8622666941 allow ip from 192.168.10.0/24 to 172.17.12.0/22 via ng* keep-state
00206  71785636  65561993152 allow ip from 192.168.10.0/24 to 192.168.100.0/22 via ng* keep-state
00302         0            0 pipe 2 ip from any to 192.168.10.14 out via ng0
00303         0            0 pipe 2 ip from 192.168.10.14 to any in via ng0
10000         0            0 deny ip from table(30) to any
10001         0            0 deny ip from any to table(30)
12000     85602     10093577 allow ip from table(20) to any via ng*
12000     63746     41699681 allow ip from any to table(20) via ng*
65500      9568      1063772 deny log logamount 1000000 ip from any to any via ng0
65535   2288953    231092159 deny ip from any to any
Отправлено спустя 2 минуты 35 секунд:
У меня еще вопрос. почему если я говорю allow all from any to any via ng0(тот самый интерфейс на котором мир), то нету мира, если же написать allow all from any to any via ng*. то мир работает

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-20 23:18:27
Dirty.Eager
[quote="k0ma"]

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

 # ipfw show
...skip....
00013         0            0 skipto 100 ip from 192.168.10.15 to 172.20.1.0/24 out xmit vlan201
00014         0            0 skipto 150 ip from 172.20.1.0/24 to 192.168.10.15 in recv vlan201
00050  73099255  66003453169 allow ip from 10.0.0.0/24,172.20.0.0/19,172.16.0.0/19,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24 to me keep-state
00051         0            0 allow ip from me to 10.0.0.0/24,172.20.0.0/19,172.16.0.0/19,172.17.12.0/22,192.168.168.0/24,192.168.10.0/24
00200        48         2272 allow ip from 192.168.10.0/24 to 192.168.10.0/24 via ng* keep-state
...skip....
В выводе ipfw show нет правил №№100 и 150, а пакеты переправлялись на nat именно в этих правилах. Возможно правила (в загружающем скрипте) содержат ошибки и ipfw их не принимает.
Приведите скрипт, которым загружаете правила.

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-21 3:21:30
k0ma
эти правила закоментированы, так как они не работают, и нат соответственно не пашет. Ipnat сейчас юзаю, но хочу ipfw nat!!

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

#local
${ipfw} add 10 allow icmp from any to any
${ipfw} add 10 allow all from any to any via lo0
${ipfw} add 10 deny all from any to 127.0.0.0/8
${ipfw} add 10 deny all from 127.0.0.0/8 to any

#perfilovvy
${ipfw} add 11 allow all from me to any keep-state
${ipfw} add 12 allow all from 172.17.12.236/32 to me keep-state via vlan1

#NAT from
${ipfw} nat 1 config if vlan201 same_ports
${ipfw} add 13 skipto 100 ip from 192.168.10.15/32 to 172.20.1.0/24 out xmit vlan201
${ipfw} add 14 skipto 150 ip from 172.20.1.0/24 to 192.168.10.15/32 in recv vlan201

#vse ko mne
${ipfw} add 50 allow all from ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn} to me keep-state
${ipfw} add 51 allow all from me to ${vlan20},${vlans200},${usernet},${worknet},${bibl},${vpn}
#${ipfw} add 100 nat 1 ip from 192.168.10.15/32 to 172.20.1.0/24 xmit vlan201
#${ipfw} add 150 nat 1 ip from 172.20.1.0/24 to 192.168.10.15/32 recv vlan201

ipfw nat, чтото не так с порядком правил.

Добавлено: 2015-08-21 6:00:52
Dirty.Eager
k0ma писал(а):эти правила закоментированы, так как они не работают, и нат соответственно не пашет. Ipnat сейчас юзаю, но хочу ipfw nat!!
Поставьте эти два правила вместо 13-го и 14-го, вот так:

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

#local
#NAT from
${ipfw} nat 1 config if vlan201 same_ports
${ipfw} add 13 nat 1 ip from 192.168.10.15/32 to 172.20.1.0/24 xmit vlan201
${ipfw} add 14 nat 1 ip from 172.20.1.0/24 to 192.168.10.15/32 recv vlan201
#${ipfw} add 13 skipto 100 ip from 192.168.10.15/32 to 172.20.1.0/24 out xmit vlan201
#${ipfw} add 14 skipto 150 ip from 172.20.1.0/24 to 192.168.10.15/32 in recv vlan201
Каким образом проверяете работоспособность nat-а? Откуда, что пингуете?