《深入理解OpenStack Neutron》—2.6 tun
2.6 tun
tun是一个网络层(IP)的点对点设备,它启用了IP层隧道功能。Linux原生支持的三层隧道,可以通过命令行ip tunnel help查看:
ip tunnel help
Usage: ip tunnel { add | change | del | show | prl | 6rd } [ NAME ]
[ mode { ipip | gre | sit | isatap | vti } ] [ remote ADDR ] [ local ADDR ]
[ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
[ prl-default ADDR ] [ prl-nodefault ADDR ] [ prl-delete ADDR ]
[ 6rd-prefix ADDR ] [ 6rd-relay_prefix ADDR ] [ 6rd-reset ]
[ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]
Where: NAME := STRING
ADDR := { IP_ADDRESS | any }
TOS := { STRING | 00..ff | inherit | inherit/STRING | inherit/00..ff }
TTL := { 1..255 | inherit }
KEY := { DOTTED_QUAD | NUMBER }
可以看到,Linux一共原生支持5种三层隧道(tunnel),如表2-2所示。
表2-2 Linux原生支持的三层隧道
下面我们就用一个具体的测试用例来讲述tun。测试用例组网如图2-9所示。
图2-9 tun测试组网图
图2-9中的tun1、tun2,如果我们先忽略的话,剩下的就是我们在2.5节中讲述过的
内容。
测试用例的第一步,就是使图中的tap1与tap2配置能通,这里我们不再重复。
当tap1和tap2配通以后,如果我们不把图2-10中的tun1和tun2暂时当做tun设备,而是当做两个“死”设备(比如当做是两个不做任何配置的网卡),那么这个时候tun1和tun2就像两个孤岛,不仅互相不通,而且跟tap1、tap2也没有关系。我们可以用一个更形象的图来示意,如图2-10所示。
图2-10 tun1、tun2像两个孤岛
这个时候,我们就需要对tun1、tun2做相关配置,以使这两个两个孤岛能够互相通信。我们以ipip tunnel为例进行配置。
首先我们要加载ipip模块,Linux默认是没有加载这个模块的。通过命令行lsmod | grep ip进行查看,
查看结果如图2-11所示。
我们可以通过命令modprobe ipip来加载ipip模块。执行完此命令以后再查看,就能看到ipip模块被加载进入Linux,
如图2-12所示。
加载了ipip模块以后,我们就可以创建tun,并且给tun绑定一个ipip隧道(tunnel),命令行如下:
# 1)在 ns1 上创建 tun1 和 ipip tunnel
ip netns exec ns1 ip tunnel add tun1 mode ipip remote 192.168.200.2 local 192.
168.100.2 ttl 255
ip netns exec ns1 ip link set tun1 up
ip netns exec ns1 ip addr add 192.168.50.10 peer 192.168.60.10 dev tun1
# 2)在 ns2 上创建 tun2 和 ipip tunnel
ip netns exec ns2 ip tunnel add tun2 mode ipip remote 192.168.100.2 local 192.
168.200.2 ttl 255
ip netns exec ns2 ip link set tun2 up
ip netns exec ns2 ip addr add 192.168.60.10 peer 192.168.50.10 dev tun2
这个命令行需要做一个解释,如表2-3所示。
表2-3 命令行ip tunnel add的解释
如图2-13所示。
图2-13 两个tun互相ping
因为我们说tun是一个设备,那么我们可以通过ifconf?ig这个命令,来看看这个设备的信息:
ip netns exec ns1 ifconfig -a
......
tun1: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1480
inet 192.168.50.10 netmask 255.255.255.255 destination 192.168.60.10
tunnel txqueuelen 1 (IPIP Tunnel)
......
可以看到,tun1是一个ipip tunnel的一个端点,IP是192.168.50.10,其对端IP是192.
168.60.10。
我们再看看路由表,如图2-14所示。
图2-14 增加了tun设备的ns1的路由表
框中的内容告诉我们,到达目的地192.168.60.10的路由的一个直连路由直接从tun1出去即可。
- 点赞
- 收藏
- 关注作者
评论(0)