Связь интерфейса tun/tap с физическим устройством

Мне не совсем понятно, как работает интерфейс tun/tap. Из Википедии я получил следующее:

Пакеты, отправляемые операционной системой через устройство TUN/TAP, доставляются программе пользовательского пространства, которая присоединяется к устройству. Программа пользовательского пространства также может передавать пакеты на устройство TUN/TAP. В этом случае устройство TUN/TAP доставляет (или «вводит») эти пакеты в сетевой стек операционной системы, эмулируя тем самым их прием из внешнего источника.

Теперь предположим, что я создаю tun с IP 12.12.12.1. Если на этой машине у меня есть два сетевых адаптера, смогу ли я взаимодействовать с этим tun (на 12.12.12.1 IP) с внешнего компьютера (скажем, 12.12.12.2) независимо от того, к какому сетевому адаптеру подключена вторая машина (скажем, eth0 или eth1)?

Другими словами, tun и сетевые карты независимы друг от друга, или вам нужно общаться с tun через конкретную сетевую карту?

Н.Б. Ссылки по теме приветствуются!


person artaxerxe    schedule 10.05.2012    source источник


Ответы (1)


Если вы настроили виртуальную сеть, например. 12.12.12.0/24, который доступен через ваш виртуальный интерфейс, и вы отправляете пакет в эту сеть со своей машины, модуль ядра, реализующий tun/tap, отправит этот пакет из ядра через символьное устройство в ваше приложение. Что делать с этим пакетом, зависит от вашего приложения. Он может быть передан какому-либо другому приложению (например, VPN-серверу). Ваше приложение также может передавать пакеты обратно через это символьное устройство, и сетевой стек ОС будет рассматривать эти пакеты как входящий сетевой трафик.

Если машина действует как маршрутизатор, она может просто использовать виртуальный интерфейс tun/tap как обычный и перенаправлять трафик через него, но всегда приложение, обрабатывающее устройство, управляет пакетами. Исходящий трафик через виртуальный интерфейс всегда доставляется вашему приложению, а входящий трафик через виртуальный интерфейс всегда исходит от вашего приложения.

person ldx    schedule 10.05.2012
comment
@Idx, что, если я хочу перенаправить трафик интерфейса Tap на физический Ethernet и наоборот, как это сделать? (не соединяя их вместе конечно) - person Space Rocker; 18.02.2013
comment
Это зависит от того, что вы подразумеваете под «перенаправлением». Вы можете сделать маршрутизацию на своем ящике, но тогда вам нужно включить IP-переадресацию, настроить необходимые маршруты, и пакеты должны иметь адрес назначения, который достигается через маршрут через ваш интерфейс Ethernet. Но, опять же, зависит от того, что вы подразумеваете под «перенаправлением». - person ldx; 18.02.2013
comment
@Idx, то есть вы имеете в виду, что в виртуальном интерфейсе я назначаю IP-адрес, шлюз которого должен быть IP-адресом физического интерфейса, а затем использует для этого маршрутизацию на основе политики на основе источника ?? - person Space Rocker; 18.02.2013
comment
Можете ли вы более подробно рассказать о том, что вы хотели бы сделать? - person ldx; 19.02.2013
comment
вот что я хочу сделать, но не могу понять, я часами ломаю голову: unix.stackexchange.com/questions/62392/ - person Space Rocker; 19.02.2013
comment
@Idx У меня есть две сетевых карты, установленных на моей машине с Linux, и я создал два tuntaps. Я хочу, чтобы дейтаграммы udp отправлялись с одного tuntap и поступали на другой tuntap. Любой возможный способ добиться этого....??? В то же время, если я создаю один интерфейс tun, я не могу создать другой интерфейс tun .... можете ли вы указать мне, что происходит не так??? - person frp farhan; 08.03.2016