Использование TUN / TAP для чтения входящих данных, инкапсуляции как UDP и передачи - PullRequest
2 голосов
/ 26 апреля 2011

У меня есть устройство tun / tap, которое используется для чтения входящих пакетов с одного интерфейса и отправки их в виде пакетов UDP через другой интерфейс.Я мог бы реализовать это и мог читать пакеты ICMP, отправленные в интерфейс tun / tap, а также получать их удаленно, используя UDP.Но проблема возникает, когда я пытаюсь изменить шлюз по умолчанию интерфейса ввода на устройство tun / tap, чтобы я мог прочитать все входящие данные из tun / tap.Когда это сделано, я не могу отправить UDP-пакеты, так как маршрутизация не является правильной.

Я также попытался использовать опцию «SO_BINDTODEVICE» в сокете comm, но все еще не работал.Обратите внимание, что я не использовал метод write () в tun / tap.Я просто использовал функцию read (), собирал данные и отправлял их через соединение через сокет UDP.

Пожалуйста, дайте мне знать, если мой подход неверен, или любой другой способ обойти это.Спасибо.

/********More Details********/

Спасибо, Роб.

Я пытаюсь добиться симуляции коммутации заголовков на основе IP (ROHC) в канале с высокой задержкой.

Дляэто у меня 4 виртуальные машины.VM1 - это обычный настольный компьютер.VM2 - это шлюз, который принимает пакеты с помощью tun / tap (из VM1) и осуществляет связь на основе UDP с VM4.VM3 - это канал, в котором можно установить такие параметры, как задержка, частота ошибок и т. Д.VM4 подключен к глобальной сети.Пользователь в VM1 должен иметь возможность просматривать WAN, как обычно.Пожалуйста, найдите схему ниже.

  IP Packets
  |
  |   +------------------+     +--------------+   +----------------+
  '---|eth1.....         |     |              |   |                |
      |        |         |     |              |   |                |
      |    tun/tap       |     |          eth0|___|UDP Sock    eth0|___
      |        |         |     |              |   |    |       |   |   |
      |        ..UDP Sock|_____|eth1          |   |    |       |   |   |
      |                  |     |              |   |    +tun/tap+   |   '
      +------------------+     +--------------+   +----------------+  WAN
             VM2                 VM3(Channel)             VM4

Обновление:

Спасибо, Томми.Ваше решение сработало.Я мог бы получить пакеты UDP одним способом до конечного шлюза NAT.Но я не мог получить обратный путь к работе до сих пор.Я попытался включить маскарад с помощью iptables, а также настроить маршрут хоста к tuntap на VM1, но он не работал.У меня есть несколько вопросов по этому поводу.1) В VM4 я получаю данные UDP и записываю в tun / tap.Это будет направлено в WAN ядром.Но для входящего пакета, мне снова нужно читать, используя tun / tap?В этом случае мне нужно сделать чтение и запись в разных потоках?Я спрашиваю об этом, потому что мне нужно транспортировать их также как данные UDP.Дайте мне знать, если я что-то здесь упускаю.Еще раз большое спасибо за вашу помощь.

1 Ответ

1 голос
/ 27 апреля 2011

Ваши пакеты udp также будут перенаправлены на ваш интерфейс tuntap. (ну, в зависимости от некоторых настроек они могут быть просто удалены). Вам необходимо добавить правило маршрутизации для однорангового узла udp, которому вы их отправляете, правило хоста или сетевое правило меньшего размера, которые не будут мешать вашему другому общению.

...