零入门kubernetes网络实战-24->介绍开源社区提供的tun案例

《零入门kubernetes网络实战》视频专栏地址

https://www.ixigua.com/7193641905282875942

本篇文章视频地址(稍后上传)


上一篇文章我们提供了一个helloworld级别的基于tun设备的点对点vpn参考案例。

而这篇文章我们介绍一个开源社区提供的点对点的VPN,稍微复杂了一点。

1、参考案例官网

https://github.com/net-byte/vtun

2、vtun跟我们提供的helloworld级别的案例的核心区别在那里?

  • 在helloworld的案例中
    • 比方说,从/dev/net/tun读取数据包后,
    • 直接将数据包通过本地的UDP服务发送到了对端UDP服务了。
    • 中间没有对数据包做任何的修改
  • 而在vtun里,从/dev/net/tun读取数据包后,对数据包做了一些其他操作:
    • 加密
    • 压缩
    • 过滤
      等等

3、vtun功能介绍

这是一款简易用的VPN,
支持以下协议:

  • 支持UDP
  • 支持websocket
  • 支持tls
  • 支持grpc

我们重点分析的是UDP协议

4、vtun核心代码说明

我们只分析udp模式下的,客户端代码。

服务器端核心逻辑跟客户端是一样的。

4.1、tunToUdp函数逻辑

在这里插入图片描述

4.2、udpToTun函数逻辑

在这里插入图片描述

5、本次测试目的

是否能够实现将客户端上的所有请求流量转发到服务器端。

6、测试环境说明

本次我们只测试vtun的udp模式;

linux下客户端启动vtun时,分为两种情况:

  • 仅转发tun网络的请求
  • 转发客户端上的所有请求

在centos环境下测试:

  • 客户端IP:10.211.55.122
  • 服务器端IP:10.211.55.123

7、如何编译

7.1、如何编译vtun

7.1.1、先看一下scripts目录下的build.sh脚本

大家根据自己的实际情况进行修改!

在这里插入图片描述

7.1.2、开始编译

我是根据自己的习惯,编写了Makefile文件,供大家参考

build:
	./scripts/build.sh

scp:
	scp bin/* root@10.211.55.122:/root
	scp bin/* root@10.211.55.123:/root

all:
	make build && make scp

在这里插入图片描述

7.2、vtun启动方式介绍

vtun可以在Linux、MacOS、window平台下启动。

vtun可以支持转发tun网络的请求,也可以支持宿主机上的所有请求

在这里插入图片描述

7.3、登录到客户端,并启动服务

./vtun-linux-amd64 -l :3000 -s 10.211.55.123:3001 -c 172.16.0.10/24 -k 123456 -g

在这里插入图片描述

如果你不想测试转发所有流量的话,去掉-g即可

将10.211.55.123改成自己的实际服务器端IP

7.4、登录到服务器端,并启动服务

./vtun-linux-amd64 -S -l :3001 -c 172.16.0.1/24 -k 123456

在这里插入图片描述

8、测试网络连通性

8.1、先在客户端一侧,ping服务器端一侧的虚拟网络设备tun0

ping 172.16.0.1 

在这里插入图片描述

8.2、在服务器端一侧,对eth0进行抓包分析

tcpdump -nn udp  -i eth0

在这里插入图片描述

注意,是UDP协议,而非ICMP协议。

8.3、在服务器端一侧,对tun0网卡进行抓包分析

tcpdump -nn -i tun0

在这里插入图片描述

很遗憾,非常准确的原因,目前没有查出来。

但是,也有一个解决办法;

8.4、解决转发客户端所有流量失败的措施?

在这里插入图片描述

8.5、重新编译,上传客户端,服务器端,重新启动服务

这里只展示了客户端的启动过程,服务器端跟以前一样,不再重复展示了。

./vtun-linux-amd64 -l :3000 -s 10.211.55.123:3001 -c 172.16.0.10/24 -k 123456 -g

在这里插入图片描述

8.6、在客户端上,测试是否能够ping通服务器端上的tun0设备?

8.6.1、先在服务器端上验证一下tun0的相关信息

ip a s tun0

ethtool -i tun0

在这里插入图片描述

8.6.2、登录到客户端上ping 服务器端的tun0虚拟网卡

ping 172.16.0.1 

在这里插入图片描述

这里验证了ICMP协议,

而TCP协议就不在具体展示了,是可以的。

8.7、在客户端上,测试一下,随便ping一个网络,是否能将客户端的流量转发到了服务器端上?

8.7.1、在客户端上,随便ping一个网络

ping 10.10.10.10

在这里插入图片描述

8.7.2、在服务端上,对eth0,tun0进行抓包分析

在这里插入图片描述

9、简单总结一下,转发客户端上所有流量的原理?

一个数据包是去走哪个网络,是根据路由表来决定的。

路由表里有多条路由,一条路由,代表一个网络。具体如何选择,大家可以详细研究一下。

至少新增了一条默认路由,也就是说当数据包不知道走哪条路由时,就会走默认路由

而通向默认路由的网卡设备就是tun0。

这样的话,至少转发了默认路由的流量。

如果是本机内部的流量是不用转发的。

如果是非本机的非默认路由流量的话,并没有测试。

在这里插入图片描述

10、总结

分享vtun主要是为大家提供了一个稍微复杂点的案例。

可以对从/dev/net/tun文件里读取到的数据包进行二次加工,

对加工后的数据,

再通过UDP链接发送出去。

最后,又重点分析了一下如何实现转发客户端的所有流量的功能。

11、学习心得分享

其实,在学习tun设备的过程中,网上关于go语言版本的tun编程还是比较少的。

大部分都是c,c++,python的

因此,类似的情况,大家可以在github里,搜索相关内容。

通过关键词搜索,比方说,tun tap vpn

在这里插入图片描述

将搜到的代码下载到本地,使用goland,idea等编辑打开,

使用全局搜索方式,查看是否有自己感兴趣的代码。
在这里插入图片描述


<<零入门kubernetes网络实战>>技术专栏之文章目录


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值