理解Linux IPIP隧道

简介

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。

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设备中

# 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一样

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设备

ping 10.10.200.10 -c 1

通过tcpdump在Node2抓包如下:

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地址的。

# 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 

巨人的肩膀

  • 《Kubernetes网络权威指南》

欢迎关注,互相学习,共同进步~

我的个人博客
公众号:编程黑洞

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值