Linux的Network Tunnel技术
Linux的Network Tunnel技术
概要
Linux上可以使用ip tunnel命令创建多种类型的tunnel。
在 man ip-tunnel
中可以得知以下几种类型的tunnel:
MODE := { ipip | gre | sit | isatap | vti | ip6ip6 | ipip6 | ip6gre | vti6 | any }
ip tunnel的使用方法:
$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 }
ipip mode
ipip tunnel是最简单的一种,将ipv4报文封装在ip协议中送出,一对ipip tunnel设备之间只能建立一个tunnel。
因为ipip只能点对点等建立隧道,因此只能封装ipv4的单播报文,不能处理OSPF、RIP等多播协议。
下面在两台机器(192.168.40.2)和(192.168.40.3)之间建立ipip tunnel。
为了结构清晰,在两台机器上个创建一个ns,为这两个ns建立ipip tunnel。
试验规划
172.0.0.0/24网段的报文经封装后通过192.168.40.0/24网段传输。
underlay的传输IP: 192.168.40.2 <--------> 192.168.40.3
^ ^
| |
overlay的虚拟IP: 172.0.0.2 172.0.0.3
准备环境
在192.168.40.2,将网卡eth1加入到ipip-ns,配置IP 192.168.40.2:
ip netns add ipip-ns
ip link set eth1 netns ipip-ns
ip netns exec ipip-ns ip link set eth1 up
ip netns exec ipip-ns ip addr add 192.168.40.2 dev eth1
ip netns exec ipip-ns ip route add 192.168.40.0/24 via 192.168.40.2 dev eth1
$ip netns exec ipip-ns ping 192.168.40.1
PING 192.168.40.1 (192.168.40.1) 56(84) bytes of data.
64 bytes from 192.168.40.1: icmp_seq=1 ttl=64 time=0.304 ms
在192.168.40.3,将网卡eth1加入到ipip-ns,配置IP 192.168.40.3:
ip netns add ipip-ns
ip link set eth1 netns ipip-ns
ip netns exec ipip-ns ip link set eth1 up
ip netns exec ipip-ns ip addr add 192.168.40.3 dev eth1
ip netns exec ipip-ns ip route add 192.168.40.0/24 via 192.168.40.3 dev eth1
$ip netns exec ipip-ns ping 192.168.40.2
PING 192.168.40.2 (192.168.40.2) 56(84) bytes of data.
64 bytes from 192.168.40.2: icmp_seq=1 ttl=64 time=0.436 ms
创建tunnel
在192.168.40.2上:
modprobe ipip
//创建隧道,隧道本地端传输IP是192.168.40.2,远端的传输IP是192.168.40.3,通过eth1传输
$ip netns exec ipip-ns ip tunnel add ipiptun mode ipip local 192.168.40.2 remote 192.168.40.3 ttl 64 dev eth1
//隧道的本地端虚拟IP是172.0.0.2,远端的虚拟IP是172.0.0.3
$ip netns exec ipip-ns ip addr add dev ipiptun 172.0.0.2 peer 172.0.0.3
//启动tunnel设备
$ip netns exec ipip-ns ip link set dev ipiptun up
//添加路由
$ip netns exec ipip-ns ip route add 172.0.0.0/24 via 172.0.0.2
在192.168.40.3上:
modprobe ipip
$ip netns exec ipip-ns ip tunnel add ipiptun mode ipip local 192.168.40.3 remote 192.168.40.2 ttl 64 dev eth1
$ip netns exec ipip-ns ip addr add dev ipiptun 172.0.0.3 peer 172.0.0.2
$ip netns exec ipip-ns ip link set dev ipiptun up
$ip netns exec ipip-ns ip route add 172.0.0.0/24 via 172.0.0.3
观察设备
观察192.168.40.2上的网络设备
$ip netns exec ipip-ns ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
...省略...
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1
link/ipip 0.0.0.0 brd 0.0.0.0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:b3:6c:38 brd ff:ff:ff:ff:ff:ff
inet 192.168.40.2/32 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feb3:6c38/64 scope link
valid_lft forever preferred_lft forever
4: ipiptun@eth1: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN qlen 1
link/ipip 192.168.40.2 peer 192.168.40.3
inet 172.0.0.2 peer 172.0.0.3/32 scope global ipiptun
valid_lft forever preferred_lft forever
可以看到增加了一个ipiptun@eth1设备,就是在上面创建的ipiptun设备。
该设备的本地IP是192.168.40.2和172.0.0.2,对端IP是192.168.40.3和172.0.0.3。
联通测试
在192.168.40.2上发起ping:
$ip netns exec ipip-ns ping 172.0.0.3
PING 172.0.0.3 (172.0.0.3) 56(84) bytes of data.
64 bytes from 172.0.0.3: icmp_seq=1 ttl=64 time=0.319 ms
64 bytes from 172.0.0.3: icmp_seq=2 ttl=64 time=0.535 ms
64 bytes from 172.0.0.3: icmp_seq=3 ttl=64 time=0.552 ms
在192.168.40.3上抓包:
$ip netns exec ipip-ns tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
08:02:29.287573 IP 192.168.40.2 > 192.168.40.3: IP 172.0.0.2 > 172.0.0.3: ICMP echo request, id 4363, seq 1, length 64 (ipip-proto-4)
08:02:29.287631 IP 192.168.40.3 > 192.168.40.2: IP 172.0.0.3 > 172.0.0.2: ICMP echo reply, id 4363, seq 1, length 64 (ipip-proto-4)
08:02:30.288665 IP 192.168.40.2 > 192.168.40.3: IP 172.0.0.2 > 172.0.0.3: ICMP echo request, id 4363, seq 2, length 64 (ipip-proto-4)
08:02:30.288749 IP 192.168.40.3 > 192.168.40.2: IP 172.0.0.3 > 172.0.0.2: ICMP echo reply, id 4363, seq 2, length 64 (ipip-proto-4)
08:02:31.290073 IP 192.168.40.2 > 192.168.40.3: IP 172.0.0.2 > 172.0.0.3: ICMP echo request, id 4363, seq 3, length 64 (ipip-proto-4)
08:02:31.290157 IP 192.168.40.3 > 192.168.40.2: IP 172.0.0.3 > 172.0.0.2: ICMP echo reply, id 4363, seq 3, length 64 (ipip-proto-4)
可以看到172.0.0.0/24网段的报文,经过封装后,通过192.168.40.0/24网段完成了传输。
高级应用
如果远端的设备上设置NAT,那么本地就可以通过建立的IPIP隧道,接入到远端机器所在的另一个网络。
Linux的Network Tunnel技术的更多相关文章
- Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机
(1).虚拟化产品对比介绍 虚拟化技术有以下三种:仿真虚拟化,这是一种对系统硬件没有要求,但性能最低的虚拟化技术:半虚拟化,这是一种直接使用物理硬件,性能高,但需要修改内核的虚拟化技术:全虚拟化,这是 ...
- Windows和Linux都有的Copy-on-write技术
Windows和Linux都有的Copy-on-write技术 MySQL技术内幕Innodb存储引擎第2版 P375 SQL Server2008 实现与维护(MCTS教程)P199 LVM快照技术 ...
- 转:Linux网络IO并行化技术概览
转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...
- linux 启动network后报错:device eth0 does not seem to be present, delaying initialization
问题背景: 在vsphere client中部署ovf模板后启动linux 的network后提示:device eth0 does not seem to be present, delaying ...
- Linux的桌面虚拟化技术KVM(五)——virsh常用命令
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照 Linux的桌面虚 ...
- Linux的桌面虚拟化技术KVM(四)——虚拟机镜像格式对比与转换
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照 (1).常用镜像格 ...
- Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 (1).KVM虚拟机克隆 KVM虚拟克隆命令virt-clone [选项] 常用选项 ...
- Linux的桌面虚拟化技术KVM(二)——远程桌面管理
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 远程桌面管理,指的是远程图形界面管理,所以要保证物理机要有图形化界面. (1).VNC管理 安装VNC-server服务,并进行配置 [ro ...
- Linux服务器内存池技术是如何实现的
Linux服务器内存池技术是如何实现的
随机推荐
- Hadoop 三大调度器源码分析及编写自己的调度器
如要转载,请注上作者和出处. 由于能力有限,如有错误,请大家指正. 须知: 我们下载的是hadoop-2.7.3-src 源码. 这个版本默认调度器是Capacity调度器. 在2.0.2-alph ...
- [工具]kali-linux-2016.2 更新后
使用官方的,会自动选择最近的服务器/etc/apt/sources.list # 就这一句就好了,不用添加一堆 deb http://http.kali.org/kali kali-rolling m ...
- Google Play应用商店的下载路径(转载)
转自:http://blog.yanwen.org/archives/1660.html 其实,好久之前就想知道google play中下载的应用到哪里去了.之前用的MIUI系统里面,google p ...
- bzoj 2331: [SCOI2011]地板【插头dp】
一开始设计了四种状态,多了一种已经拐弯但是长度为0的情况,后来发现不用,设012表示没插头,没拐弯的插头,拐了弯的插头,然后转移的话12,21,22都不合法,剩下的转移脑补一下即可,ans只能在11, ...
- thinkphp5 +elasticsearch
php7使用elasticsearch 1.安装 官网下载地址:https://www.elastic.co/downloads/elasticsearch # 解压到非root目录,运行时使用非ro ...
- (数位DP)51NOD 1042 数字0-9的数量
给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. 输入 ...
- Luogu P1663 山【二分答案/实数域】By cellur925
题目传送门 现在要在山上的某个部位装一盏灯,使得这座山的任何一个部位都能够被看到. 给出最小的y坐标,如图的+号处就是y坐标最小的安装灯的地方. 这个题嘛...今年省选前学姐来我们(破烂)的机房串门的 ...
- pycharm 整段缩进
转自 https://blog.csdn.net/zoulonglong/article/details/79869787 在使用pycharm时,经常会需要多行代码同时缩进.左移,pycharm提供 ...
- 正睿OI提高组十连测 day1 总结
可能是最简单的一场比赛了吧,结果却打得这么差... T1是个找规律题,结果一开始愚蠢地找错了规律,然后又对拍,到1h多一点才过掉 然后看t2和t3,以为t2是个水题,t3也只要处理一下就好了,先写t2 ...
- Hdu 5459 Jesus Is Here (2015 ACM/ICPC Asia Regional Shenyang Online) 递推
题目链接: Hdu 5459 Jesus Is Here 题目描述: s1 = 'c', s2 = 'ff', s3 = s1 + s2; 问sn里面所有的字符c的距离是多少? 解题思路: 直觉告诉我 ...