Linux网络接口和VLAN配置

2023-05-16

在以往Linux的使用中很少会涉及VLAN和网络的配置,因为多数的服务部署集中在应用层面而非底层网络(switch/route/vlan/interface),系统安装时默认生成的网络配置已经足够应对实际需求,近来需要部署一台服务器,涉及到众多VLAN的配置,因此重新梳理了下Linux系统在网络层面配置的基础内容,在常见的Linux发行版中CentOS类系统和Debain类系统在网络配置理念以及相应的实现上存在一定的区别,网络上流传的资料中则混淆了两者,也许之前的两类发行版确实存在配置的兼容性,但在两类系统的自我风格越来越明显的今天,很有必要对上述两类发行版区别对待了解其各自的配置理念和方法。

1.udev - Linux dynamic device management

本人至今没有关于udev的准确认知,只是大概的理解为Linux内核目前采用的设备文件管理方案,不满意这个解释的同学可以自行搜索资料,最简易的方法就是直接man udev查看udev的man手册,在udev的使用上各个发行版没有差别,毕竟使用的都是Linux内核,udev管理配置计算机所有可以称之为设备的设备,网络接口设备(俗称网卡)只是其中之一,udev使用所谓的rules文件描述和记录设备信息,网络设备rules文件名为70-persistent-net.rules,固定存储路径为/etc/udev/rules.d/70-persistent-net.rules,该文件内容格式如下:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:13:99:70", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="oam"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:13:99:71", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="traffic"

文件中的item描述对应的physical network interface信息,从上述文件的描述中可以看出该系统有两块物理网卡,并使用NAME参数定义了接口在系统中的名字,因此该文件最常见的应用是自定义物理接口名字,一般网络接口会被系统命令为eth<n>的形式,在上述描述中第一块网口被命名为oam,第二块则命名为traffic

该命名会显示在ifconfig -a命令回显的接口列表中,一般情况下,更改完70-persistent-net.rules文件后,CentOS类系统使用service network restart生效该设置,Debain类系统使用service networking restart生效该设置,或者直接重启系统生效。

经过验证CentOS类系统SUSE在系统安装完成后会自动生成70-persistent-net.rules文件,而Debain类系统Ubuntu则不会生成该文件,但可以使用系统自带的udev脚本生成该文件,脚本路径为/lib/udev/write_net_rules,该脚本为shell脚本,执行需要指定两个环境变量INTERFACEMATCHADDR,前者为网口的名字,后者为网口的mac地址,因此建议先使用ifconfig -a命令查看物理网口的mac地址和name,然后定义上述环境变量,脚本每执行一次就会在rules文件中添加一行item。

export INTERFACE=“first”
export MATCHADDR=00:0c:29:15:b0:2d

2.interface configuration

一般情况下ifconfig -a命令回显列表中就只有物理网口和特殊的loopback接口,SUSE系统会为每一个physical & lo interface建立各自的配置文件/etc/sysconfig/network/ifcfg-<interface>,而Ubuntu系统所有的网口的配置都集中在一个配置文件/etc/network/interfaces

关于ifcfg格式的配置文件信息可以man ifcfgintefaces文件信息可以man interfaces

CentOS - SUSE

该类发行版使用ifcfg格式配置文件,统一存放在/etc/sysconfig/network/目录下,文件与interface一一对应,命名格式为ifcfg-<interface>,常规文件内容如下:

bjad1:/etc/sysconfig/network # cat ifcfg-oam
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='10.117.174.140/23'
MTU='9000'
NAME='82573E Gigabit Ethernet Controller (Copper)'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'

配置Multiple IP Address(同网段)需要使用IPADDR<suffix>LABEL<suffix>标签,示例如下:

BOOTPROTO='static'
IPADDR='10.117.174.140/23'
STARTMODE='auto'
USERCONTROL='no'
MTU='9000'

IPADDR_0='10.117.174.141/23'
LABEL_0='1'
IPADDR_1='10.117.174.142/23'
LABEL_1='2'

Debain - Ubuntu

该类发行版使用/etc/network/interfaces文件配置各个网口的信息,文件语法可以man interfaces

auto lo
iface lo inet loopback

auto first
iface second inet dhcp

auto second
iface second inet static
address 192.168.20.1/24

配置Multiple IP Address(同网段)使用以下语句配置虚拟接口,类似于SUSE在一个interface上配置一系列IP的语法未找到,留待以后研究。

auto second
iface second inet static
address 192.168.20.13/24

auto second:<n>
iface second:<n> inet static
address 192.168.20.14/24

3.VLAN & vconfig

VLAN的概念就不做介绍了,交换网络里划分广播域的一种方法,实质上就是给数据包打标签(tag),要让系统支持VLAN需要安装vlan软件包zypper in vlan(SUSE) 和apt-get install vlan(Ubuntu),然后modprobe 8021q加载vlan module,可以使用lsmod | grep -i 8021q检查内核是否加载模块,如果遇见不会自动加载模块的系统使用echo "modprobe 8021q" > /etc/rc.local使其开机加载。

vconfig命令是vlan软件包的主命令,用来添加和移除VLAN interface,VLAN interface建立后才能对其配置IP和子网掩码。而所谓的VLAN interface则需要建立在物理接口的基础上,一般情况下划分VLAN的物理接口使用不分配IP的static method,SUSE接口配置如下:

hell:/etc/sysconfig/network # cat ifcfg-traffic
BOOTPROTO='static'
MTU='9000'
STARTMODE='auto'
USERCONTROL='no'

Ubuntu接口/etc/network/interfaces配置如下:

auto second
iface second inet static

voconfig命令格式如下:

vconfig add <interface> <vid>
vconfig rem <vlan interface>

默认的VLAN interface名字也因系统的不同而略有差异,在SUSE系统中默认VLAN interface名为vlan<vid>,而Ubuntu系统中默认的VLAN interface名为<interface>.<vid>,如下所示:

SUSE:
vconfig add traffic 32
vconfig rem vlan32

Ubuntu:
vconfig add second 32
vconfig rem second.32

到此阶段,VLAN interface就可以使用ifconfig命令配置IP使用,但并没有相应interface配置文件的定义,因此重启会失效。系统当前的VLAN配置可以在/proc/net/vlan/config文件中查看,VLAN接口文件则可在/proc/net/vlan/目录下找到。

cat /proc/net/vlan/config
ls -al /proc/net/vlan/

SUSE系统下:

bjdfr1:~ # cat /proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_PLUS_VID_NO_PAD
vlan1342       | 1342  | traffic
vlan32         | 32  | traffic

Ubuntu系统下:

root@ubuntu:/proc/net/vlan# cat /proc/net/vlan/config 
VLAN Dev name	 | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
second.32      | 32  | second

CentOS - SUSE VLAN interface配置文件

如之前提及,没有配置文件定义的VLAN interface会在系统重启后失效,因此一般都是通过配置文件直接配置VLAN,SUSE支持的VLAN interface名称比较广泛:

<interface>.<vid>  <->  ifcfg-<interface>.<vid> (e.g. eth0.42 <-> ifcfg-eth0.42)
vlan<vid>  <->  ifcfg-vlan<vid> (e.g. vlan42 <-> ifcfg-vlan42)
<angname>  <->  ifcfg-<anyname> 

由上可知SUSE支持三种interface及其ifcfg文件的命名方式,其中<interface>.<vid>的命名方式可以避免vlan<vid>命名方式产生的不同物理接口无法定义相同的VLAN ID的问题,<anyname>的方式最为灵活但并不直白,接口较多的情况下会让维护工作比较困难。

但无论哪种名称方式,ifcfg文件中都需要使用ETHERDEVICE指定所基于的物理interface,不像前两种方式在interface名称上就指明了VLAN ID,<anyname>的方式还需要在ifcfg文件内使用VLAN_ID指定VID。

blr10:/etc/sysconfig/network # cat ifcfg-vlan2022
OTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='100.1.42.52/22'
MTU='9000'
NAME='82573L Gigabit Ethernet Controller'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
ETHERDEVICE='traffic'
VLAN='yes'

IPADDR_0='100.1.42.53/22'
LABEL_0='1'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
bjdsf:/etc/sysconfig/network # cat ifcfg-traffic.42
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='192.168.245.46/24'
MTU=''
NAME='82573L Gigabit Ethernet Controller'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
ETHERDEVICE='traffic'
VLAN='yes'
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
bjdsf:/etc/sysconfig/network # cat ifcfg-v1
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='192.168.221.45/24'
MTU=''
NAME='82573L Gigabit Ethernet Controller'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
ETHERDEVICE='traffic'
VLAN='yes'
VLAN_ID=45

Debain - Ubuntu VLAN interface配置

该系统下支持的VLAN interface命名方式只有<interface>.<vid>一种,因此可以在/etc/network/interfaces文件中定义VLAN interface:

auto second
iface second inet static

auto second.32
iface second:32 inet static
address 192.168.23.25/24

但该完美的理论在我用虚拟机安装的Ubuntu上没有实现,还是需要手动执行vconfig add second 32才会读取intefaces文件里的配置,don’t know why~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux网络接口和VLAN配置 的相关文章

  • Shell删除某个文件夹下指定字符开头的所有文件

    工作中遇到过日志文件夹里面存放的日志数量太多 xff0c 直接使用rm rf 删除提示参数太多 xff0c 其实是因为要删除的文件太多 xff0c 没法一次全部删除 xff0c 具体rm rf能够一次删除的数量是多少就不知道了 xff0c
  • Ubuntu 11.10 远程桌面Windows设置

    升级到Ubuntu 11 10时原来远程客户端tsclient不能用了 xff0c 那么怎么办 xff1f 两个途径可以 xff1a 1 Remmina远程桌面客户端 xff0c 如果在互联网下没有 xff0c 在新立得下安装即可 设定几乎
  • 模型的学习方式-迁移学习、多任务学习、小样本学习、元学习

    前言 无论是有监督学习还是无监督学习 半监督学习 无论算法是什么 xff0c 一直感觉机器学习 深度学习模型都是一种数据驱动的 换句话说 xff0c 足够且有质量的数据 xff0c 才能让模型学到一定的知识 xff0c 达到比较理想的效果
  • 【CVPR2019_论文汇总】(按方向划分,0401 更新中)

    转载链接 xff1a http bbs cvmart net topics 302 cvpr2019paper 作为计算机视觉领域三大顶会之一 xff0c CVPR2019 xff08 2019 6 16 6 19在美国洛杉矶举办 xff0
  • 基于MATLAB的卷积神经网络车牌识别系统

    车牌识别是基于车牌照片的车牌信息的识别工作 xff0c 车牌识别技术对我们的实际生活至关重要 xff0c 例如交通违规行为的增加 xff0c 拦截非法车辆 xff0c 在速度上能够进行快速识别能够很好地解决这些问题 获得的照片的质量是影响车
  • 互连网络的定义

    原文 xff1a http julong com cn Service FAQview asp FAQID 61 15 互联网络是一通过中间网络设备连接多个独立网络的集合 xff0c 其功能是形成一个覆盖范围更广的网络 网络互联技术意指工业
  • Win11本地安装Ubuntu 22.04 双系统简易教程

    1 制作启动U盘 首先找到一个硬盘容量不小于4G的空U盘 xff0c 需要对其进行格式化 然后下载Ubuntu 22 04的iso文件到本地 Ubuntu 22 04 1 LTS 中国地区下载链接 下载 UltraISO并制作启动U盘 Ul
  • 图文详解VMWare Workstation安装Ubuntu20.04虚拟机

    图文详解VMWare Workstation安装Ubuntu20 04虚拟机 0 准备工作1 新建虚拟机并进行初始配置2 安装虚拟机系统 0 准备工作 在使用VMWare Workstation进行Ubuntu20 04虚拟机安装前 xff
  • 理解数据库中的undo日志、redo日志、检查点

    数据库存放数据的文件 xff0c 本文称其为data file 数据库的内容在内存里是有缓存的 xff0c 这里命名为db buffer 某次操作 xff0c 我们取了数据库某表格中的数据 xff0c 这个数据会在内存中缓存一些时间 对这个
  • Token原理

    Q xff1a 分布式场景下如何生成token以及使用token的流程 xff1a 在分布式场景下 xff0c 可以采用以下方式生成 token 和进行权限认证 xff1a 1 生成 token xff1a 使用JWT xff08 JSON
  • 红外遥控其实so easy-第2季第2部分-朱有鹏-专题视频课程

    红外遥控其实so easy 第2季第2部分 1521人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第2季第2个课程 xff0c 主要讲解如何用单片机进行红外遥控解码 红外遥控是家电产品常用的控制方法 xff0c 通过本课程
  • idea ctrl+左键找到方法引用,选择 All Places的方法

    有时候在idea里点击某个方法想找到该方法在所有地方的引用 xff0c 但是有时候会发现idea默认是在项目文件里搜索 xff0c 这样就搜索不到jar包里的引用 xff0c 如果没有搜到项目里的引用 xff0c 弹窗就会一闪而过 xff0
  • 优雅地解决NullPointException

    null的困扰 通过上面代码示例 xff0c 我们可以发现使用null可能会带来的一系列困扰 xff1a 空指针异常 xff0c 导致代码运行时变得不可靠 xff0c 稍不留神可能就崩了使代码膨胀 xff0c 导致代码中充斥大量的null检
  • springboot 如何配置tomcat信息

    前言 前两天面试的时候 xff0c 面试官问我 xff1a 一个ip发请求过来 xff0c 是一个ip对应一个线程吗 xff1f 我突然愣住了 xff0c 对于SpringBoot如何处理请求好像从来没仔细思考过 xff0c 所以面试结束后
  • Visio2013里面的大括号

    打开Visio2013 xff0c 在左侧的 形状 里面 xff0c 选择 更多形状 gt 其他 Visio 方案 gt 标注 xff0c 然后就会在下面看到大括号了 xff0c 这个括号可以调整方向的 xff0c 把括号拉进 Visio
  • CNN几种经典模型比较

    LeNet5 LeNet5 诞生于 1994 年 xff0c 是最早的卷积神经网络之一 xff0c 并且推动了深度学习领域的发展 自从 1988 年开始 xff0c 在许多次成功的迭代后 xff0c 这项由 Yann LeCun 完成的开拓
  • matlab用mkdir在指定的文件夹下创建新的文件夹,并把图像保存在该文件夹内

    for i 61 1 size query image index 2 mkdir 39 指定的文件夹 39 num2str query image index i 在指定的文件路径下以变量名为名字创建新的文件夹 C 61 imgNamLi
  • MySQL安装之后如何启动

    安装好MySQL之后 xff0c 在MySQL的安装目录下找到MySQL server 的目录 xff08 默认安装目录在 xff1a C Program Files MySQL MySQL Server 5 7 xff09 xff0c 如
  • mysql 密码输入正确,登陆失败的原因

    从命令行输入密码登录mysql 的时候 xff0c 当密码输入正确 xff0c 而且出现如下提示的时候 xff1a 可能是因为你的mysql没有启动的原因造成的 xff0c 解决方法 xff1a 鼠标右键 我的电脑 xff08 或者是计算机
  • vo和dto的区别

    下面转自百度知道里的内容 xff0c 感觉是把dto和vo说反了 xff0c 但是也不排除确实有项目这么做的情况 xff0c 欢迎大家发表自己的意见 xff0c 我个人认为两者说反了 xff0c 不过说的还是通俗易懂的 按照标准来说 xff

随机推荐