Linux上的物理网卡与虚拟网络设备

Linux上的物理网卡与虚拟网络设备,第1张

通过 ip link add 可以创建多种类型的虚拟网络设备,在 man ip link 中可以得知有以下类型的device:

Virtual Ethernet Port Aggregator。它是HP在虚拟化支持领域对抗Cisco的VN-Tag的技术。

解决了虚拟机之间网络通信的问题,特别是位于同一个宿主机内的虚拟机之间的网络通信问题。

VN-Tag在标准的协议头中增加了一个全新的字段,VEPA则是通过修改网卡驱动和交换机,通过发夹弯技术回注报文。

TUN是Linux系统里的虚拟网络设备,它的原理和使用在 Kernel Doc 和 Wiki 做了比较清楚的说明。

TUN设备模拟网络层设备(network layer),处理三层报文,IP报文等,用于将报文注入到网络协议栈。

应用程序(app)可以从物理网卡上读写报文,经过处理后通过TUN回送,或者从TUN读取报文处理后经物理网卡送出。

创建:

创建之后,使用 ip addr 就会看见一个名为”tun-default”的虚拟网卡

可以对tun-default设置IP:

使用open/write等文件 *** 作函数从fd中进行读取 *** 作,就是在收取报文,向fd中写入数据,就是在发送报文。

TAP是Linux系统里的虚拟网络设备,它的原理和使用在 Kernel Doc 和 Wiki 做了比较清楚的说明。

不同于TUN的是,TAP设备模拟链路层设备(link layer),处理二层报文,以太网帧等。

TAP设备的创建过程和TUN类似,在ioctl设置的时候,将类型设置为IFF_TAP即可。

TAP设备与TUN设备的区别在于:

有时我们可能需要一块物理网卡绑定多个 IP 以及多个 MAC 地址,虽然绑定多个 IP 很容易,但是这些 IP 会共享物理网卡的 MAC 地址,可能无法满足我们的设计需求,所以有了 MACVLAN 设备,其工作方式如下:

MACVLAN 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡。单独使用 MACVLAN 好像毫无意义,但是配合之前介绍的 network namespace 使用,我们可以构建这样的网络:

采摘

创建一个基于eth0的名为macv1的macvlan网卡:

macvlan支持三种模式,bridge、vepa、private,在创建的时候设置“mode XXX”:

bridge模式,macvlan网卡和物理网卡直接可以互通,类似于接入到同一个bridge。

vepa模式下,两个macvlan网卡直接不能直接通信,必须通过外部的支持“发夹弯”交换机才能通信。

private模式下,macvlan发出的广播包(arp等)被丢弃,即使接入了支持“发夹弯”的交换机也不能发现其它macvlan网卡,除非手动设置mac。

MACVTAP 是对 MACVLAN的改进,把 MACVLAN 与 TAP 设备的特点综合一下,使用 MACVLAN 的方式收发数据包,但是收到的包不交给 network stack 处理,而是生成一个 /dev/tapX 文件,交给这个文件:

由于 MACVLAN 是工作在 MAC 层的,所以 MACVTAP 也只能工作在 MAC 层,不会有 MACVTUN 这样的设备。

ipvlan和macvlan的区别在于它在ip层进行流量分离而不是基于mac地址,同属于一块宿主以太网卡的所有ipvlan虚拟网卡的mac地址都是一样的。

[图片上传失败...(image-d98b6f-1597455459947)]

veth设备是成对创建的:

创建之后,执行 ip link 就可以看到新创建的veth设备:

注意veth设备前面的ID, 58: 和 59: ,一对veth设备的ID是相差1的,并且系统内全局唯一。可以通过ID找到一个veth设备的对端。

veth设备理解

Intermediate Functional Block device,连接 ifb 中做了很详细的介绍。

网卡的配置

网卡配置文件

对于网卡信息的配置通常包括:配置IP地址、子网掩码和网关。网卡信息保存在网卡配置文件中。网卡配置文件位于/etc/sysconfig/network-scripts目录下。一块网卡对应一个网卡配置文件,配置文件命名规则:

ifcfg-网卡类型以及网卡的序列号

由于以太网卡类型是eth,网卡的序列号从0开始,所以第一块网卡的配置文件名称为ifcfg-eth0,第二块网卡为ifcfg-eth1,以此类推。

网卡配置文件中常用配置文件名的还以如下:

DEVICE=eth0,定义该网卡的识别名称。

BOOTPROTO=dhcp,启动该网卡的识别名称。

static/none:代表固定的IP地址;bootp/dhcp:通过BOOTP或DHCP协议取得IP地址。  

HWADDR=00:02:B3:0B:64:22,该网卡的MAC地址。  www.2cto.com

ONBOOT=yes,启动network服务时,是否启用该网卡。当RedHat系统启动network服务时,network服务一次读取保存于/etc/sysconfig/network-scripts/目录下所有网卡的配置文件。如果网卡配置文件的ONBOOT设置为yes,则network服务就会调用ifup命令启动该网卡;如果网卡的配置文件的ONBOOT参数为no,network会跳过启动这个网卡的工作。

TYPE=Ethernet,网卡的类型。

USERCTL=no,是否允许普通用户启动或者停止该网卡。

IPV6INIT=no,是否在该网卡上启动IPV6的功能。

PEERDNS=yes,是否允许网卡在启动时向DHCP服务器查询DNS信息,并自动覆盖/etc/resolv.conf配置文件。

以下配置项用于指定该网卡的静态IP地址,此时BOOTPROTO必须为static或者none。

IPADDR=192.168.1.55,静态方式指定网卡的IP地址。

NETMASK=255.255.255.0,定义该网卡的子网掩码。

MTU=1500,设置网卡的MAC帧最大传输单位大小。

GATEWAY=192.168.1.1,设置网络的默认网关。

DNS1=192.168.128.5,指定主要的DNS服务器地址。

DNS2=192.168.128.6,指定备用的DNS服务器地址。

2.配置网卡信息

配置网卡信息可以直接修改网卡配置文件中的相关内容,但是这种方法对用户的要求比较高。在RedHat Enterprise Linux5中常用于设置IP地址的三个命令,分别是:system-config-network、setup和ifconfig。其中ifconfig设置IP地址的方法将在常用命令部分中介绍。

(1)system-config-network命令  www.2cto.com

在命令提示行下输入system-config-network命令将会启动可视化网络配置界面(对于新手这个方式比较简单)

(2)setup设置网卡信息

在命令行下输入setup命令后将会进入系统设置界面,然后选择网卡设置进入网卡设置界面(很多系统都可以使用setup命令设置,运用比较广)

(3)ifconfig网卡常用命令

ifconfig命令的功能比较强大,可以用来查看和设置网卡信息。

a.查看网卡信息

命令语法:ifconfig [参数]

参数说明:

无参数:显示当前活动的网卡

- a:显示系统中所有网卡的配置信息

网卡设备名称:显示指定网卡的配置信息

eg:查看eth0网卡信息:#ifconfig eth0

b.设置IP地址

命令语法:ifconfig 网卡设备名 IP地址 netmask 子网掩码

(注:ifconfig命令设置的IP地址即时生效,但是重启机器后,IP地址又回复到原IP地址,所以ifconfig命令只能用于设置临时的IP地址)

eg:ifconfig eth0 192.168.168.156 netmask 255.255.255.0

c.修改MAC地址

命令语法:ifconfig 网卡设备名 hw ether MAC地址

(注:修改网卡的MAC地址前要禁用网卡,修改后要启用网卡)

eg:ifconfig eth0 hw ether 00:0C:29:03:F3:76

几个常用的命令:  www.2cto.com

1.ifdown禁用网卡

语法:ifdown 网卡设备名

2.ifup启用网卡

语法:ifup 网卡设备名

3.绑定IP和MAC地址

实现方法:创建/etc/ethers文件,文件内容“ip地址 mac地址”,然后执行“arp -f”命令,是配置生效。

eg:将IP地址193.168.168.154与MAC地址00:0C:29:03:F3:75绑定。

#echo "193.168.168.154 00:0C:29:03:F3:75">>/etc/ethers

#arp -f

    以前都是使用ifconfig来配置网络,今天开始尝试使用nmcli 。

1、网络接口名称

    centos7或者红帽7中,以en开头标识以太网,之前的版本是eth开头。同时,wl标识waln接口,ww标识wwan接口。

  接下里就是网卡类型, p代表pci物理位置,o代表板载,s代表热插拔。最后数字表示索引、id或端口。 比如笔者的虚拟机上enp0s3,pci网卡slot3。

    如果无法确定固定名称则采用传统的ethn的方式。

2、查看网络配置

    使用ip addr显示ip地址,ip addr show eth0显示网卡eth0 , ip -s link show eth0 显示连接状态,可用查看到数据包。netstat -i也可以罗列网卡并查看数据流量。

3、查看路由与排查

    ip route检查系统路由表,

    ping网关地址。ping -c4是ping 4次, timeout 4则是超时时间4秒。

    tracepath或者traceroute命令追踪到目标主机的网络状态。

4、端口与服务

    TCP服务使用套接字.socket作为通信的端点,其由IP地址、协议和端口组成。服务器通常监听标准端口,客户端使用随机可用端口。标准端口在/etc/services中列出。

    查看监听端口:ss和netstat命令。

  5、使用nmcli查看网络

    networkmanager是监控和管理网络的守护进程,可用通过命令行与图形界面来与networkmanager通信,并将配置文件保存在/etc/sysconfig/network-scripts目录中。

    使用nmcli查看网络信息:

    nmcli con show  查看网络接口

    nmcli con show --active  查看活动网络接口

    nmcli con show  "enp0s3"  查看enp0s3网络的详情信息

    nmcli device status 查看设备的信息

    nmcli device show enp0s3  查看 enp0s3设备的信息

  6、使用nmcli配置网络

    可以为网络设备配置多个网络连接(配置文件),但是一次只能由一个保持活动状态。

    创建一个"default"新连接,并使用dhcp获取网络。

    nmcli con add con-name "default" type ethernet ifname eth0

    创建一个静态连接,配置静态IP,并设置不自动连接。

    nmcli con add con-name "static" type ethernet ifname eth0 autoconnect no ip4 172.25.0.12/24 gw4 172.25.0.254

    更改为静态链接。

    nmcli con up "static"

    更改为dhcp链接。

    nmcli con up "default"

    查看使用信息。

    nmcli con  add  help

    修改配置,过多就不阐述了。

    nmcli con mod

    nmcli 命令摘要:

7、编辑网络配置文件

    接口配置文件时控制单个网络设备的软件接口,网络设备可以有多个配置文件,但是只有一个时激活状态。

ifcfg配置文件选项(辅助IP地址将配置文件中的选项添加1)

    配置过程:

a、修改 ifcfg配置文件

b、使用nmcli命令使配置生效或者重启进程

    nmcli con reload

    nmcli con down “ID”  ,nmcli con up “ID”

c、通过ping验证网络配置

8、主机名和名称解析

    hostname 查看主机名

    hostnamectl status 查看主机信息

    hostnamectl set-hostname 设置主机名

    静态主机名储存在/etc/hostname文件中。名称解析用于将主机名转为IP地址,反之亦可,在/etc/hosts中定义。

    可用使用getent hosts your_hostname,利用/etc/hosts来测试主机名解析。

    如果/etc/hosts中没有,则会查找/etc/ resolv.conf文件。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8633665.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存