虚拟局域网(VLAN)

news2024/9/20 22:28:49

关键词: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等技术模拟了生活中比较常见的一些网络结构。

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

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

相关文章

sqlserver 创建表,列及表,列描述

-- 创建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 为表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N员工信息表, level0type NSchema, level0name dbo, level1type N…

栈和队列的经典例题,LeetCode 括号匹配问题;栈实现队列;队列实现栈;队列带环问题

1.前序 又有很久没有更新文章了&#xff0c;这次带你们手撕几道基础题&#xff1b;真的就和康纳吃饭一样简单&#xff01;&#xff01;&#xff01; 如果还不会队列和栈的可以去看看之前写的博客&#xff1b; 栈的实现 队列概念以及实现 <- 快速传送 目录 1.前序 …

优化css样式的网站

一、按钮的css样式 https://neumorphism.io/#e0e0e0https://neumorphism.io/#e0e0e0 二、渐变样式 Fresh Background Gradients | WebGradients.com &#x1f48e;Come to WebGradients.com for 180 beautiful linear gradients in CSS3, Photoshop and Sketch. This collect…

Redisson-分布式锁单Redis节点模式

Redisson-分布式锁单Redis节点模式 为什么要用分布式锁&#xff1f; 使用分布式锁的主要目的是为了解决多线程或多进程并发访问共享资源时可能出现的竞争条件和数据一致性问题。举一些实际场㬌&#xff1a; 数据库并发控制&#xff1a;在分布式系统中&#xff0c;多个节点同…

【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)

web4 1 管理员阿呆又失败了&#xff0c;这次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…

抖音运营_如何做出优质的短视频

目录 一 短视频内容的构成 1 图像 2 字幕 3 声音 4 特效 5 描述 6 评论 二 短视频的热门类型 1 颜值圈粉类 2 知识教学类 3 幽默搞笑类 4 商品展示类 5 才艺技能类 6 评论解说类 三 热门短视频的特征 1 产生共鸣 2 正能量 3 紧跟热点话题 4 富有创意 四 短视…

计算机网络套接字知识(非常详细)从零基础入门到精通

本节重点 认识IP地址, 端口号, 网络字节序等网络编程中的基本概念; 学习socket api的基本用法; 一、预备知识 1.理解源IP地址和目的IP地址 ⭐在IP数据包头部中&#xff0c;有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。 思考: 我们光有IP地址就可以完成通信了…

spring boot 集成mongodb

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.2.0.RELEASE</version></dependency>配置db: spring:data:mongodb:host: 127.0.…

【C++高阶(一)】继承

目录 一、继承的概念 1.继承的基本概念 2.继承的定义和语法 3.继承基类成员访问方式的变化 ​编辑 4.总结 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 1.派生类中的默认构造函数 2.派生类中的拷贝构造函数 3.派生类中的移动构造函数…

Kubeadm安装部署k8s集群、踩坑日常

背景 ​ Docker是一个非常流行的容器化平台&#xff0c;它可以让我们方便构建、打包、发布和运行容器化应用程序。但是&#xff0c;在生产环境中&#xff0c;我们可能需要处理成百上千个容器&#xff0c;需要更好的管理这些容器&#xff0c;这就是Kubernetes(K8S)的用武之地。…

vue15:记事本vue指令案例

效果图&#xff1a; vue指令 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>帅临记事本</…

prometheusgrafananode_export搭建监控平台

一、环境要求 1、docker安装docker环境 2、docker安装prometheus 3、docker安装grafana 4、node-exportor(安装在被测服务器上) 5、我的服务器是Ubuntu 二、docker 安装prometheus 1、下载Prometheus镜像 docker pull prom/prometheus 2、检查端口是否被占用 安装netstat命…

24款奔驰S450升级原厂后排娱乐系统 主动氛围灯有哪些功能

24款奔驰S400豪华升级原厂主动氛围灯与后排娱乐系统&#xff1a;画蛇添足还是锦上添花&#xff1f; 在当今汽车市场竞争激烈的环境下&#xff0c;汽车制造商们为了满足消费者的多元化需求&#xff0c;不断推出各种升级配置和豪华版本。24款奔驰S400豪华版作为奔驰S级的一款重要…

碌时刻必备!微信自动回复让你告别消息堆积

在忙碌的时候&#xff0c;我们往往会面临消息堆积如山的情况。无法及时回复消息不仅容易造成交流障碍&#xff0c;还可能错过重要的机会。 但是现在&#xff0c;有一个神奇的工具——个微管理系统&#xff0c;可以帮助我们轻松应对这个问题 &#xff0c;实现微信自动回复。 首…

AIGC-风格迁移-style Injection in Diffusion-CVPR2024HighLight-论文精度

Style Injection in Diffusion: A Training-free Approach for Adapting Large-scale Diffusion Models for Style Transfer-CVPR2024HighLight 代码&#xff1a;https://github.com/jiwoogit/StyleID 论文&#xff1a;https://jiwoogit.github.io/StyleID_site/ 为了解决风格迁…

WXSS模板样式-全局样式和局部样式

一、WXSS 1.WXSS WXSS(WeiXin Style Sheets)是一套样式语言&#xff0c;用于美化WXML的组件样式&#xff0c;类似于网页开发中的CSS 2.WXSS和CSS的关系 WXSS具有CSS大部分特性&#xff0c;同时&#xff0c;WXSS还对CSS进行了扩充以及修改&#xff0c;以适应微信小程序的开发…

详解 Spring MVC(Spring MVC 简介)

什么是 Spring MVC&#xff1f; Spring MVC 是 Spring 框架提供的一个基于 MVC 模式的轻量级 Web 框架&#xff0c;是 Spring 为表示层开发提供的一整套完整的解决方案&#xff0c;Spring MVC 使用了 MVC 架构模式&#xff0c;将 Web 层职责解耦&#xff0c;基于请求驱动模型&…

26计算机操作系统408考研-操作系统进程与线程篇章(三)

操作系统进程与线程篇章 ` 文章目录 操作系统进程与线程篇章前言一、进程概念进程控制块进程创建进程终止进程的阻塞和唤醒进程唤醒进程挂起和激活线程多线程线程实现与线程模型总结互斥和同步并发原理硬件同步信号量机制信号量的应用管程经典同步问题消息传递前言 一、进程概…

Qt 科目一考试系统(有源码)

项目源码和资源&#xff1a;科目一考试系统: qt实现科目一考试系统 一.项目概述 该项目是一个基于Qt框架开发的在线考试系统&#xff0c;主要实现了考试题目的随机抽取、考试时间限制、成绩统计等功能。用户可以通过界面操作进行考试&#xff0c;并查看自己的考试成绩。 二.技…

清理安卓手机广告

保存脚本另存为 Fuck_AD.sh&#xff0c;在手机执行后体验效果。 echo ""echo " " echo " - 开始执行清理广告库文件" sleep 3files(/data/app/*/*/lib/arm64/libpangleflipped.so/data/app/*/*/lib/arm64/libzeus_direct_dex.so/data/app/*/*/l…