2013年8月16日 星期五

TUN and TAP: Virtual Network Device

在某些情況,需要軟體提供虛擬的網路界面,方便網路應用程式使用,例如 VPN 或 Virtual Machine 等。

VPN 是對 WAN 網路連線做加密等保護,讓你覺得好像在使用 LAN 環境一樣安全,所以 VPN 程式會去攔截 WAN 界面所有往來的封包,加以改良,加上 VPN header、資料加密等。但為了讓本來就有的網路應用程式不用更改,VPN 程式提供另一個軟體虛擬的網路界面給網路應用程式使用。

Virtual Machine 是用軟體模擬的一台電腦,常常需要提供網路界面給外界存取,又很有可能沒有多餘的、實體的網路界面可用,於是提供虛擬的網路界面,搭上母體電腦的 bridge 或 router。

虛擬網路界面一般有兩種,TAP 跟 TUN。TAP (network tap) 就是 Ethernet 插座的意思,模擬 Ethernet 設備的網路介面,可送收 L2 封包作為 bridge。而 TUN (network tunnel) 模擬成網路層的設備,可送收 L3 封包,跟 routing 搭配使用。

在 Linux,TUN 跟 TAP 都是由 tun 驅動程式實作,載入時會建立一個 /dev/net/tun 的 char device 。當 user-space 程式 (通常是常駐的 daemon 程式) 開啟 /dev/net/tun 並 ioctl TUNSETIFF 做設定,便會建立虛擬的網路介面。此時網路應用程式就可以透過 ifconfig 設定 IP 等啟用建立的虛擬網路介面,開始送收封包。

參考文獻
  1. TUN/TAP [Wikipedia]
  2. tun 驅動程式原始碼:drivers/net/tun.c 
相關文章

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...