在做LVS实验,部署VS/TU模式时,遇到一个配置 ifconfig tunl0 $ip_address $netmask up
。对网卡 tunl0有疑惑,在网上找了半天也没有找到相关的绍介。通过阅读Linux下的IP隧道相关文章,并做实验才得到了本文中的结论。如果您发我的理解错了,请在评论区指正。
IP隧道技术
隧道技术:是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。
IP 隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。
Linux内核模块对IP隧道的支持
注:此部分内容借鉴于互联网
Linux系统内核实现的IP隧道技术主要有三种(PPP、PPTP和L2TP等协议或软件不是基于内核模块的):ipip、gre、sit 。这三种隧道技术都需要内核模块 tunnel4.ko 的支持。
- ipip 需要内核模块 ipip.ko ,该方式最为简单!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。至于兼容性,这部分代码已经有很长一段历史了,它的兼容性可以上溯到1.3版的内核。据网上查到信息,Linux的IP-in-IP隧道不能与其他操作系统或路由器互相通讯。它很简单,也很有效。
- GRE 需要内核模块 ip_gre.ko ,GRE是最初由CISCO开发出来的隧道协议,能够做一些IP-in-IP隧道做不到的事情。比如,你可以使用GRE隧道传输多播数据包和IPv6数据包。
- sit 他的作用是连接 ipv4 与 ipv6 的网络 。
由内核模块虚拟的网卡
Linux中对IP隧道提供支持的三个模块ipip、GRE、sit在内核空间生成了三个虚拟网卡。他们的对应关系如下:
内核模块 | 虚拟网卡 |
---|---|
ipip | tunl0 |
GRE | gre0 |
sit | sit0 |
在默认情况下这三个网卡是不可见的,就算你使用ifconfig -a
指令也无法发现它们。但当你需要时,你可以直接使用ifconfig 指令对他们进行配置。
ifconfig tunl0 $ip_addr $network ……
使用ifconfig 指令配置后,同时也激活了对应的虚拟网卡,再使用ifconfig -a就可以看到了。