NAT

This topic contains 7 replies, has 2 voices, and was last updated by  ByTE 11 years, 8 months ago.

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
    Moderator

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

    #5931

    ByTE
    Participant

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

    #5932

    ByTE
    Participant

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

    #5933

    Vadim Smirnov
    Moderator

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

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

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

    #5934

    ByTE
    Participant

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

    #5935

    Vadim Smirnov
    Moderator

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

    #5936

    ByTE
    Participant

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

Viewing 8 posts - 1 through 8 (of 8 total)

You must be logged in to reply to this topic.