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