leiiwang

Linux网络工具学习之:IP命令学习9

标签(空格分隔): 网络


本文旨在通过IP命令介绍和学习Linux网络的相关知识

1. 概述

3. ip addr

4 ip addrlabel

5 ip route

6 ip rule

7 ip neighbour

8 ip ntable

9 ip tunnel

9.1 概述

ip tunnel命令的操作对象是网络通道(tunnel)。所谓通道(tunnel)是指把数据包封装到IPv4数据包中,使用IP协议发出。

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 }

9.2 ip tunnel add/change/delete

添加新的通道; 修改现有的通道; 删除一个通道.缩写:add、a;change、chg;delete、del、d

|参数|说明| |-|-| |name NAME(default) |选择通道设备名 |mode MODE |设置通道模式。有效的模式包括:ipip、sit和gre等等等等。 |remote ADDRESS |设置通道远端地址 |local ADDRESS |设置进入通道数据包的固定本地地址,必须是在本机另外一个接口上的地址。 |ttl N |设置进入通道数据包的TTL为N。N是一个1—255之间的数字。0是一个特殊的 值,表示这个数据包的TTL值是继承(inherit)的。ttl参数的缺省值是:inherit。 |tos T或者dsfield T |设置进入通道数据包的TOS域,缺省是inherit。 |dev NAME| 把通道绑定到设备NAME,以便进入通道的数据包只能通过NAME设备路由 ,并且当对端发生变化时,不能够在另外的设备解开封装。 |nopmtudisc |在这个通道上禁止路径最大传输单元发现( Path MTU Discovery)。默认情况下,这个功能是打开的。注意:这个选项和固定的ttl是不兼容的,如果使用了固定的ttl参数,系统会打开路径最大传输单元发现( Path MTU Discovery)功能。 |key k,ikey k,okey k |只适用于GRE通道,设置keyedGRE通道的key。K或者是一个 数字或者是IP地址形式的数字序列。参数key在通道的双向使用,ikey和okey为输入和输出设置不同的key。 |csum,icsum,ocsum |只用于GRE通道,计算进入通道数据包的校验和。ocsum表示只计算出去的数据包的校验和;icsum表示只计算进入的数据包的校验和;而csum等于icsum ocsum。 |seq,iseq,oseq |只适用于GRE通道,顺序发送/接收数据包。oseq使向外的数据包顺序发送;iseq要求所有进入的数据包都是按照顺序的;而seq等于iseq oseq。

> ip tunnel add Cisco mode sit remote 192.31.7.104 local 192.203.80.1 ttl 32 
<== 同 ==>
ip link add Cisco type sit remote 192.31.7.104 local 192.203.80.1 ttl 32 
-------------------------------------------------
example
-------------------------------------------------
# 这里使用2.4.7里面的一个例子的环境来测试
192.168.0.0/24
net1(.1)   net2(.2)
  |           | 
------------------
    bridge
-----------------
在net1 和 net2之前创建一个tunnel来通信

#创建tunnel 设置ip 打开
ip netns exec net1 ip tunnel add ethn mode ipip local 192.168.0.1 remote 192.168.0.2 
ip netns exec net2 ip tunnel add ethm mode ipip local 192.168.0.2 remote 192.168.0.1
ip netns exec net1 ip addr add 10.0.1.1 dev ethn
ip netns exec net2 ip addr add 10.0.2.1 dev ethm
ip netns exec net1 ip link set ethn up
ip netns exec net2 ip link set ethm up

# 设置路由规则
ip netns exec net1 route add -host 10.0.2.1 dev ethn
ip netns exec net2 route add -host 10.0.1.1 dev ethm

# 测试
ip netns exec net1 ping 10.0.2.1
ip netns exec net2 ping 10.0.1.1

[root@10-9-151-160 ~]# ip netns exec net1 tcpdump -nntei net1-bridge
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on net1-bridge, link-type EN10MB (Ethernet), capture size 65535 bytes
e6:eb:1f:d4:9d:93 > b6:59:5b:f3:89:8d, ethertype IPv4 (0x0800), length 118: 192.168.0.2 > 192.168.0.1: 10.0.2.1 > 10.0.1.1: ICMP echo request, id 2246, seq 59, length 64 (ipip-proto-4)
b6:59:5b:f3:89:8d > e6:eb:1f:d4:9d:93, ethertype IPv4 (0x0800), length 118: 192.168.0.1 > 192.168.0.2: 10.0.1.1 > 10.0.2.1: ICMP echo reply, id 2246, seq 59, length 64 (ipip-proto-4)
e6:eb:1f:d4:9d:93 > b6:59:5b:f3:89:8d, ethertype IPv4 (0x0800), length 118: 192.168.0.2 > 192.168.0.1: 10.0.2.1 > 10.0.1.1: ICMP echo request, id 2246, seq 60, length 64 (ipip-proto-4)
b6:59:5b:f3:89:8d > e6:eb:1f:d4:9d:93, ethertype IPv4 (0x0800), length 118: 192.168.0.1 > 192.168.0.2: 10.0.1.1 > 10.0.2.1: ICMP echo reply, id 2246, seq 60, length 64 (ipip-proto-4)
e6:eb:1f:d4:9d:93 > b6:59:5b:f3:89:8d, ethertype IPv4 (0x0800), length 118: 192.168.0.2 > 192.168.0.1: 10.0.2.1 > 10.0.1.1: ICMP echo request, id 2246, seq 61, length 64 (ipip-proto-4)

参考:两台linux机器上建立ip隧道

9.3 ip tunnel show

列出现有的通道; 缩写:show、list、sh、ls、l

[root@10-9-151-160 ~]# ip tunnel show
Cisco1: ip/ip  remote 192.31.7.104  local 192.203.80.1  ttl 32 
sit0: ipv6/ip  remote any  local any  ttl 64  nopmtudisc 6rd-prefix 2002::/16 
tunl0: ip/ip  remote any  local any  ttl inherit  nopmtudisc
Cisco: ipv6/ip  remote 192.31.7.104  local 192.203.80.1  ttl 32  6rd-prefix 2002::/16

kuznet@amber:~ $ ip -s tunl ls Cisco 
Cisco: ipv6/ip  remote 192.31.7.104  local 192.203.80.142  ttl 32 
RX: Packets    Bytes        Errors CsumErrs OutOfSeq Mcasts 
   12566      1707516      0      0        0        0        
TX: Packets    Bytes        Errors DeadLoop NoRoute  NoBufs 
   13445      1879677      0      0        0        0    

CsumErrs 对于打开校验和检验的GRE通道,这个数字是由于校验和错误而丢弃的数 
据包数量。 
OutOfSeg 在打开顺序功能的GRE通道内,由于顺序错误而丢弃的数据包数量。 
Mcasts 在GRE通道上接收到的多播数据包的数量。 
DeadLoop 由于通道是回环到自己而没有传输的数据包数目。 
NoRoute 由于到对端没有路由而没有被传输的数据包数目。 
NoBufs 由于内核不能分配缓冲区而没有被传输的数据包数目。 
comments powered by Disqus