一、IP隧道技术

IP隧道技术:是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。IP 隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。移动IPv4主要有三种隧道技术,它们分别是:IP in IP、最小封装以及通用路由封装。更多信息可以参看百度百科: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 的网络。个人感觉不如gre使用广泛

三个模块的信息如下:

# sit模块

[root@localhost ~]# modinfo sit

filename: /lib/modules/3.10.0-1127.el7.x86_64/kernel/net/ipv6/sit.ko.xz

alias: netdev-sit0

alias: rtnl-link-sit

license: GPL

retpoline: Y

rhelversion: 7.8

srcversion: 8FEAE2838076CA07D989A03

depends: ip_tunnel,tunnel4

intree: Y

vermagic: 3.10.0-1127.el7.x86_64 SMP mod_unload modversions

signer: CentOS Linux kernel signing key

sig_key: 69:0E:8A:48:2F:E7:6B:FB:F2:31:D8:60:F0:C6:62:D8:F1:17:3D:57

sig_hashalgo: sha256

parm: log_ecn_error:Log packets received with corrupted ECN (bool)

# ipip模块

[root@localhost ~]# modinfo ipip

filename: /lib/modules/3.10.0-1127.el7.x86_64/kernel/net/ipv4/ipip.ko.xz

alias: netdev-tunl0

alias: rtnl-link-ipip

license: GPL

retpoline: Y

rhelversion: 7.8

srcversion: 8032CC3EDB2F63D42025A07

depends: ip_tunnel,tunnel4

intree: Y

vermagic: 3.10.0-1127.el7.x86_64 SMP mod_unload modversions

signer: CentOS Linux kernel signing key

sig_key: 69:0E:8A:48:2F:E7:6B:FB:F2:31:D8:60:F0:C6:62:D8:F1:17:3D:57

sig_hashalgo: sha256

parm: log_ecn_error:Log packets received with corrupted ECN (bool)

# ip_gre模块

[root@localhost ~]# modinfo ip_gre

filename: /lib/modules/3.10.0-1127.el7.x86_64/kernel/net/ipv4/ip_gre.ko.xz

alias: netdev-gretap0

alias: netdev-gre0

alias: rtnl-link-gretap

alias: rtnl-link-gre

license: GPL

retpoline: Y

rhelversion: 7.8

srcversion: 8D93B95BDB2B52FA2B08958

depends: ip_tunnel,gre

intree: Y

vermagic: 3.10.0-1127.el7.x86_64 SMP mod_unload modversions

signer: CentOS Linux kernel signing key

sig_key: 69:0E:8A:48:2F:E7:6B:FB:F2:31:D8:60:F0:C6:62:D8:F1:17:3D:57

sig_hashalgo: sha256

parm: log_ecn_error:Log packets received with corrupted ECN (bool)

实验环境

ip tunnel 配置 Vmware 添加2个网卡,一个是桥接,一个是私有

hostA:

[root@localhost ~]# ip address add 10.10.1.20/24 dev ens33

[root@localhost ~]# ip address add 192.168.1.2/24 dev ens37

[root@localhost ~]# ip link set dev ens33 up

[root@localhost ~]# ip link set dev ens37 up

[root@localhost ~]# ip a s

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

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: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:0c:29:f9:78:c3 brd ff:ff:ff:ff:ff:ff

inet 10.10.1.20/24 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fef9:78c3/64 scope link

valid_lft forever preferred_lft forever

3: ens37: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:0c:29:f9:78:cd brd ff:ff:ff:ff:ff:ff

inet 192.168.1.2/24 scope global ens37

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fef9:78cd/64 scope link

valid_lft forever preferred_lft forever

hostB: