NAT

Home Forums Discussions General NAT

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #4984
    ByTE
    Participant

      Хочу сделать NAT.
      При трансляции адресов/портов я должен менять еще и исходный МАС и МАС назначения. Все это не проблема, только не знаю, как сделать правильней с МАС-ом назначения:
      1 вариант:
      Брать МАС назначения из ARP-таблицы системы, если мака для нужного IP нет, тогда ставим МАС гейта по-умолчанию для интерфейса, через который предполагается отправить пакет. Но ведь в системной таблице ARP может не оказаться нужного МАС-а? В том смысле, что таблица динамическая и меняется на лету.

      2 вариант:
      То-же самое, только брать МАС не из ARP-таблицы системы, а держать свою ARP-таблицу и поддерживать ее в актуальном состоянии при помощи ARP-запросов.

      3 вариант:
      предложите свой вариант.

      Кто вообще в курсе, как правильно сделать? Уважаемый SerpentFly, может подскажете, как это сделано в Internet Gateway?

      Благодарю за помощь.

      #5930
      Vadim Smirnov
      Keymaster

        В общем-то нет необходимости менять MAC адреса в случае реализации NAT (если это не MAC NAT конечно). В Internet Gateway задачи маршрутизации (и постановки нужных MAC адресов) возлагаются на стек, мы меняем тока адреса источника.

        #5931
        ByTE
        Participant

          Спасибо за ответ.
          Надо попроборвать.
          Я просто считал, что стек выплюнет входящий пакет, где адрес источника его собственный.

          #5932
          ByTE
          Participant

            Вот попробовал, ничего не выходит…
            Я перехватываю входящий пакет, где исходный IP равен адресу машины в локальной сети, а адрес назначения равен адресу в Интернет. Меняю исходный IP на IP внешнего интерфейса и передаю в стек. И ничего… Стек игнорирует пакет!
            Сам процесс подмены IP отработан, контрольные суммы рассчитываются корректно и т. д.
            А если я перехватываю пакет, меняю исходный МАС и IP, ставлю МАС назначения равным МАС-у шлюза и пуляю пакет во внешний интерфейс, то все работает без проблем.
            Что я делаю не так, кто подскажет?

            #5933
            Vadim Smirnov
            Keymaster

              Я перехватываю входящий пакет, где исходный IP равен адресу машины в локальной сети, а адрес назначения равен адресу в Интернет. Меняю исходный IP на IP внешнего интерфейса и передаю в стек. И ничего… Стек игнорирует пакет!

              1) Включи IP маршрутизацию (ключ в реестре плюс перезагрузка).
              2) Исходящий пакет перехватываем на внешнем (интернет-интерфейсе, туда его отроутит стек), маки там уже правильные, нужно только подменить IP/порт источника иначе пакет не уйдет далеко.
              3) Для входящих так же на внешнем интерфейсе восстанавливаем IP/порт источника на адрес в локальной сети.

              Все крайне просто…

              #5934
              ByTE
              Participant

                Тесты проводились на win200server с запущенной службой “Маршрутизация и удаленный доступ”.
                Маршрутизация в реестре включена:
                HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersIPEnableRouter=1
                Не делая ничего с пакетами, просто пингую внешний хост из локальной сети. Сниффер показавает, что пакет приходит на внутренний интерфейс, но не выходит через внешний. Т. е. стек почему-то не форвардит пакеты наружу.
                Может у win200server другая логика роутинга, чем у NT/XP?
                Кто сталкивался с такой проблемой? В чем может быть дело?

                #5935
                Vadim Smirnov
                Keymaster

                  Скорее всего проблема в каком-нить софте, больше не видя системы ничего сказать не могу…

                  #5936
                  ByTE
                  Participant

                    Будем ковырять…
                    Спасибо за ответы.

                  Viewing 8 posts - 1 through 8 (of 8 total)
                  • You must be logged in to reply to this topic.