《深入理解OpenStack Neutron》—2.6 tun

举报
华章计算机 发表于 2019/05/30 11:19:03 2019/05/30
【摘要】 本书摘自《深入理解OpenStack Neutron》一书中的第2章,第2.6节,作者是李宗标。

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原生支持的三层隧道

image.png

image.png

下面我们就用一个具体的测试用例来讲述tun。测试用例组网如图2-9所示。

image.png

图2-9 tun测试组网图

图2-9中的tun1、tun2,如果我们先忽略的话,剩下的就是我们在2.5节中讲述过的

内容。

测试用例的第一步,就是使图中的tap1与tap2配置能通,这里我们不再重复。

当tap1和tap2配通以后,如果我们不把图2-10中的tun1和tun2暂时当做tun设备,而是当做两个“死”设备(比如当做是两个不做任何配置的网卡),那么这个时候tun1和tun2就像两个孤岛,不仅互相不通,而且跟tap1、tap2也没有关系。我们可以用一个更形象的图来示意,如图2-10所示。

image.png

图2-10 tun1、tun2像两个孤岛

这个时候,我们就需要对tun1、tun2做相关配置,以使这两个两个孤岛能够互相通信。我们以ipip tunnel为例进行配置。

首先我们要加载ipip模块,Linux默认是没有加载这个模块的。通过命令行lsmod | grep ip进行查看,

查看结果如图2-11所示。

image.png

我们可以通过命令modprobe ipip来加载ipip模块。执行完此命令以后再查看,就能看到ipip模块被加载进入Linux,

如图2-12所示。

image.png

加载了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的解释

image.png

如图2-13所示。

image.png

图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所示。

image.png

图2-14 增加了tun设备的ns1的路由表

框中的内容告诉我们,到达目的地192.168.60.10的路由的一个直连路由直接从tun1出去即可。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。