零入门kubernetes网络实战-31->基于bridge+veth pair+MASQUERADE技术实现内网可以访问外网

news2025/1/13 2:49:35

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

https://www.ixigua.com/7193641905282875942

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


本篇文章我们使用nat技术来实现bridge管理的网络能够访问外网。

1、测试环境介绍

两台centos虚拟机

# 查看操作系统版本
cat /etc/centos-release
# 内核版本
uname -a
uname -r 
# 查看网卡信息
ip a s eth0

在这里插入图片描述

2、网络拓扑

在这里插入图片描述

3、操作实战

3.1、在master上执行下面的命令

brctl addbr br0
ip link set br0 up
ip addr add 10.244.1.3/24 dev br0

ip netns add ns1

ip link add veth1a type veth peer name veth1b

ip link set veth1a netns ns1
ip netns exec ns1 ip addr add 10.244.1.2/24 dev veth1a
ip netns exec ns1 ip link set veth1a up

ip link set veth1b up

brctl addif br0 veth1b

ip netns exec ns1 route add default gw 10.244.1.3
iptables -t nat -A POSTROUTING -s 10.244.1.0/24 -o eth0 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

在这里插入图片描述

3.2、查看一下当前环境的状态

3.2.1、查看ns1命名空间下,路由情况

ip netns exec ns1 route -n

在这里插入图片描述

3.2.2、查看ns1命名空间下,ARP表的情况

该表存储的是目的IP跟目的MAC的对应关系。

ip netns exec ns1 arp -n

在这里插入图片描述

3.2.3、查看宿主机命名空间下的,路由情况

route -n

在这里插入图片描述

3.2.4、查看宿主机命名空间下的网桥br0的情况

bridge fdb show br br0

在这里插入图片描述

3.2.5、查看宿主机命名空间下的arp情况

arp -n

在这里插入图片描述

3.3、在master节点对br0进行抓包

tcpdump -nn -i br0

tcpdump -nn -i br0 -w icmp-br0.pcap

将icmp-br0.pacp导入到Wireshark里,进行分析。

在这里插入图片描述

3.4、在master节点对eth0进行抓包

tcpdump -nn -i eth0 icmp

tcpdump -nn -i eth0 icmp -w icmp-eth0.pcap

在这里插入图片描述

3.5、在宿主机上,ns1命名空间里发起icmp请求

ip netns exec ns1 ping 10.211.55.123

ip netns exec ns1 ping -c 1 10.211.55.123

在这里插入图片描述

3.6、重新查看ns1命名空间下,ARP表的情况

ip netns exec ns1 arp -n

在这里插入图片描述

在ns1命名空间里,ping 10.211.55.123时,

首先查询ARP表,查看是否有10.211.55.123IP跟MAC地址的对应关系

发现没有,于是发送ARP广播,

但是,ARP广播的作用域只能是本地局域网呢,禁止跨域的

通过ARP广播后,发现还是没有目的地址的MAC

因此,只能将ARP数据包发送给网关地址

网关接收到后,会将自己的MAC地址发送给veth1a

因此,veth1a里存储的是网桥br0的MAC地址

在这里插入图片描述

4、echo 1 > /proc/sys/net/ipv4/ip_forward 命令说明

4.1、这条命令实现的效果?

实现数据包的转发功能

临时生效的

4.2、什么是数据包的转发功能?

那到底什么是数据包的转发功能呢?

当主机拥有多于一块的网卡时,其中一块网卡收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,

该网卡根据路由表继续发送数据包。

这通常就是路由器所要实现的功能。

https://zhoupeng.blog.csdn.net/article/details/125597375

4.3、如何将数据包的转发功能永久生效呢?

上面的命令仅仅是临时生效的。
如果想永久生效的,
操作如下

grep 'net.ipv4.ip_forward = 1' /etc/sysctl.conf || echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

先通过grep来获取目标属性,如果存在的话,就说明宿主机已经实现了数据包的转发功能
不存在的话,执行||后面的语句,

4.4、以本试用例说明

本测试用例中存在虚拟网桥bridge,以及物理eth0网卡

数据包由bridge到达eth0需要宿主机开启数据包的转发功能。

5、通过MASQUERADE后,数据包的报文内容是否被修改了?

在master节点上,根据前面对虚拟网桥br0, 物理网卡eth0进行抓包,分析。

可以绘画出下面的数据包流转图:

在这里插入图片描述

通过MASQUERADE后,将数据包的源IP进行了修改

由于数据包是通过eth0发送出去的,修改了源MAC地址,目的MAC地址

6、继续延伸一下:思考一个问题:当122节点收到123节点的反馈数据包时?122节点的网卡eth0怎么知道将数据包转发给网桥呢?

从上面的图中可以看出来从122节点发送到123节点的数据包中的源MAC,目的MAC,源IP全部被修改了,那么,

122节点收到123节点的反馈数据包时,源MAC地址,目的Mac地址,源IP,目的IP刚好跟发送的完全相反

如下图所示:

在这里插入图片描述

现在要思考的是,122节点的网卡eth0收到数据包后,122节点如何知道将数据包转发给网桥br0?

因为,单纯看数据包是看不出来的。

背后实现原因是:
似乎是在进行NAT操作时,往内核里注册里NAT操作相关的注册表,有了相关记录。

然后,根据链路追踪实现的。

我仅仅做了一些简单的测试,如下

添加了一些日志埋点,观察一下iptables日志

iptables -t nat -I POSTROUTING -p icmp -m state --state NEW -j LOG --log-prefix "nat2-output-"

iptables -t nat -A PREROUTING -p icmp -j LOG --log-prefix "nat3-prerouting-" 

iptables -t filter -A FORWARD -p icmp -j LOG --log-prefix "filter-forward-" 

在这里插入图片描述

普通的ping命令

ping 10.211.55.123

很遗憾,最终没有真正的搞清楚。

其实,我是希望在数据包中能够找到一个标志位,通过标志位来判断是否进行了nat操作。

后来想了一下,可能有问题,因为tcp,ip ,udp,以太网帧等协议的数据包中,应该没有这个标志位的。

暂时,也不知道深入研究了。

7、从iptables链的角度,对整个过程进行分析

为了分析整个传输过程,我们添加一些日志埋点,来验证我们的猜测。

如果你已经根据前面的文章安装过了rsyslog服务,就不需要重复操作了

7.1、安装

7.1.1、安装rsyslog服务

yum -y install rsyslog

7.1.2、更新配置文件

echo "kern.*     /var/log/iptables.log" >> /etc/rsyslog.conf 

在这里插入图片描述

.*,表示所有等级的消息都添加到iptables.log文件里

信息等级的指定方式

  • .XXX,表示 大于XXX级别的信息
  • .=XXX,表示等于XXX级别的信息
    • 如,kern.=notice /var/log/iptables.log, 将notice以上的信息添加到iptables.log里
  • .!XXX, 表示在XXX之外的等级信息

7.1.3、重启rsyslog服务

systemctl restart rsyslog

systemctl status  rsyslog

在这里插入图片描述

7.2、日志埋点

7.3、在master节点上,进行日志埋点

将当前的日志统计清零

iptables -t nat -Z
iptables -t filter -Z

插入日志埋点前,先查看一下,当前的现状

iptables -t nat -nvL PREROUTING --line-number
iptables -t filter -nvL FORWARD --line-number
iptables -t nat -nvL POSTROUTING --line-number

插入日志埋点

iptables -t nat -I PREROUTING -p icmp -j LOG --log-prefix "Nat-PREROUTING-1-"
iptables -t filter -A FORWARD -p icmp -j LOG --log-prefix "Filter-FORWARD-1-"
iptables -t nat -I POSTROUTING -p icmp -j LOG --log-prefix "Nat-POSTROUTING-1-"

7.4、在master节点上,重新发起请求

在真正发起请求前,先实时追踪日志状态

tail -f /var/log/iptables.log

重新打开一个shell终端,在master节点上查看日志文件

ip netns exec ns1 ping 10.211.55.123

ip netns exec ns1 ping -c 1 10.211.55.123

在这里插入图片描述

查看一下,iptables日志
在这里插入图片描述

7.5、在使用了MASQUERADE后,请求过程经过了哪些iptables链?

在这里插入图片描述

8、总结

本篇文章说了很多,其实,重点想表达的只有下面几个

  • 当本宿主机上的内部网络想访问外部网络的话,可以通过SNAT,MASQURAED操作,修改数据包的源IP地址为本宿主机对外的IP 地址,这样的话,本宿主机接收到对方的回馈数据包后,只要进行数据包转发,转发到内网即可。
    • 为什么内网访问外网时,必须使用snat这样的方案呢?我们在veth相关文章中已经总结过了,这里再总结一下。
      • 当本宿主机A的内网访问本宿主机A所在网段的其他宿主机时(假设访问的是B宿主机),B宿主机是可以接收到数据包的;此时,B宿主机收到的数据包中的源IP是A宿主机的内网IP
      • 当B宿主机进行回复时,发现通过ARP协议获取不到A宿主机里内网IP的MAC,此时,B宿主机就将目的MAC设置为了A网段的网关的MAC地址,然后,发送数据包
      • 当A宿主机收到B宿主机的回复的数据包时,发现MAC地址,并非是自己的,就丢弃了。
      • 也就是说,不做SNAT的情况下,数据包可以达到目的服务器,但是,目的服务器进行回复的时候,出现了问题。
      • 因此,需要使用SNAT这样的技术,再发送数据包时,将数据包的源IP改为本宿主机对外的IP,这样,目的服务器进行回复的时候,就可以将数据包回复到源宿主机上,然后,再内部转发即可。
  • 数据包再发送过程中,跨网段的话,会修改源MAC地址,目的MAC地址
  • 到底什么是数据包的转发
  • 当访问的目的地址IP是跨网段的话,那么,本节点发送出去的数据包的目的MAC地址,是本局域网关的MAC地址,如上面的veth1a发送的数据包的目的MAC地址是br0的MAC地址

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/501815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(5)Qt—ui常用类

目录 1. QString 字符串类* 2. 容器类 2.1 顺序容器 QList 1. QString 字符串类* QString是Qt中的字符串类&#xff0c;与C和C不同的是&#xff0c;Qt的字符串使用Unicode编码。每一个字符使用一个16位的QChar&#xff0c;而不是之前8位的char&#xff0c;所以Qt处理中文没有问…

基于ssm医药药品管理系统

开发工具eclipse&#xff0c;jdk1.8 数据库mysql5.7,tomcat8 技术&#xff1a;springmvcspringmybatis(ssm) 主要功能如下&#xff1a; ①登录系统&#xff1a;管理员需要输入正确的用户名和密码来登录系统&#xff0c;从而完成各类信息的管理工作&#xff1b; ②信息查询…

前端007_类别模块_列表功能

1、需求分析 类别模块主要文章类别进行管理,首先实现类别列表功能,包含数据列表、分页、条件查询 。 2、Mock模拟接口数据 请求URL: /article/category/search请求方式: post描述: 文章类别分页条件查询列表mock.js 配置: 带分页功能,每页显示20条{"code": 2…

【网络取证篇】宝塔面板server和panel的目录功能说明

【网络取证篇】宝塔面板server和panel的目录功能说明 宝塔面板的目录结构在不同的情况下可能有所不同—【蘇小沐】 文章目录 【网络取证篇】宝塔面板server和panel的目录功能说明1、宝塔优点&#xff1a; &#xff08;一&#xff09;宝塔面板/www/server主要目录&#xff08;二…

每天一道算法练习题--Day25 第一章 --算法专题 --- ----------蓄水池抽样

蓄水池抽样 问题描述算法描述相关题目总结 力扣中关于蓄水池抽样问题官方标签是 2 道&#xff0c;根据我的做题情况来看&#xff0c;可能有三四道。比重算是比较低的&#xff0c;大家可以根据自己的实际情况选择性掌握。 蓄水池抽样的算法思维很巧妙&#xff0c;代码简单且容易…

TFT屏幕在arduino (esp 32)下的驱动,汉字显示和字库比较

一、TFT屏幕的驱动列表支持 绝大多数的tft屏幕在esp32 下都可以被 TFT_eSPI 驱动显示&#xff0c;以下清单中的驱动模块都可以用tft_espi来显示&#xff1a; // #define ILI9341_DRIVER // Generic driver for common displays //#define ILI9341_2_DRIVER // Alter…

借助国内ChatGPT平替+MindShow,飞速制作PPT

系列文章目录 后续补充 文章目录 系列文章目录前言一、科大讯飞“星火”认知大模型介绍二、使用步骤1.借助讯飞星火生成ppt的文案2.借助MindShow生成ppt 前言 随着人工智能技术的不断发展&#xff0c;越来越多的企业和个人开始利用自然语言处理技术来提高工作效率。其中&#…

【移动端网页布局】flex 弹性布局 ⑥ ( 设置主轴方向和是否自动换行 | flex-flow 样式说明 | 代码示例 )

文章目录 一、设置主轴方向和是否自动换行 : flex-flow 样式说明1、flex-flow 样式2、flex-flow 样式属性值 二、代码示例 一、设置主轴方向和是否自动换行 : flex-flow 样式说明 1、flex-flow 样式 flex-flow 样式 是 flex-direction 属性和 flex-wrap 属性的 复合写法 ; 设置…

Redis底层结构

https://mp.weixin.qq.com/s/MGcOl1kGuKdA7om0Ahz5IA 小林coding 介绍 Redis 数据结构并不是指 tring&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Hash&#xff08;哈希&#xff09;、Set&#xff08;集合&#xff09;和 Zset&#xff08;有序集合&am…

日撸 Java 三百行day43-44

文章目录 说明day43 插入排序思路代码 day44 希尔排序思路代码 对比 说明 闵老师的文章链接&#xff1a; 日撸 Java 三百行&#xff08;总述&#xff09;_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护&#xff1a;https://github.com/fulisha-ok/sampledat…

磁盘空间不足怎么办?释放磁盘空间的4种方法

虽然现在硬盘的空间越来越大&#xff0c;但是在这个数据爆炸的时代中&#xff0c;总是会觉得存储空间不够用&#xff0c;一不注意磁盘就满了&#xff0c;那么除了清空回收站、卸载某些程序外&#xff0c;还能怎么释放磁盘空间呢&#xff1f; 方案一&#xff1a;禁用休眠 休眠是…

KD305Y带吸收比极化指数兆欧表

一、概述 KD305Y绝缘电阻测试仪对众多的电力设备如&#xff1a;电缆、电机、发电机、变压器、互感器、高压开关、避雷器等要求做一系列的绝缘性能试验&#xff0c;首先是要做绝缘电阻测试。近年来随着电力事业的飞速发展,大容量设备的使用不断增加&#xff0c;用普通的兆欧表无…

Springboot +Flowable,服务任务ServiceTask执行的三种方式(二)

一.简介 ServiceTask 从名字上看就是服务任务&#xff0c;它的图标是像下面这样&#xff0c;截图如下&#xff1a; ServiceTask 一般由系统自动完成&#xff0c;当流程走到这一步的时候&#xff0c;不会自动停下来&#xff0c;而是会去执行我们提前在 ServiceTask 中配置好的…

ubuntu下用VirtualBox安装Windows虚拟机

1.准备工作 从清华大学信息门户——公共服务及其他——软件资源——公共软件——操作系统——Windows11处下载对应的ios系统安装软件 注意下载后将文件名中的 “ .IOS ” 大写改为 “ .ios ” 小写&#xff0c;否则后续虚拟机无法直接识别 问题提示&#xff1a; 解决iso文件不…

【unity造轮子】2d敌人AI的实现,并自动躲避障碍物

最终效果 插件链接: https://download.csdn.net/download/qq_36303853/87762376 导入AI插件 新建空物体,添加PathFinder组件,用在地图导航 渲染导航路径,绘制出来的蓝色部分则为可行走区域,非蓝色区域是我配置的碰撞器区域,可自行修改,如果不满意可以修改Diameter的…

Aztec Hybrid Rollup:混合zkRollup,而非zkEVM

1. 引言 Aztec zkRollup为混合zkRollup&#xff1a; 支持通用私有计算的加密zkRollup&#xff08;命名为Aztec&#xff09;&#xff1a;构建trustless、可扩展的、去中心化的Layer2 zkRollup&#xff0c;同时支持private smart contract execution。同时支持public state和pr…

云原生介绍

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130540430 一、云原生的概念 云原生的整体概念思路是三统一&#xff0c;即统一基础平台、统一软件架构、统一开发流程。 基于统一的基础平台、软件架构以及开发流程&#xff0c;数字化转型和云化转型能…

04- 评价指标mAP (目标检测)

要点&#xff1a; Precision (准确率 )&#xff1a;TP/(TPFP)&#xff0c;即模型给出的所有预测结果中命中真实目标的比例。Recall (召回率)&#xff1a;TP/(TPFN)&#xff0c;被找到的正确目标和所有正确目标的比值。 官方文档&#xff1a;https://cocodataset.org/#detectio…

用Python批量生成word文档

楼主有个同事妹子每天都做重复性工作而且加班到很晚。这是楼主出于兴趣帮她写的的批量生成保密协议word文档的脚本&#xff0c;共享给大家使用~1小时的工作&#xff0c;用脚本5秒钟即搞定有木有~ copy到本地存成.py文件即可使用&#xff0c;生成的文件是这样的&#xff1a; #创…

MySQL基础(十一)数据处理之增删改

1. 插入数据 1.1 实际问题 解决方式&#xff1a;使用 INSERT 语句向表中插入数据。 1.2 方式1&#xff1a;VALUES的方式添加 使用这种语法一次只能向表中插入一条数据。 情况1&#xff1a;为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....)…