The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
NAT работает в одну сторону, !*! Sergetv, 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, днс, сквид, начинают работать, но НАТ соответсвенно работать без него не будет.

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

  • NAT работает в одну сторону, !*! DN, 15:54 , 30-Мрт-07 (1)
    >поставил 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 правила и посмотри , что туда попадает.

    • NAT работает в одну сторону, !*! Sergetv, 21:26 , 30-Мрт-07 (2)
      >
      >У 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...

      • NAT работает в одну сторону, !*! Sergetv, 15:50 , 31-Мрт-07 (3)
        лог нашел \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 показывает, что все пакеты (и на СКВИД, и на НАТ) приходят.

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

        • NAT работает в одну сторону, !*! DN, 14:00 , 02-Апр-07 (4)
          >в правила файрволла включил такую конструкцию:
          >
          >#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 , как все это вовращается обратно.

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

          • NAT работает в одну сторону, !*! Sergetv, 18:25 , 02-Апр-07 (5)
            >Продолжить разбираться с правилами forward ( ipfw ) для СКВИД , как
            >Вы
            >это успешно делали в предыдущем сообщении.
            >Приходят ли запросы на СКВИД , отправляется ли СКВИД свои запросы во
            >
            >внешний мир через nat и tun0 , как все это вовращается обратно.
            >
            >Больше половины работы Вы уже сделали.
            >Удачи!
            >
            Больше половины сделал - это приятно, но еще чуть меньше половины осталось...
            пока не включаю второе правило нат на прием пакетов- сквид работает, как включу - отключается. где еще посмотреть - не представляю.
            Сквид слушает адрес сетевой карты типа 192.168.20.4:3128
            tcpdump на внешнем tun0 интерфейсе показывает что все нормально - все уходит, все приходит,
            tcpdump внутри на ed2 только в одну сторону от меня на 192.168.20.4
            три правила в файрволе - запутаться же не где...
            • NAT работает в одну сторону, !*! DN, 12:41 , 03-Апр-07 (6)
              >>Продолжить разбираться с правилами 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 адреса делает запросы во внешний мир?


              • NAT работает в одну сторону, !*! Sergetv, 13:55 , 03-Апр-07 (7)
                >${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 включен - не помогает)


                • NAT работает в одну сторону, !*! Sergetv, 15:36 , 03-Апр-07 (8)
                  >>СКВИД с какого 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.


                  • NAT работает в одну сторону, !*! Sergetv, 21:39 , 03-Апр-07 (9)
                    Кстати, вопрос: для компиляции ядра под PF нужны опции:

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

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

                    options         ALTQ
                    device          pf
                    device          pflog
                    device          pfsync

                    ?

                  • NAT работает в одну сторону, !*! DN, 12:49 , 04-Апр-07 (11)
                    >>>СКВИД с какого 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, валяйте.


                • NAT работает в одну сторону, !*! DN, 12:33 , 04-Апр-07 (10)
                  >>${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.

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

                    Вдогонку.

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

                  • NAT работает в одну сторону, !*! Sergetv, 13:04 , 04-Апр-07 (13)

                    >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 ?

                    • NAT работает в одну сторону, !*! DN, 14:29 , 04-Апр-07 (14)
                      >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


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

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





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

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