前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >理解Linux IPIP隧道

理解Linux IPIP隧道

作者头像
编程黑洞
发布2023-10-23 15:59:09
4560
发布2023-10-23 15:59:09
举报
文章被收录于专栏:编程黑洞编程黑洞

# 简介

IPIP隧道是一种点对点的隧道协议,用于在IPv4网络上传输IPv4或IPv6数据包。

IPIP隧道的工作原理是将源主机的IP数据包封装在一个新的IP数据包中,新的IP数据包的目的地址是隧道的另一端。在隧道的另一端,接收方将解封装原始IP数据包,并将其传递到目标主机。IPIP隧道可以在不同的网络之间建立连接,例如在IPv4网络和IPv6网络之间建立连接。

# 使用IPIP隧道实现跨主机网络

首先在Node1创建tun设备并设置为ipip模式,local设置为本地IP地址10.65.132.187,remote设置为对端IP10.65.132.187,这两个是隧道外层IP,然后再设置隧道内层IP,10.10.100.10到10.10.200.10。

代码语言:javascript
复制
ip tunnel add tun1 mode ipip remote 10.65.132.188 local 10.65.132.187
ip link set tun1 up
ip a add 10.10.100.10 peer 10.10.200.10 dev tun1

可以看到添加了一条路由,发送到目的地址10.10.200.10的包都会转发到tun1设备中

代码语言:javascript
复制
# ip r
...
10.10.200.10 dev tun1 proto kernel scope link src 10.10.100.10
...

tun设备会将进入的IP包封装到一个IP包中,源地址是之前设置的外层local IP,而目的地址是外层remote IP,然后再通过路由达到从ens18网卡出去到Node2中。

在Node2上创建tun设备,配置和Node1一样

代码语言:javascript
复制
ip tunnel add tun2 mode ipip remote 10.65.132.187 local 10.65.132.188
ip link set tun2 up
ip a add 10.10.200.10 peer 10.10.100.10 dev tun2

然后在Node1上ping Node2的tun设备

代码语言:javascript
复制
ping 10.10.200.10 -c 1

通过tcpdump在Node2抓包如下:

代码语言:javascript
复制
20:16:40.011992 IP 10.65.132.187 > 10.65.132.188: IP 10.10.100.10 > 10.10.200.10: ICMP echo request, id 17609, seq 1, length 64 (ipip-proto-4)
20:16:40.012099 IP 10.65.132.188 > 10.65.132.187: IP 10.10.200.10 > 10.10.100.10: ICMP echo reply, id 17609, seq 1, length 64 (ipip-proto-4)

数据包达到Node2后,是一个两层IP数据包,从Node2的ens18网卡出来后,解封数据包,发现内层的目的IP是10.10.200.10也就是tun2的地址,然后将数据包发到tun2设备。

tun2设备收到数据包后再根据上面相同步骤进行封装数据包回包给tun1,最终整个ping过程完成。

IPIP隧道是通过IP地址来标识网络设备的,所以不需要使用MAC地址,直接通过IP地址即可。通过查看tun设备信息,可以看到其是不存在mac地址的。

代码语言:javascript
复制
# ip -d link show tun1
59: tun1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/ipip 10.65.132.187 peer 10.65.132.188 promiscuity 0 minmtu 68 maxmtu 65515 
    ipip ipip remote 10.65.132.188 local 10.65.132.187 ttl inherit pmtudisc addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 简介
  • # 使用IPIP隧道实现跨主机网络
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档