零入门kubernetes网络实战-24->介绍开源社区提供的tun案例
创始人
2025-05-31 12:54:20
0

《零入门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.shscp:scp bin/* root@10.211.55.122:/rootscp bin/* root@10.211.55.123:/rootall: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 tun0ethtool -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网络实战>>技术专栏之文章目录


相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...