The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"NAT работает в одну сторону"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Информационная безопасность (Public)
Изначальное сообщение [Проследить за развитием треда]

"NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 30-Мрт-07, 11:23 
поставил FReeBSD 6.2.
скомпилировал ядро с опциями
options         IPFIREWALL
options         IPFIREWALL_FORWARD
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPDIVERT
options         TCP_DROP_SYNFIN
options         DUMMYNET

в RC.conf добавил
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="ISP"

natd_enable="YES"
natd_interface="tun0"
natd_flags="-f /etc/natd.conf"

firewall_enable="YES"
firewall_script="/etc/rc_ppp.firewall"

в ppp.conf
default:
set log phase tun command
set mru 1492
set mtu 1492

ISP:
set device PPPoE:ed0
set authname MYNAME
set authkey MYPASS

в natd.conf
dynamic yes
log yes
deny_incoming yes
same_ports yes
use_sockets yes
unregistered_only yes

в rc_ppp.firewall
#!/bin/sh
#
fwcmd="/sbin/ipfw -q"
Lan_0_IP="192.168.20.4"
Lan_0="192.168.20.0"
MASK="24"
Lan_0="ed2"
${fwcmd} -f flush

${fwcmd} add 1 divert natd ip from ${Lan_0}/${MASK} to any out via tun0
${fwcmd} add 2 divert natd ip from any to me in via tun0
${fwcmd} add 3 allow all from any to any

Соединение с провайдером PPPoE IP - динамический
соединение поднимается - TCPDUMP говорит что с tun0 пакеты уходят с назначенного IP (НАТ работает) и возвращаются ответы. НО больше ИХ НИГДЕ НЕ ВИДНО - ни на внутреннем интерфейсе  - нигде, не работает с сервера ни пинг ни ДНС. Если убрать правило 2 в rc_ppp.firewall (${fwcmd} add 2 divert natd ip from any to me in via tun0), тогда ping, днс, сквид, начинают работать, но НАТ соответсвенно работать без него не будет.

ЧТО ПОДСКАЖУТ ГУРУ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "NAT работает в одну сторону"  
Сообщение от DN (ok) on 30-Мрт-07, 15:54 
>поставил FReeBSD 6.2.
>скомпилировал ядро с опциями

>options         IPDIVERT

>в RC.conf добавил
>ppp_enable="YES"
>ppp_mode="ddial"
>ppp_profile="ISP"

У ppp свой NAT, он точно выключен?

>в ppp.conf
>default:
> set log phase tun command
> set mru 1492
> set mtu 1492
>
>ISP:
> set device PPPoE:ed0
> set authname MYNAME
> set authkey MYPASS

>в rc_ppp.firewall
>#!/bin/sh
>#
>fwcmd="/sbin/ipfw -q"
>Lan_0_IP="192.168.20.4"
>Lan_0="192.168.20.0"
>MASK="24"
>Lan_0="ed2"
^^^^^^^^^^^^^
Тут не ошибка?
echo $Lan_0
Посмотри ipfw show .

>${fwcmd} -f flush
>
>${fwcmd} add 1 divert natd ip from ${Lan_0}/${MASK} to any out via
>tun0
>${fwcmd} add 2 divert natd ip from any to me in via
>tun0
>${fwcmd} add 3 allow all from any to any
>
>Соединение с провайдером PPPoE IP - динамический
>соединение поднимается - TCPDUMP говорит что с tun0 пакеты уходят с назначенного
>IP (НАТ работает) и возвращаются ответы. НО больше ИХ НИГДЕ НЕ
>ВИДНО - ни на внутреннем интерфейсе  - нигде, не работает
>с сервера ни пинг ни ДНС. Если убрать правило 2 в
>rc_ppp.firewall (${fwcmd} add 2 divert natd ip from any to me
>in via tun0), тогда ping, днс, сквид, начинают работать, но НАТ
>соответсвенно работать без него не будет.

>ЧТО ПОДСКАЖУТ ГУРУ?

Зачем два правила divert?

${fwcmd} add 100 pass all from any to any via lo0    
${fwcmd} add 200 deny all from any to 127.0.0.0/8
${fwcmd} add 300 deny ip  from 127.0.0.0/8 to any    
...
${fwcmd} add  divert natd ip from any to any via tun0
...
Что посылать через tun0, определяешь таблицей роутинга.

Включи лог на divert правила и посмотри , что туда попадает.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 30-Мрт-07, 21:26 
>
>У ppp свой NAT, он точно выключен?
>
на всякий пожарный
ppp_nat="NO"

>Тут не ошибка?
>echo $Lan_0
>Посмотри ipfw show .
Да - это я в в сообщении ошибся - там Net_0
>
>>${fwcmd} -f flush
>>
>>${fwcmd} add 1 divert natd ip from ${Net_0}/${MASK} to any out via
>>tun0
>>${fwcmd} add 2 divert natd ip from any to me in via
>>tun0
>>${fwcmd} add 3 allow all from any to any
>>
>>Соединение с провайдером PPPoE IP - динамический
>>соединение поднимается - TCPDUMP говорит что с tun0 пакеты уходят с назначенного
>>IP (НАТ работает) и возвращаются ответы. НО больше ИХ НИГДЕ НЕ
>>ВИДНО - ни на внутреннем интерфейсе  - нигде, не работает
>>с сервера ни пинг ни ДНС. Если убрать правило 2 в
>>rc_ppp.firewall (${fwcmd} add 2 divert natd ip from any to me
>>in via tun0), тогда ping, днс, сквид, начинают работать, но НАТ
>>соответсвенно работать без него не будет.
>
>>ЧТО ПОДСКАЖУТ ГУРУ?
>
>Зачем два правила divert?
>

${fwcmd} add  divert natd ip from any to any via tun0
В таком случае не проходит ни почта ни нттр "напрямую"

Пробовал так
${fwcmd} add 1 divert natd ip from ${Net_0}/${MASK} to any out via tun0
${fwcmd} add 2 divert natd ip from any 25,110 to me in via via tun0
Почта заработала,
попробовал завернуть и НТТР:
${fwcmd} add 2 divert natd ip from any 25,110,80 to me in via tun0
Перестал работать сквид - т.е. нат перехватывает все пакеты -и свои и чужие, но потом чужие не пропускает...

:-(  не знаю где искать логи NATD...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 31-Мрт-07, 15:50 
лог нашел \var\log\seсurity

в правила файрволла включил такую конструкцию:

#NAT
${fwcmd} add divert natd ip from ${Net_0}/${Mask_0} to any 25,110 out xmit ${LanOut_0}
${fwcmd} add divert natd ip from any 25,110 to me in via ${LanOut_0}
${fwcmd} add divert natd tcp from 192.168.20.1 to any 80 out xmit ${LanOut_0}
${fwcmd} add divert natd log tcp from any 80 to me in via ${LanOut_0}
${fwcmd} add  allow all from any to any

192.168.20.1 - адрес моей машины за файрволлом

Почта работает, НТТР напрямую(80) тоже, СКВИД не хочет,
смотрю логи - в них пакеты, переданные в ответ на НТТР напрямую (80 порт).
То, что идет в ответ на СКВИД в лог не попадает. tcpdump -ni tun0 port 80 показывает, что все пакеты (и на СКВИД, и на НАТ) приходят.

Что посоветуете?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "NAT работает в одну сторону"  
Сообщение от DN (ok) on 02-Апр-07, 14:00 
>в правила файрволла включил такую конструкцию:
>
>#NAT
>${fwcmd} add divert natd ip from ${Net_0}/${Mask_0} to any 25,110 out xmit
>${LanOut_0}
>${fwcmd} add divert natd ip from any 25,110 to me in via
>${LanOut_0}
>${fwcmd} add divert natd tcp from 192.168.20.1 to any 80 out xmit
>${LanOut_0}
>${fwcmd} add divert natd log tcp from any 80 to me in
>via ${LanOut_0}
>${fwcmd} add  allow all from any to any
>
>192.168.20.1 - адрес моей машины за файрволлом
>
>Почта работает, НТТР напрямую(80) тоже, СКВИД не хочет,
>смотрю логи - в них пакеты, переданные в ответ на НТТР напрямую
>(80 порт).
>То, что идет в ответ на СКВИД в лог не попадает. tcpdump
>-ni tun0 port 80 показывает, что все пакеты (и на СКВИД,
>и на НАТ) приходят.
>
>Что посоветуете?

Продолжить разбираться с правилами forward ( ipfw ) для СКВИД , как Вы
это успешно делали в предыдущем сообщении.
Приходят ли запросы на СКВИД , отправляется ли СКВИД свои запросы во
внешний мир через nat и tun0 , как все это вовращается обратно.

Больше половины работы Вы уже сделали.
Удачи!
  

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 02-Апр-07, 18:25 
>Продолжить разбираться с правилами forward ( ipfw ) для СКВИД , как
>Вы
>это успешно делали в предыдущем сообщении.
>Приходят ли запросы на СКВИД , отправляется ли СКВИД свои запросы во
>
>внешний мир через nat и tun0 , как все это вовращается обратно.
>
>Больше половины работы Вы уже сделали.
>Удачи!
>
Больше половины сделал - это приятно, но еще чуть меньше половины осталось...
пока не включаю второе правило нат на прием пакетов- сквид работает, как включу - отключается. где еще посмотреть - не представляю.
Сквид слушает адрес сетевой карты типа 192.168.20.4:3128
tcpdump на внешнем tun0 интерфейсе показывает что все нормально - все уходит, все приходит,
tcpdump внутри на ed2 только в одну сторону от меня на 192.168.20.4
три правила в файрволе - запутаться же не где...
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "NAT работает в одну сторону"  
Сообщение от DN (ok) on 03-Апр-07, 12:41 
>>Продолжить разбираться с правилами forward ( ipfw ) для СКВИД , как
>>Вы
>>это успешно делали в предыдущем сообщении.
>>Приходят ли запросы на СКВИД , отправляется ли СКВИД свои запросы во
>>
>>внешний мир через nat и tun0 , как все это вовращается обратно.
>>
>>Больше половины работы Вы уже сделали.
>>Удачи!
>>
>Больше половины сделал - это приятно, но еще чуть меньше половины осталось...
>
>пока не включаю второе правило нат на прием пакетов- сквид работает, как
>включу - отключается. где еще посмотреть - не представляю.
>Сквид слушает адрес сетевой карты типа 192.168.20.4:3128
>tcpdump на внешнем tun0 интерфейсе показывает что все нормально - все уходит,
>все приходит,
>tcpdump внутри на ed2 только в одну сторону от меня на 192.168.20.4
>
>три правила в файрволе - запутаться же не где...

Уверяю Вас, можно запутаться и в одном правиле ipfw.
Советую, внимательно почитать, как работают правила ipfw в man ipfw или
в переводе на этом сайте.
Обратите внимание, что любой пакет проверяется в правилах ipfw, когда
приходит на интерфейс, и когда уходит с интерфейса.
Вы написали много правил divert. В вашем случае, это совершенно лишнее.
У вас только один tun0 интерфейс, чьи пакеты надо divert'ить на natd,
при чем, как входящие, так и исходящие с tun0.

...
${fwcmd} add  divert natd ip from any to any via tun0
...

Зачем Вам divert'ить пакеты to me ?
me      matches any IP address configured on an interface in the system.
        The address list is evaluated at the time the packet is analysed.

Пакет обработаный natd снова попадает в ipfw, как исходящий с какого
либо интерфейса.

Посмотрите таблицу роутинга netstat -rn для tun0 .
default должен указывать на IP PPPoE для tun0.

СКВИД с какого IP адреса делает запросы во внешний мир?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 03-Апр-07, 13:55 
>${fwcmd} add  divert natd ip from any to any via tun0
>Зачем Вам divert'ить пакеты to me ?
>me      matches any IP address configured on
>an interface in the system.
>        The address list is
>evaluated at the time the packet is analysed.
>
>Пакет обработаный natd снова попадает в ipfw, как исходящий с какого
>либо интерфейса.
>
>Посмотрите таблицу роутинга netstat -rn для tun0 .
>default должен указывать на IP PPPoE для tun0.
>
>СКВИД с какого IP адреса делает запросы во внешний мир?

Полностью с Вами согласен. 5 лет у меня машина работала с похожими правилами, только вместо ME был IP - тогда подключение было с реальным IP. Сейчас ситуация другая - IP динамический. Провайдер (или АТС) рвет линию где-то раз в 3 часа. Мой скрипт автоматом проверяет состояние канала и "передергивает" соединение. Практически каждый раз после этого IP на tun0 меняется. Можно, конечно, написать еще один скрипт и менять строчку правил IPFW с дивертом, но, на мой взгляд, это не совсем правильно. Неужели natd нельзя привязать к динамичемкому интерфейсу? (ключ dynamic в natd.conf включен - не помогает)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 03-Апр-07, 15:36 
>>СКВИД с какого IP адреса делает запросы во внешний мир?
>
Забыл добавить - СКВИД дает запросы во внешний мир с того IP, который на tun0 (по-моему так и должно быть). Это не зависит от того включен ДИВЕРТ или нет. правил с ФОРВАРДОМ нет - в настройках сквида указано слушать на адресе сетевухи локальной сети.
В дополнение - поднял рядом с IPFW еще и PF. Отключил в rc.conf и в правилах файлвола NATD вообще.
сделал NAT средствами PF nat on $ext_if0 from $int_if:network to any -> ($ext_if0)
все завязалось сразу "на ура". Думаю постепенно мигрировать с IPFW на PF. только вот у меня стояла связка (IPFW правила count + MRTG) для подсчета трафика. Не знаю пока как это реализовать на PF.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 03-Апр-07, 21:39 
Кстати, вопрос: для компиляции ядра под PF нужны опции:

options         IPFIREWALL
options         IPFIREWALL_FORWARD
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPDIVERT

Или их можно убрать, достаточно будет и

options         ALTQ
device          pf
device          pflog
device          pfsync

?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "NAT работает в одну сторону"  
Сообщение от DN (??) on 04-Апр-07, 12:49 
>>>СКВИД с какого IP адреса делает запросы во внешний мир?
>>
>Забыл добавить - СКВИД дает запросы во внешний мир с того IP,
>который на tun0 (по-моему так и должно быть). Это не зависит
>от того включен ДИВЕРТ или нет. правил с ФОРВАРДОМ нет -
>в настройках сквида указано слушать на адресе сетевухи локальной сети.

СКВИД слушает 3128 на 192.169.20.4 , нормально.
ФОРВАРД для принудительноего  http(s) проксирования сети 192.168.20.0 используют.
СКВИД делает запросы во внешний мир с адреса 192.168.20.4 .
Все это натится и уходить с адресом tun0 во внешний мир.
В обратном порядке возвращается.  

>В дополнение - поднял рядом с IPFW еще и PF. Отключил в
>rc.conf и в правилах файлвола NATD вообще.
>сделал NAT средствами PF nat on $ext_if0 from $int_if:network to any -> ($ext_if0)
>все завязалось сразу "на ура". Думаю постепенно мигрировать с IPFW на PF.
>только вот у меня стояла связка (IPFW правила count + MRTG)
>для подсчета трафика. Не знаю пока как это реализовать на PF.

Вольному - воля.
Если меньше ошибок наделаете с PF, валяйте.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "NAT работает в одну сторону"  
Сообщение от DN (??) on 04-Апр-07, 12:33 
>>${fwcmd} add  divert natd ip from any to any via tun0
>>Зачем Вам divert'ить пакеты to me ?
>>me      matches any IP address configured on
>>an interface in the system.
>>        The address list is
>>evaluated at the time the packet is analysed.

>Полностью с Вами согласен. 5 лет у меня машина работала с похожими
>правилами, только вместо ME был IP - тогда подключение было с
>реальным IP. Сейчас ситуация другая - IP динамический. Провайдер (или АТС)

ME - любые IP , которые сконфигурены на интерфейсах , в том числе и 192.168.20.4 .
А Вы ${fwcmd} add divert natd log from any 80 to me in via ${LanOut_0} , где
логика?
ME - это целый список адресов.

И разницы ни какой нет, динамические это адреса или статические ,
публичные или приватные.

>рвет линию где-то раз в 3 часа. Мой скрипт автоматом проверяет
>состояние канала и "передергивает" соединение. Практически каждый раз после этого IP
>на tun0 меняется. Можно, конечно, написать еще один скрипт и менять
>строчку правил IPFW с дивертом, но, на мой взгляд, это не
>совсем правильно. Неужели natd нельзя привязать к динамичемкому интерфейсу? (ключ dynamic
>в natd.conf включен - не помогает)

Пусть меняется IP на tun0  .
Запустите с опциями "natd -dynamic -n tun0"   и все .
СКВИД отбиндьте на адрес 192.168.20.4 (ed2) . Пусть он там слушает порт 3128 и делает
свои запросы во внешний мир.  

Не надо менять правила IPFW с divert для
${fwcmd} add divert natd from any to any via tun0
, если меняется IP на tun0.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "NAT работает в одну сторону"  
Сообщение от DN (ok) on 04-Апр-07, 12:59 
>
>Не надо менять правила IPFW с divert для
>${fwcmd} add divert natd from any to any via tun0
>, если меняется IP на tun0.

Вдогонку.

Последним правилом в IPFW напишите :
${fwcmd} deny log ip from any to any
и посмотрите куда пакеты деваются.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 04-Апр-07, 13:04 

>ME - любые IP , которые сконфигурены на интерфейсах , в том
>числе и 192.168.20.4 .
>А Вы ${fwcmd} add divert natd log from any 80 to me
>in via ${LanOut_0} , где
>логика?
>ME - это целый список адресов.
>
>И разницы ни какой нет, динамические это адреса или статические ,
>публичные или приватные.
ME поставил, потому что на знал, что поставить взамен реального.

>Пусть меняется IP на tun0  .
>Запустите с опциями "natd -dynamic -n tun0"   и все .
>
>СКВИД отбиндьте на адрес 192.168.20.4 (ed2) . Пусть он там слушает порт
>3128 и делает свои запросы во внешний мир.
Да, он так и стоит по жизни, так и работает

>Не надо менять правила IPFW с divert для
>${fwcmd} add divert natd from any to any via tun0
>, если меняется IP на tun0.
По логике правило ${fwcmd} add divert natd from any to any via tun0
содержит в себе   ${fwcmd} add divert natd from any to me via tun0.
неужели адреса ME не попадут в ANY ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "NAT работает в одну сторону"  
Сообщение от DN (ok) on 04-Апр-07, 14:29 
>ME поставил, потому что на знал, что поставить взамен реального.

"Не знал", батенька, тут не катит.

>>Пусть меняется IP на tun0  .
>>Запустите с опциями "natd -dynamic -n tun0"   и все .
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Это запустили ?

>>СКВИД отбиндьте на адрес 192.168.20.4 (ed2) . Пусть он там слушает порт
>>3128 и делает свои запросы во внешний мир.
>Да, он так и стоит по жизни, так и работает

Очень хорошо.
Посмотрите для проверки netstat -an  , порт 3128.

>>Не надо менять правила IPFW с divert для
>>${fwcmd} add divert natd from any to any via tun0
>>, если меняется IP на tun0.
>По логике правило ${fwcmd} add divert natd from any to any via
>tun0
>содержит в себе   ${fwcmd} add divert natd from any to
>me via tun0.
>неужели адреса ME не попадут в ANY ?

Попадут адреса ME в ANY, но Вы плохо не прочитали man ipfw .
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Смотрите, любой пакет из сети 192.168.0.0 ,
который направляется из роутера через tun0 во внешний мир, должен попасть в правило
${fwcmd} add divert natd from any to any via tun0 .

Ваше  ${fwcmd} add divert natd from any to me via tun0 , здесь не подойдет.

Пронатиться natd, если надо ( это устанавливается в natd.conf ).
natd натит пакеты, которые ему поставляет ipfw через divert.
После этого пакет отправляется во внешний мир через tun0 с публичным src адресом.

Обратно из внешнего мира на вход tun0  приходит пакет с любым src адресом и dst
IP адресом для tun0.
Он снова должен попасть в это же правило, как входящий пакет.
${fwcmd} add divert natd from any to any via tun0 .
  
Пронатиться natd  ( изменитьcя dst IP)  и следовать на выход ed2 , например.
Перед тем как покинуть ed2, пакет еще раз должен пройти все правила IPFW, как
исходящий, но уже не попасть в
${fwcmd} add divert natd from any to any via tun0 .

Еще раз прочитайте man ipfw в переводе на этом сайте на предмет идеологии работы
IPFW.

В конце поставьте
deny log ip from any to any


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "NAT работает в одну сторону"  
Сообщение от Sergetv (??) on 05-Апр-07, 12:11 
>${fwcmd} add divert natd from any to any via tun0 .

Да, спасибо большое. поставил, проверил - работает так как надо.
Но я уже "ощутил вкус" PF - правила пишутся изящнее, хотя в принципе чего-то, чего нельзя реализовать на IPFW я пока не встретил. Как по надежности и скорости работы не знаю - погоняю, посмотрю. Может есть отзывы? В IPFW оставлю пока только правила count сбора статистики и связки с MRTG. Конечно, гонять пакеты через 2 файрвола не есть "гуд" по скорости, я думаю, но пока не найду как MRTG статистику к PF останется так, тем более машин в сети до 50, тормозить сильно не будет. Еще раз спасибо за помощь


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру