TUN/TAP

TUN/TAPは仮想ネットワークデバイス及びそのデバイスドライバの実装およびデバイス名で、主にUnix系のシステムで利用できる。実ハードウェアであるネットワークカードと対応しているデバイスドライバと同様にネットワーク通信ができるが、データはハードウェアではなく、ネットワーク通信を仮想化したソフトウェアのプロセスに送られ、そこで処理される（例えば、VPNの相手方への通信として、改めて実ハードから送信される）。

概要 
TAP(Terminal Access Point) は、イーサネットデバイスをシミュレートし、データリンク層を操作できる。TUN(TUNnel) はネットワーク層をシミュレートし、IPパケットなどを操作できる。用途としては、たとえばTAPはブリッジに使われ、TUNはルーティングに使われる。

OSがTUN/TAPデバイスに送ったパケットは、そのデバイスに接続しているユーザープログラムに送信される。また、ユーザープログラムからTUN/TAPデバイスに送られたパケットは、TUN/TAPデバイスはそれらのパケットをOSのプロトコルスタックに渡すので、OS側からはあたかも外部からパケットを受け取ったように見える。

利用の具体例 
TUN/TAPを使っている例を以下に列挙する。
 Virtual Private Network
OpenVPN - Ethernet/IP over TCP/UDP、暗号化・圧縮
 OpenSSH
 coLinux - Ethernet/IP over TCP/UDP
 Hamachi
 tinc - Ethernet/IPv4/IPv6 over TCP/UDP、暗号化・圧縮
 VTun - Ethernet/IP/serial/Unix pipe over TCP、暗号化・圧縮・トラフィックシェーピング
 ICMPTX - IP over ICMP (ping)
iodine - IP over DNS
 仮想機械でのネットワーキング
 Bochs
 coLinux
 QEMU
 VirtualBox
 KVM
 Hercules S/390エミュレータ

実装しているOS 
TUN/TAPドライバは以下のオペレーティングシステムで利用できる。
 FreeBSD
 macOS
 Linux - 2.1.60 以降
 Microsoft Windows
 OpenBSD
 NetBSD
 Solaris
 Android
 iOS

外部リンク 
 Universal TUN/TAP device driver Linux 2.4 文書
 tun/tap driver for Mac OS X

ネットワークソフト