Я пытаюсь отправить пакеты в приложение, прослушивающее eth0, из пользовательского пространства машины, как если бы они исходили с удаленной машины.
Что я не могу найти хорошей документации, так это точный способ взаимодействия устройства TUN / TAP с остальной частью сетевого стека? Пересылаются ли пакеты на eth0, если они привязаны к удаленному хосту? Будут ли по умолчанию пакеты, адресованные для локального хоста, перенаправляться в приложение пользовательского пространства? На каких этапах пакеты появляются в ядре относительно стека Netfilter?
Поведение плохо документировано (http://openvpn.net/archive/openvpn-users/2005-05/msg00224.html, https://www.kernel.org/doc/Documentation/networking/tuntap.txt)).
Устройство tun tap выглядит одинаково для ядра в том смысле, что оно не может определить, поступают ли данные по проводу, подключенному к интерфейсам Ethernet, или от пользовательского приложения. Когда данные записываются, они пересылаются в приложение пользовательского уровня, а не в устройство физического интерфейса, например. eth0
Интерфейс, на который пересылается пакет, будет, как обычно, основан на таблице маршрутизации, которую вы можете просмотреть с помощью ip route
или netstat -r
. Это также будет применяться к пакетам, адресованным локальному хосту.
Кроме того, интерфейс TUN / TAP также может использоваться в качестве интерфейса для маршрута, который отображается в таблице маршрутизации.