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 等啟用建立的虛擬網路介面,開始送收封包。
參考文獻
- TUN/TAP [Wikipedia]
- tun 驅動程式原始碼:drivers/net/tun.c

沒有留言:
張貼留言