虚拟局域网(VLAN)

关键词:veth、vlan、bridge、iptables、nat、tcpdump、icmp、cidr、arp、路由表、计算机网络协议栈

前言

在过去的几十年里,互联网发展得非常快。许多新兴技术迅速崛起,也有不少曾经的主流技术被淘汰。然而,有些技术因为其基础性和核心地位,一直在不断进步中保持着重要作用。
计算机网络就是其中之一。虽然网络架构和传输协议在不断更新,但其核心概念和原理一直都在发挥着关键作用,支撑着全球的信息交换。在这些技术中,网卡作为计算机连接网络的桥梁,起到了至关重要的作用。

网卡是什么?

网卡属于计算机硬件的一部分,是实现计算机数据传输的关键部件,最常见的有无线网卡和有线网卡,通常是直接或间接集成在计算机主板中,
它可以将计算机产生的数据发送到另一个网络,也可以将另一个网络的数据传递给我们的主机。

什么是虚拟网卡?

虚拟网卡是一种软件实现的网络接口,模拟了物理网卡的功能,使操作系统和应用程序可以通过它发送和接收网络流量。虚拟网卡在虚拟化、容器化的网络环境中发挥着重要的作用。

VETH——创建虚拟网卡及多个内部网络

环境:腾讯云轻量级应用服务器、CentOS 7操作系统

结构图

image-20240517101944754

Shell

# 创建三个网络命名空间用于隔离内部网络(查看命名空间:ip netns)
> ip netns add n1
> ip netns add n2
> ip netns add n3
# 创建三对虚拟网卡(查看网卡:ip link)
> ip link add veth0 type veth peer name veth1
> ip link add veth2 type veth peer name veth3
> ip link add veth4 type veth peer name veth5
# 为veth0、veth2、veth4分配ip地址
> ip addr add 192.168.0.1/24 dev veth0
> ip addr add 192.168.100.1/16 dev veth2
> ip addr add 192.167.0.1/16 dev veth4
# 将veth1、veth3、veth5分别移动到网络命名空间n1、n2、n3中
> ip link set veth1 netns n1
> ip link set veth3 netns n2
> ip link set veth5 netns n3
# 为veth1、veth3、veth5分配ip地址(ip netns exec前缀用来指定具体的网络命名空间)
> ip netns exec n1 ip addr add 192.168.0.2/24 dev veth1
> ip netns exec n2 ip addr add 192.168.100.2/16 dev veth3
> ip netns exec n3 ip addr add 192.167.0.2/16 dev veth5
# 启动网卡
> ip link set veth0 up
> ip netns exec n1 ip link set veth1 up
> ip link set veth2 up
> ip netns exec n2 ip link set veth3 up
> ip link set veth4 up
> ip netns exec n3 ip link set veth5 up

# 网络连通测试(仅用veth0、veth1示例,其他两对同理) 
> ping -I veth0 192.168.0.2
> ip netns exec n1 ping 192.168.0.1

小结

网络命名空间(netns)用来隔离三个虚拟以太网,成对出现的虚拟网卡(veth)在这里起到了类似于物理网线的作用。

VLAN——使用虚拟网桥连接多个局域网

结构图

image-20240517113259688

shell

# 创建虚拟网桥
> ip link add br-mybridge type bridge
# 将 veth0、veth2、veth4桥接到网桥中
> ip link set veth0 master br-mybridge
> ip link set veth2 master br-mybridge
> ip link set veth4 master br-mybridge
# 启动网桥
> ip link set br-mybridge up
# 修改主机路由表(删除旧路由+添加新路由)
> ip route del 192.168.0.0/24 dev veth0
> ip route del 192.168.0.0/16 dev veth2
> ip route del 192.167.0.0/16 dev veth4
> ip route add 192.168.0.0/16 dev br-mybridge
> ip route add 192.167.0.0/16 dev br-mybridge
# 添加命名空间内部的路由
> ip netns exec n1 ip route del 192.168.0.0/24 dev veth1
> ip netns exec n1 ip route add 192.168.0.0/16 dev veth1
> ip netns exec n1 ip route add 192.167.0.0/16 dev veth1
> ip netns exec n2 ip route add 192.167.0.0/16 dev veth3
> ip netns exec n3 ip route add 192.168.0.0/16 dev veth5
# 删除veth0、veth2、veth4的ip地址
> ip addr del 192.168.0.1/24 dev veth0
> ip addr del 192.168.100.1/16 dev veth2
> ip addr del 192.167.0.1/16 dev veth4
# 网络连通测试(仅用n1网络作为示例,其他两个网络同理) 
> ip netns exec n1 ping 192.168.100.2
> ip netns exec n1 ping 192.167.0.2

小结

虚拟网桥类似于物理交换机的作用,通过将多个虚拟网卡串联在一起实现内部通信功能。

深入思考:为什么网桥不需要设置ip地址?

因为网桥和物理交换机一样是工作在数据链路层基于mac地址转发帧(frame)的一种设备。如果该设备仅用来做转发功能,那么ip地址对其来说是可选的。

深入思考:为什么桥接后不修改路由表时,内部网络无法ping通原主机?

猜测:设置了桥接模式后,veth0/veth2/veth4的作用就仅仅是转发数据链路层的帧(frame)。此时ping命令产生的arp请求会转发给网桥br-mybridge进行处理,或许是网桥进行arp广播的时候veth0/veth2/veth4没有处理arp请求,所以导致无法通信。

NAT——使用iptables打通vlan和互联网

结构图

image-20240522145240147

shell

# 打开内核的ip转发功能:将net.ipv4.ip_forward=0 变更为 net.ipv4.ip_forward=1
> vim /etc/sysctl.conf
# 检查ip转发功能是否开启
> sysctl -p 
# 设置网关ip地址
> ip addr add 192.168.0.1/16 dev br-mybridge
# 设置子网的网关地址
> ip netns exec n1 ip route add default via 192.168.0.1 dev veth1
> ip netns exec n2 ip route add default via 192.168.0.1 dev veth3
> ip netns exec n3 ip route add default via 192.168.0.1 dev veth4
# (可选)关闭firewalld防火墙,因为firewalld防火墙是基于iptables的,所以会有很多规则可能会影响测试结果。生产环境切勿贸然尝试
> systemctl stop firewalld
# 添加br-mybridge与eth0的转发规则
> iptables -A FORWARD -i br-mybridge -o eth0 -j ACCEPT
> iptables -A FORWARD -i eth0 -o br-mybridge -j ACCEPT
# 添加nat规则
> iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 互联网连通测试(仅用n1网络作为示例,其他两个网络同理) 
> ip netns exec n1 curl baidu.com
> ip netns exec n1 ping 192.167.0.2

小结

通过iptables实现了虚拟网桥的路由功能,此时这里的虚拟网桥(br-mybridge)已经不仅仅只是做数据帧转发工作,同时还将基于ip协议转发网络层的数据包。所以这里br-mybridge的作用更相近于路由器

总结

本文通过veth讲解了虚拟局域网的通信方式,并通过虚拟网桥、iptables、nat等技术模拟了生活中比较常见的一些网络结构。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iPhone实况照片从Windows资源管理器复制的JPG+MOV无法正常还原到iPhone

背景: 之前使用的iPhone 15 Pro,使用的Windows资源管理器当中复制导出的实况照片,复制出来的格式例如IMG_0001.JPG, IMG_0001.MOV。之后手机就卖掉了。现在使用的iPhone 14 Pro Max,想要导回之前备份的实况照片。尝试使用爱思助手…

解决vue版本不一致导致不能正常编译

解决vue版本不一致导致不能正常编译 异常现象分析原因解决方案 异常现象 项目原本运行无异常,但安装了一个el-table-infinite-scroll的插件后,编译报错,截图如下 分析原因 vue版本与compile版本不一致,应该统一起来&#xff0…

网创教程:WordPress插件网创自动采集并发布

网创教程:WordPress插件网创自动采集并发布 使用插件注意事项: 如果遇到404错误,请先检查并调整网站的伪静态设置,这是最常见的问题。需要定制化服务,请随时联系我。 本次更新内容 我们进行了多项更新和优化&#x…

1.存储部分

1.Flash Memory--闪速存储器(注:U盘,SD卡就是闪存)在EEPROM基础上发展而来的,断电后也能保存信息,且可进行多次 快速擦除重写。注意:由于闪存需要先擦除再写入,因此闪存写的速度要比…

ssm141餐厅点菜管理系统+vue

餐厅点菜管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管…

Unity-Sprite Atlas+UGUI系统的运行原理

每日一句:别听世俗耳语,看自己的风景就好 目录 SA的原理: SA的优点: SA的缺点: DrawCall是什么? 批处理是什么? 我们先了解一下UGUI系统的运行原理吧! 提到图集优化&#xff0…

性能测试--线程的监控

1.线程的状态 1.1.线程的5种状态 java的线程总共有5种状态,如下: * 新建:new 【新建之后不启用都是new】* 运行:runnable* 等待:waitting(无限期等待),timed waitting(限期等待)* 阻塞:blocked* 结束&am…

C++ 求 f(x) = sin x / x 的函数极限

Python: import sympy from sympy import oo #注意无究符号表示形式为两个小定字母o import numpy as np x sympy.Symbol(x) #注意Symbol首字母大写f sympy.sin(x) / x # 定义极限表达式lim sympy.limit(f,x,oo) print(lim)输出: 0 C #include…

计网(部分在session学习章)

TCP/UDP TCP:面向连接,先三次握手建立连接,可靠传输。 UDP:无连接,不可靠,传递的快。 TCP可靠传输 1.分块编号传输; 2.校验和,校验首部和数据的检验和,检测数据在传输中的变化; 3.丢弃重复数据; 4.流量控制,TCP 利⽤滑动窗⼝实现流量控制。TCP的拥塞控制采⽤…

数据可视化第9天(利用wordcloud和jieba分析蝙蝠侠评论的关键字)

数据可以在这里下载 https://github.com/harkbox/DataAnalyseStudy WordCloud wordcloud可以很方便的生成词云图,方便的提供可视化可以直接使用pip install wordcloud进行安装如果使用的是Anaconda,可以使用conda install进行安装 下面看一个简单的例子 txt &qu…

在linux下的ROS中下载超级终端Terminator ROS开发得力助手

在一般我们运行机器人包时要打开三个终端来运行,关闭时还要一个一个关闭(ctrlc)过于麻烦 现在下载用了terminator后,就支持一键关闭多个终端了,很方便,具体操作如下: sudo apt install termin…

第十三期Big Demo Day聚焦Web3前沿,FaceN.AI项目路演揭幕创新技术

第十三期Big Demo Day活动即将于2024年5月28日在香港数码港的CyberArena隆重举行。FaceN.AI将亮相本次Big Demo Day,参与精彩的项目路演,展示其在跨链去中心化数字身份、On-chain to Off-chain数据应用、DIDFi探索以及元宇宙与AIGC人格化发展等领域的领先…

Gb 2024-05-22开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3非开发语言项目2Jupyter Notebook项目2Rust项目2JavaScript项目1Lua项目1编程面试大学:成为软件工程师的全面学习计划 创建周期:2…

talib 安装

这里写自定义目录标题 talib 安装出错 talib 安装出错 https://github.com/cgohlke/talib-build/releases 这里找到轮子 直接装。

BUUCTF [GUET-CTF2019]zips 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 得到一个attachment.zip文件 解题思路: 1、解压attachment.zip,得到222.zip文件。尝试解压需要密码,使用Ziperello爆破密码…

java连接ldap实现查询

文章目录 一、项目背景二、准备工作三、验证结果四、易错点讲解易错点1:java: 无法访问org.springframework.ldap.core.LdapTemplate易错点2:java: 无法访问org.springframework.context.ConfigurableApplicationContext易错点3:[LDAP: error…

WGCAT工单系统如何配置通知

WGCAT工单系统可以配置邮件通知 只要配置了邮件通知,那么一旦我们账号有新的工单需要处理,就会接受到邮件通知 除了邮件之外,还可以配置其他方式的通知,比如微信钉钉短信等方式,参考如下 https://www.wgstart.com/wgc…

RDD介绍

RDD设计背景 在实际应用中,存在许多迭代式计算,这些应用场景的共同之处是 : 不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入. 而目前的MapReduce框架都是把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销; 如果能将结果保存在内…

Docker安装、入门及VSCode链接(地平线OE docker镜像)

最近在地平线的SDK X3上做开发,有高手做了一些编译方法的对比: [X3容器应用开发探索-0]开篇:从裸机编译到交叉编译 X86 Qemu for Hobot X3 PI(AARCH64) vs Hobot X3 PI 这里想借助Docker编译提速,做个笔记: 目录 一、…

算法刷题笔记 高精度乘法(C++实现)

文章目录 题目描述解题思路解题代码 题目描述 给定两个非负整数(不含前导0)A和B,请你计算 AB的值。 输入格式 共两行,第一行包含整数 A,第二行包含整数 B。 输出格式 共一行,包含AB的值。 数据范围 …