2012-03-21 4 views
0

Я хотел бы сделать свое собственное приложение NAT для пользовательского режима.Как написать NAT в пользовательском режиме без привязки порта?

У меня есть на следующие схемы:

VM2 [192.168. 8.2] ------ [192.168. 8.1] Win2003 [192.168. 9.1] ------ [192.168. 9.2] VM1

VM3 [192.168. 8.3] _/

VM4 [192.168. 8,4] _/

  1. Я захватывая RAW IP-пакеты на 8.1 и 9.1 интерфейсов.
  2. Некоторые пакеты из 8.1 переносятся на 9.1 интерфейс таким образом: 8.2-> 9.2 заменен на 9.1-> 9.2
  3. Некоторые пакеты от 9.1 передаются на 8.1 интерфейс таким образом: 9.2-> 9.1 заменен 9.2-> 8.2

Мое приложение не связывает никаких портов вообще - оно захватывается только с интерфейсов.

Я видел этот сценарий:

  1. 8.2-> 9.2 переведенный в 9.1-> 9.2 содержит SYN пометка
  2. 9.2-> 9.1 переводилась на 9.2-> 8.2 containt SYN + ACK флаги
  3. И шаг 2 содержит 9.1-> 9.2 с флагом RST ...

Windows Server 2003 сбрасывает мое NAT-соединение. Я вообще не хочу связывать любые порты.

Как я могу справиться с этим?

UPDATE:

user1202136, как это возможно:

Использование брандмауэра Windows, чтобы блокировать RST пакеты из портов ваш пользовательского пространства NAT использует.

без написания собственного драйвера NDIS?

ответ

5

Согласно спецификации TCP, RST всегда отправляется, когда ACK (или SYN + ACK) принимается на порт, который не связан с каким-либо процессом. Это делается для обеспечения надежного обнаружения сбоев узлов.

В вашем случае это реализация TCP/IP в Windows Server 2003, которая генерирует пакет RST. Вы должны либо запретить ACK достичь уровня TCP, либо заблокировать RST от проводов.Вы можете попробовать сделать это несколькими способами:

  1. Отключить TCP (но не IP) на своих интерфейсах.
  2. Использование брандмауэра Windows для блокировки пакетов RST из портов, используемых NAT вашего пользователя.
  3. (Не уверен, что это работает) Используйте брандмауэр Windows, чтобы заблокировать все TCP-пакеты для портов, которые использует пользовательское пространство NAT. Я боюсь, что это также заблокировало бы пакеты от доступа к вашему гнезду RAW.
+2

+1, правильная спецификация, правильный способ отфильтровывать сомнительные пакеты 'RST'. О, я люблю воспоминания о том, когда люди впервые начали делать это, чтобы их интернет-провайдеры не убивали своих загрузок ... \ * shakes cane \ * – MrGomez

+1

... или если вы хотите добавить компонент, отличный от usermode, вы можете создайте промежуточный драйвер NDIS для удаления пакета RST, который вы не хотите видеть стек TCP (ов). – Kimvais

+0

Я только что обновил свой вопрос, спасибо за ваши респирации! – k06a

Смежные вопросы