1 linux虚拟网络基础

1.1 Device

在linux里面devic(设备)与传统网络概念里的物理设备(如交换机、路由器)不同,Linux所说的设备,其背后指的是一个类似于数据结构、内核模块或设备驱动这样的含义。就是说device可能只是软件系统里的一个驱动,一个函数接口。

1.2 Tap

Tap位于二层数据链路层,tun位于三层网络层,两者在linux里的函数结构几乎一致,除了一个flag值区分tap/tun。在linux中二层特指以太网(Ethernet)(传统网络里二层分Ethernet,P2P,HDLC,FR,ATM),因此有时tap也叫“虚拟以太设备”。有意思的是linux创建tap需要用到tun模块。Linux创建tap/tun都使用tun模块。

1.3 Namespace

Namespace类似传统网络里的VRF,与VRF不同的是:VRF做的是网络层三层隔离。而namespace隔离的更彻底,它做的是整个协议栈的隔离,隔离的资源包括:UTS(UnixTimesharing System的简称,包含内存名称、版本、 底层体系结构等信息)、IPS(所有与进程间通信(IPC)有关的信息)、mnt(当前装载的文件系统)、PID(有关进程ID的信息)、user(资源配额的信息)、net(网络信息)。

从网络角度看一个namespace提供了一份独立的网络协议栈(网络设备接口、IPv4/v6、IP路由、防火墙规则、sockets等),而一个设备(Linux Device)只能位于一个namespace中,不同namespace中的设备可以利用vethpair进行桥接。

1.4 veth pair

veth pair不是一个设备,而是一对设备,以连接两个虚拟以太端口。操作vethpair,需要跟namespace一起配合,不然就没有意义。如图

1.5 Bridge

在Linux的语境里,Bridge(网桥)与Switch(交换机)是一个概念。因为一对veth pair只能连接两台device,因此如果需要多台设备互联则需要bridge。

如图:4个namespace,每个namespace都有一个tap,每个tap与网桥vb1的tap组成一对veth pair,这样,这4个namespace就可以二层互通了。

1.6 Router

Linux创建Router并没有像创建虚拟Bridge那样,有一个直接的命令brctl,而且它间接的命令也没有,不能创建虚拟路由器……因为它就是路由器(Router) !

如图:我们需要在router(也就是我们的操作系统linux上增加去往各NS的路由)。

1.7 tun

tun是一个网络层(IP)的点对点设备,它启用了IP层隧道功能。Linux原生支持的三层隧道。支持隧道情况:ipip(ipv4 in ipv4)、gre(ipv4/ipv6 over ipv4)、sit(ipv6 over ipv4)、isatap(ipv6/ipv4隧道)、vti(ipsec接口)。

学过传统网络GRE隧道的人更容易理解,如图:

NS1的tun1的ip 10.10.10.1与NS2的tun2的ip 10.10.20.2建立tun

NS1的tun的ip是10.10.10.1,隧道的外层源ip是192.168.1.1,目的ip是192.168.2.1,是不是跟GRE很像。

1.8 iptable

我们通常把iptable说成是linux的防火墙,实际上这种说法并不准确。实际上iptable只是一个运行在用户空间的命令行工具,真正实现防火墙功能的是内核空间的netfilter模块。

这里我们先知道防火墙执行模块netfilter位于内核空间,命令行iptable位于用户空间。我们在通过iptable配置的防火墙策略(包括NAT)会在netfilter执行。

iptables有5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

l PREROUTING:报文进入网络接口尚未进入路由之前的时刻;

l INPUT:路由判断是本机接收的报文,准备从内核空间进入到用户空间的时刻;

l FORWARD:路由判断不是本机接收的报文,需要路由转发,路由转发的那个时刻;

l OUTPUT:本机报文需要发出去 经过路由判断选择好端口以后,准备发送的那一刻;

l POSTROUTING:FORWARD/OUTPUT已经完成,报文即将出网络接口的那一刻。

DNAT用的是PREROUTING,修改的是目的地址,SNAT用的是POSTROUTING,修改的是源地址。

Iptable有5个表:filter,nat,mangle,raw, security,raw表和security表不常用。主流文档都是说5链4表,没有包括security表。

l Raw表——决定数据包是否被状态跟踪机制处理

l Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS

l Nat表——用于网络地址转换(IP、端口)

l filter表——过滤数据包

l security 表(用于强制访问控制网络规则,例如:SELinux)

4个表的优先级由高到低的顺序为:raw-->mangle-->nat-->filter。RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

下面讲下数据包流向与处理:

1. 如果是外部访问的目的是本机,比如用户空间部署了WEB服务,外部来访问。数据包从外部进入网卡----->PREROUTING处理----->INPUT处理----->到达用户空间程序接口,程序处理完成后发出----->OUTPUT处理----->POSTROUTING处理。每个处理点都有对应的表,表的处理顺序按照raw-->mangle-->nat-->filter处理。

2. 如果用户访问的目的不是本机,linux只是一个中转(转发)设备,此时需要开启ip forward功能,数据流就是进入网卡-----> PREROUTING处理-----> FORWARD处理-----> POSTROUTING处理。

1.8.2 NAT

Netfilter中的NAT有三个点做处理,

(1) NAT-PREROUTING (DNAT)

数据报文进入PREROUTING,NAT模块就会处理,比如用户空间的WEB服务私网地址192.168.0.1,对外提供公网ip是220.1.1.1。

当外部ip访问220.1.1.1时,PREROUTING接受数据包,NAT模块处理将目的ip 220.1.1.1转换为私网ip192.168.0.1,这就是DNAT。

(2) NAT-POSTROUTING (SNAT)

用户空间应用程序访问外部网络,比如用户空间应用程序访问114.114.114.144,私网ip 192.168.0.1,此时数据包流经POSTROUTING,NAT模块会处理,将192.168.0.1转换为220.2.2.2,对于目的ip114.114.114.114来说,就是220.2.2.2访问它,这就是SNAT。

(3) NAT-OUTPUT (DNAT)

我们把内核空间想象成一台防火墙,防火墙自身对外发送报文访问外部时,就在OUTPUT做DNAT,此时不需要再POSTROUTING点再做NAT。因为此时从OUTPUT出来的源IP已经是公网地址了

1.8.3 Firewall

防火墙根据规则执行accept/reject动作,防火墙规则的元素如下:

入接口、出接口、协议、源地址/子网、目的地址/子网、源端口、目的端口。

Netfilter中的Firewall会在这三个点进行处理:INPUT/FORWARD/OUTPUT

1.8.4 Mangle

mangle表主要用于修改数据包的ToS( Type of Service,服务类型)、 TTL(Time to Live,生存周期)以及为数据包设置Mark标记,以实现QoS(Qualityof Service,服务质量)调整以及策略路由等应用。Netfilter每个点都可以做mangle。

1.9 总结

tap、tun、vethpair在Linux中都被称为设备,但是在与日常概念的类比中,常常被称作接口。而bridge和router这些日常称为设备的再linux中反而不称为设备。linux利用namespace做隔离,Bridge提供二层转发功能,Router提供三层转发功能。Router还常常借助iptable提供SNAT/DNAT功能。Bridge也常常借助iptable提供Firewall功能。

6 linux 制作raw命令_云计算网络知识学习-linux网络基础相关推荐

  1. linux 路由跟踪命令_云计算网络知识学习-linux网络基础

    1 linux虚拟网络基础 1.1 Device 在linux里面devic(设备)与传统网络概念里的物理设备(如交换机.路由器)不同,Linux所说的设备,其背后指的是一个类似于数据结构.内核模块或 ...

  2. linux定时关机命令_软件设计师必知Linux命令 | 推荐收藏~

    Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心. 线上查询及帮助 ...

  3. linux 查看防火墙状态_每天五分钟学习Linux系列之 - 系统安全配置

    20年IT从业,二哥的团队使用最多的系统就是Linux,开发,运维的小伙伴们都离不开Linux系统,特别是大数据和人工智能领域更是如此,但由于日常工作忙,小伙伴们没有太多成块的时间系统的学习Linux ...

  4. 6 linux 制作raw命令_Linux如何修片?4款Linux下的Raw格式照片编辑器推荐

    如今大多现代单反相机都拥有拍摄Raw格式照片的能力,Raw格式是一种无损格式,可以让你对照片的各种变量拥有更好的后期控制能力.可控的范围从最基本的白平衡和曝光,到曲线调整.镜头矫正等不一而足. 如今大 ...

  5. linux运行隐藏文件,Linux下如何隐藏文件_网站服务器运行维护,Linux,隐藏文件

    linux系统怎样安装软件_网站服务器运行维护 linux系统安装软件的方法:1.使用apt命令进行安装,如[apt install app_name]:2.使用rpm命令进行安装,如[rpm -i ...

  6. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  7. 网络知识入门:路由器基础知识全接触

    网络知识入门:路由器基础知识全接触 发布时间:2008.05.29 07:01     来源:赛迪网    作者:月伴雨 路由器综述 路由器是互联网的主要节点设备.路由器通过路由决定数据的转发.转发策 ...

  8. linux整行剪切_云计算人员如何提高效率 要掌握哪些Linux命令

    云计算人员如何提高效率?要掌握哪些Linux命令?随着开源软件的流行以及互联网的高速发展,Linux成功取代Unix成为最受青睐的云计算操作系统.想要学好云计算一定要掌握Linux,接下来就给大家分享 ...

  9. setfacl命令_一名合格的Linux运维人员应该掌握哪些命令?

    Linux基金会(LinuxFoundation)正式宣布已有22个新组织加入基金会,这意味着Linux的未来前景更加广阔,也将促使更多的人学习并加入Linux开发行列.在学习Linux的过程中,很多 ...

最新文章

  1. 实验六 快速生成树配置
  2. python语言代码片段-有用的Python代码片段
  3. java元素符号是什么_Java 代码中 @ 符号是什么意思?
  4. 重复类发展手法_正确的护肤手法(动态演示),喜欢就拿去收藏吧!
  5. 猜拳游戏php代码,最常见的猜拳小游戏Android代码实现
  6. ASP.net的RUL重写
  7. 用JS实现自动提取身份证的出生日期
  8. windows “文件大小”与“占用空间”、文件系统与文件拷贝
  9. 字段缩写ti表示什么_EBSCOhost数据库中,检索字段代码为TI、SO、AU分别表示
  10. 统计学习方法第一章思维导图
  11. MyDLNote-High-Resolution: CooGAN: 协同GAN网络,高分辨率面部属性的高效记忆框架
  12. Latex中BibTex编辑参考文献
  13. 计算机之父,你知道是谁吗?
  14. 云计算是什么 如何分类 有什么
  15. hadoop 四种压缩格式
  16. 洛谷 P2657 [SCOI2009] windy 数 (题解+代码)
  17. elementui表格如何自定义表头内容,让表头变得更美观
  18. Docker技术研究
  19. 【CKF3】2015-6-2更新
  20. 快速搭建自己的 KMS 服务器

热门文章

  1. lisp删除块中图元_DeleteBlocks
  2. Java虚拟机(JVM)概念简介
  3. linux转换大小写的脚本代码,文件名大小写转换的shell脚本
  4. checkbox取值 php_php获取checkbox复选框的内容
  5. ARM中断产生和管理
  6. python界面gui随机生成器_Python 实现的、带GUI界面的词云生成器
  7. Java 算法 解二元一次方程
  8. ctf 抓捕赵德汉_2017年网络空间安全技术大赛部分writeup
  9. 创建的函数带有编译错误。_AST实现函数错误的自动上报(原理到实践)
  10. 随机调用mysql数据库表值10条php_PHP随机显示mysql数据库中的数据