虛擬網絡卡tun/tap驅動是乙個開源專案,支援很多的類unix平台,openvpn和vtun都是基於它實現隧道包封裝。本文將介紹tun/tap驅動的使用並分析虛擬網絡卡tun/tap驅動程式在linux環境下的設計思路。
tun/tap驅動程式實現了虛擬網絡卡的功能,tun表示虛擬的是點對點裝置,tap表示虛擬的是乙太網裝置,這兩種裝置針對網路包實施不同的封裝。利用tun/tap驅動,可以將tcp/ip協議棧處理好的網路分包傳給任何乙個使用tun/tap驅動的程序,由程序重新處理後再發到物理鏈路中。
tap 和 tun 的區別:
tap位於網路osi模型的二層(資料鏈路層),tun位於網路的三層。這裡就先簡單的對tap進行一下說明。
如果想使用linux命令列操作乙個tap,首先linux得有tun模組(linux使用tun模組實現了tun和tap)。
檢查方法如下:
# 如果使用命令 modinfo tun,有輸出的話,就說明具有tun模組
[root@public ~]# modinfo tun
filename: /lib/modules/3.10
.0-693.11
.1.el7.x86_64/kernel/drivers/net/tun.ko
.xzalias: devname:net/tun
alias: char-major-10-200
license: gpl
author: (c) 1999-2004 max krasnyansky .com>
description: universal tun/tap device driver
rhelversion:
7.4srcversion:
4e9f57a6269cfd0f4be4021
depends:
intree:
yvermagic:
3.10
.0-693.11
.1.el7.x86_64 smp mod_unload modversions
signer: centos linux kernel signing key
sig_key:
61:b8:e8:7b:84:11:84:f6:2f:80:d6:07:79:ab:69:2a:49:d8:3b:af
sig_hashalgo: sha256
[root@public ~]#
當linux版本具有tun模組時,還得看看其是否已經載入,檢查方式如下:
# 使用該命令檢查後,無回顯,表示當前未載入該模組
[root@public ~]# lsmod | grep tun
[root@public ~]#
# 使用該命令載入該模組
[root@public ~]# modprobe tun
[root@public ~]#
[root@public ~]# lsmod | grep tun
tun 31621
0
載入模組後,還需要linux是否有操作tun/tap的命令列工具tunctl。
[root@public ~]# yum -y install tunctl
具備tun模組和tunctl以後,就可以建立乙個tap裝置,命令:
[root@public ~]# tunctl -t tap_test
set 'tap_test' persistent and owned by uid 0
[root@public ~]# ip link list
1: lo: mtu 65536 qdisc noqueue state unknown mode default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:
mtu 1500 qdisc pfifo_fast state up mode default qlen 1000
link/ether fa:16:3e:08:0b:39 brd ff:ff:ff:ff:ff:ff
3: tap_test:
mtu 1500 qdisc noop state down mode default qlen 1000
link/ether ce:cc:18:91:1e:ba brd ff:ff:ff:ff:ff:ff
[root@public ~]#
[root@public ~]# ip addr add local 192.168.10.100/24 dev tap_test
[root@public ~]# ip a s
1: lo: mtu 65536 qdisc noqueue state unknown qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
mtu 1500 qdisc pfifo_fast state up qlen 1000
link/ether fa:16:3e:08:0b:39 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.93/24 brd 192.168.10.255 scope global noprefixroute dynamic eth0
valid_lft 75733sec preferred_lft 75733sec
inet6 fe80::f816:3eff:fe08:b39/64 scope link
valid_lft forever preferred_lft forever
3: tap_test:
mtu 1500 qdisc noop state down qlen 1000
link/ether ce:cc:18:91:1e:ba brd ff:ff:ff:ff:ff:ff
inet 192.168.10.100/24 scope global tap_test
valid_lft forever preferred_lft forever
[root@public ~]#
linux下的tap新增(虛擬網絡卡)
決定堅持混linux,當然繼續走低端路線,用ubuntu。因為很多資料庫都在各種雲上,開了openvpn還不夠,還要同時幾個不同的資料庫一起開著查東西。於是又兼職當了回網管。基本的修改步驟是先ifconfig查好自己的乙太網的inte ce name 接下來去修改 etc network inte ...
Linux 虛擬機器使用tap裝置
但是bochs使用tap模式,卻一直提示tap0 is not running,比較發現正常介面會有running狀態,但是tap介面只有up狀態,沒有running,那就沒辦法了,我只知道如何讓乙個介面up,不知道怎麼讓他running。所以就放棄了,然後使用tuntap模式,ethdev指定為 ...
網路虛擬化之linux虛擬網路基礎
在linux裡面devic 裝置 與傳統網路概念裡的物理裝置 如交換機 路由器 不同,linux所說的裝置,其背後指的是乙個類似於資料結構 核心模組或裝置驅動這樣的含義。就是說device可能只是軟體系統裡的乙個驅動,乙個函式介面。tap位於二層資料鏈路層,tun位於三層網路層,兩者在linux裡的...