Как написать пользовательский режим NAT без каких-либо привязки порта? - PullRequest
0 голосов
/ 21 марта 2012

Я хотел бы создать собственное приложение 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. I 'm захват пакетов IP RAW на интерфейсах 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

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

Iвидел такой сценарий:

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

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

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

ОБНОВЛЕНИЕ:

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

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

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

1 Ответ

5 голосов
/ 29 марта 2012

Согласно спецификации 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.
...