Home › Forums › Discussions › General › NAT
- This topic has 7 replies, 2 voices, and was last updated 18 years, 10 months ago by ByTE.
-
AuthorPosts
-
February 1, 2006 at 8:58 am #4984
Хочу сделать NAT.
При трансляции адресов/портов я должен менять еще и исходный МАС и МАС назначения. Все это не проблема, только не знаю, как сделать правильней с МАС-ом назначения:
1 вариант:
Брать МАС назначения из ARP-таблицы системы, если мака для нужного IP нет, тогда ставим МАС гейта по-умолчанию для интерфейса, через который предполагается отправить пакет. Но ведь в системной таблице ARP может не оказаться нужного МАС-а? В том смысле, что таблица динамическая и меняется на лету.2 вариант:
То-же самое, только брать МАС не из ARP-таблицы системы, а держать свою ARP-таблицу и поддерживать ее в актуальном состоянии при помощи ARP-запросов.3 вариант:
предложите свой вариант.Кто вообще в курсе, как правильно сделать? Уважаемый SerpentFly, может подскажете, как это сделано в Internet Gateway?
Благодарю за помощь.
February 2, 2006 at 10:43 am #5930В общем-то нет необходимости менять MAC адреса в случае реализации NAT (если это не MAC NAT конечно). В Internet Gateway задачи маршрутизации (и постановки нужных MAC адресов) возлагаются на стек, мы меняем тока адреса источника.
February 6, 2006 at 6:05 am #5931Спасибо за ответ.
Надо попроборвать.
Я просто считал, что стек выплюнет входящий пакет, где адрес источника его собственный.February 6, 2006 at 1:03 pm #5932Вот попробовал, ничего не выходит…
Я перехватываю входящий пакет, где исходный IP равен адресу машины в локальной сети, а адрес назначения равен адресу в Интернет. Меняю исходный IP на IP внешнего интерфейса и передаю в стек. И ничего… Стек игнорирует пакет!
Сам процесс подмены IP отработан, контрольные суммы рассчитываются корректно и т. д.
А если я перехватываю пакет, меняю исходный МАС и IP, ставлю МАС назначения равным МАС-у шлюза и пуляю пакет во внешний интерфейс, то все работает без проблем.
Что я делаю не так, кто подскажет?February 7, 2006 at 3:48 am #5933Я перехватываю входящий пакет, где исходный IP равен адресу машины в локальной сети, а адрес назначения равен адресу в Интернет. Меняю исходный IP на IP внешнего интерфейса и передаю в стек. И ничего… Стек игнорирует пакет!
1) Включи IP маршрутизацию (ключ в реестре плюс перезагрузка).
2) Исходящий пакет перехватываем на внешнем (интернет-интерфейсе, туда его отроутит стек), маки там уже правильные, нужно только подменить IP/порт источника иначе пакет не уйдет далеко.
3) Для входящих так же на внешнем интерфейсе восстанавливаем IP/порт источника на адрес в локальной сети.Все крайне просто…
February 7, 2006 at 7:07 am #5934Тесты проводились на win200server с запущенной службой “Маршрутизация и удаленный доступ”.
Маршрутизация в реестре включена:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersIPEnableRouter=1
Не делая ничего с пакетами, просто пингую внешний хост из локальной сети. Сниффер показавает, что пакет приходит на внутренний интерфейс, но не выходит через внешний. Т. е. стек почему-то не форвардит пакеты наружу.
Может у win200server другая логика роутинга, чем у NT/XP?
Кто сталкивался с такой проблемой? В чем может быть дело?February 7, 2006 at 7:35 am #5935Скорее всего проблема в каком-нить софте, больше не видя системы ничего сказать не могу…
February 7, 2006 at 8:41 am #5936Будем ковырять…
Спасибо за ответы. -
AuthorPosts
- You must be logged in to reply to this topic.