Linux网络配置必备知识

 

一、网络设备命名规则

centos7中的网卡一致性命名规则、网卡重命名方法

一致性网络设备命名(Consistent Network Device Naming)

背景介绍:

在centos5的时候,我们习惯了eth0这样的网络设备命名,在centos6发现网络设备变成了em1这样的命名。那时我们在安装的时候,给启动参数加上 biosdevname=0,就可以继续使用eth0这样的命名。

升级到centos7后,发现原有的参数biosdevname=0不起作用了,网络设备变成了eno1这样的名称。

centos7这种变化的原因是由于systemd和udev引入了一种新的网络设备命名方式:一致网络设备命名(CONSISTENT NETWORK DEVICE NAMING)。

 

一、为什么需要这个

服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。

Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序。

为解决这类问题,dell开发了biosdevname方案(systemd v197版本中将dell的方案作了进一步的一般化拓展)。

目前的Centos既支持dell的biosdevname,也支持systemd的方案。

 

 

二、Centos7中的命名策略

Scheme 1: 如果从BIOS中能够取到可用的,板载网卡的索引号,则使用这个索引号命名,例如: eno1,如不能则尝试Scheme 2

Scheme 2: 如果从BIOS中能够取到可以用的,网卡所在的PCI-E热插拔插槽的索引号,则使用这个索引号命名,例如: ens1,如不能则尝试Scheme 3

Scheme 3:如果能拿到设备所连接的物理位置信息,则使用这个信息命名,例如:enp2s0,如不能则尝试Scheme 5

Scheme 5:传统的kernel命名方法,例如: eth0,这种命名方法的结果不可预知的,即可能第二块网卡对应eth0,第一块网卡对应eth1。

Scheme 4 使用网卡的MAC地址来命名,这个方法一般不使用。

三、biosdevnamenet.ifnames两种命名规范

net.ifnames命名规范为:设备类型+设备位置+数字

设备类型:

en 表示Ethernet

wl 表示WLAN

ww 表示无线广域网WWAN

设备位置:

Linux网络配置必备知识

 

O -板载: 板载设备索引号

P-PCI:  PCI位置

S-插槽:热插拔插槽索引号  

简称OPS

 

实际的例子:

eno1 板载网卡

enp0s2  pci网卡

ens33   pci网卡

wlp3s0  PCI无线网卡

wwp0s29f7u2i2   4G modem

wlp0s2f1u4u1   连接在USB Hub上的无线网卡

enx78e7d1ea46da pci网卡

----------------------------------------

biosdevname的命名规范为:

Linux网络配置必备知识

 

实际的例子:

em1 板载网卡

p3p4 pci网卡

p3p4_1 虚拟网卡

四、systemd中的实际执行顺序

按照如下顺序执行udev的rule

1./usr/lib/udev/rules.d/60-net.rules

2./usr/lib/udev/rules.d/71-biosdevname.rules

3./lib/udev/rules.d/75-net-description.rules

4./usr/lib/udev/rules.d/80-net-name-slot.rules

60-net.rules

使用/lib/udev/rename_device这个程序,去查询/etc/sysconfig/network-scripts/下所有以ifcfg-开头的文件

如果在ifcfg-xx中匹配到HWADDR=xx:xx:xx:xx:xx:xx参数的网卡接口

则选取DEVICE=yyyy中设置的名字作为网卡名称。

71-biosdevname.rules

如果系统中安装了biosdevname,且内核参数未指定biosdevname=0,且上一步没有重命名网卡,则按照biosdevname的命名规范,从BIOS中取相关信息来命名网卡。

主要是取SMBIOS中的type 9 (System Slot) 和 type 41 (Onboard Devices Extended Information)

不过要求SMBIOS的版本要高于2.6,且系统中要安装biosdevname程序。

75-net-description.rules

udev通过检查网卡信息,填写如下这些udev的属性值

ID_NET_NAME_ONBOARD

ID_NET_NAME_SLOT

ID_NET_NAME_PATH

ID_NET_NAME_MAC

80-net-name-slot.rules

如果在60-net.rules ,71-biosdevname.rules这两条规则中没有重命名网卡,且内核未指定net.ifnames=0参数

则udev依次尝试使用以下属性值来命名网卡,如果这些属性值都没有,则网卡不会被重命名。

ID_NET_NAME_ONBOARD

ID_NET_NAME_SLOT

ID_NET_NAME_PATH

上边的71-biosdevname.rules 是实际执行biosdevname的policy

75-net-description.rules和80-net-name-slot.rules实际执行Scheme 1,2,3

根据上述的过程,可见网卡命名受 biosdevname和net.ifnames这两个内核参数影响。

五、biosdevname/net.ifnames应用

这两个参数都可以在grub配置中提供,biosdevname=0是系统默认值(dell服务器默认是1),net.ifnames=1是系统默认值。

#vi /boot/grub/grub.conf

kernel /boot/vmlinuz biosdevname=1

initrd /boot/initrd.img

第二节所说的Scheme的策略顺序是系统默认的。

如系统BIOS符合要求,且系统中安装了biosdevname,且biosdevname=1启用,则biosdevname优先;

如果BIOS不符合biosdevname要求或biosdevname=0,则仍然是systemd的规则优先。

如果用户自己定义了udev rule来修改内核设备名字,则用户规则优先。

内核参数组合使用的时候,其结果如下:

默认内核参数(biosdevname=0net.ifnames=1):  网卡名 "enp5s2"

biosdevname=1net.ifnames=0:网卡名 "em1"

biosdevname=0net.ifnames=0:网卡名 "eth0" (最传统的方式,eth0 eth1 傻傻分不清)

 

六、centos7网卡重命名为ethx格式

如果你希望继续使用 eth0 这样的传统名称,那么在安装启动(pxe)时加上参数:

net.ifnames=0 biosdevname=0

cobbler profile 修改方法:

cobbler profile edit --name=Centos-7.3-x86_64 --kopts='net.ifnames=0 biosdevname=0'

如果你已经安装完了,希望改成eth0这样的名称,那么执行如下操作需要:

1.修改grub2启动参数,在GRUB_CMDLINE_LINUX的中加上"net.ifnames=0 biosdevname=0"的参数

vi /etc/sysconfig/grub

GRUB_CMDLINE_LINUX=”rd.lvm.lv=vg0/swap vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 net.ifnames=0 biosdevname=0 rd.lvm.lv=vg0/usr rhgb quiet”

2.重新加载到启动中

grub2-mkconfig -o /boot/grub2/grub.cfg

3.重新对网卡配置文件进行命名(网卡文件全部重命名,顺便修改配置文件NAME、DEVICE的名称)

mv /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-eth0

4.reboot重启生效

二、网络配置

配置文件

cd /etc/sysconfig/network-scripts/

 

  1. TYPE="Ethernet"     # 网络类型为以太网
  2. BOOTPROTO="static"  # 配置成静态,默认动态IP为DHCP
  3. NAME="eno16777736"  # 网卡设备名,设备名一定要跟文件名一致
  4. DEVICE="eno16777736" # 网卡设备名,设备名一定要跟文件名一致
  5. ONBOOT="yes"        # 该网卡是否随网络服务启动
  6. IPADDR="192.168.1.103"  #主机ip地址
  7. GATEWAY="192.168.1.1"   # 网关
  8. NETMASK="255.255.255.0"   # 子网掩码
  9. DNS1="218.85.152.99"    #DNS2也可以配置成8.8.8.8
  10. PROXY_METHOD=none # 代理模式
  1. BROWSER_ONLY=no # 只是浏览器。
  2. DEFROUTE=yes # 启动默认路由。
  3.  IPV4_FAILURE_FATAL=no # 不启用IPV4错误检测功能
  4.  IPV6INIT=yes # 启用IPV6协议
  5. PV6_AUTOCONF=yes # 自动配置IPV6地址
  6.  IPV6_DEFROUTE=yes # 用IPV6默认路由
  7. IPV6_FAILURE_FATAL=no # 不启用IPV6错误检测功能
  8. IPV6_ADDR_GEN_MODE=stable-privacy # IPV6地址生成模型。

 

DNS服务器的参数可以在网卡的配置文件中设置,也可以在/etc/resolv.conf文件中设置,如下:

#Generated by NetworkManager
nameserver 114.114.114.114
nameserver 1.2.4.8

重新启动服务

ip link set eth0 upi 

 #关闭网卡ip link set eth0 down 

#  开启网卡 service network restart

systemctl  restart  network:重启网络

centos/RHEL 7开始用systemctl

之前的版本用service

 

 

systemd对Linux来说,就是init程序,可以作为sysvinit和upstat的替代,centos服务管理主要命令是systemctl,centos7的服务不再放在/etc/init.d/下;而放在/usr/lib/systemd/system下,centos7系统中systemctl管理工具整合了chkconfig和service于一体。

 

三、代理配置

 

1、永久设置

修改 /etc/profile 文件,添加下面内容::

 

如果没有密码限制,则以上内容可以修改为以下内容:

 

若只针对某个用户而言,则修改 ~/.bash_profile 文件,添加相同内容;

然后使用source /etc/profile使设置立即生效。

 

2、临时设置(重连后失效)

在命令行中直接输入下列命令即可

 

注意:设置之后可能使用ping时还是无法连接外网,但是pip时可以的,因为ping的协议不一样不能使用这个代理。

 

3、单次设置(建议使用)

直接在pip时设置代理

pip3 install –proxy http://代理地址:代理端口号 软件名称

注意:proxy有两个“-”号

 

4、yum代理设置

用vi编辑器打开yum配置文件,一般情况下: vi /etc/yum.conf

打开yum的配置文件之后,在文件最后加上代理服务器的协议、地址、端口,如果代理服务器需要用户认证话,同时加上认证用户的用户名和密码。

代理服务器不需要认证:加上 proxy=协议://代理服务器地址:端口 (如:proxy=http://192.168.1.1:80)

代理服务器需要认证用户:加上 proxy=协议://代理服务器地址:端口 (如:proxy=http://192.168.1.1:80)

 

保存退出后,就可以使用yum轻松的安装软件了。

 

5、git代理设置

 

示例:

假设某人在百度工作,公司代理服务器是(proxy.baidu.com),端口是(8080),代理配置如下

1、代理服务器需要鉴权配置

git config --global https.proxy https://username:[email protected]:8080

2、代理服务器不需要鉴权配置

git config --global https.proxy https://proxy.baidu.com:8080

 

6、代理配置中的一些特殊字符

如果密码中有@等特殊字符,会出错,比如

git config --global http.proxy http://username:[email protected]@proxy.baidu.com:8080

解析时会从第一个@解析,提示@[email protected]找不到,此时要对其中的特殊符号进行处理,使用百分比编码(Percent-encoding)对特殊字符进行转换,转换。

列表如下:

 

例如:br/>代理账户:admin

代理密码:[email protected]

@为特殊字符

代理服务器:http://172.31.101.102:8080

进行全局代理的时候,需要按照如下配置

 

Linux网络配置必备知识 

  • ! --> %21    # --> %23    $ --> %24    & --> %26    ' --> %27
  • ( --> %28    ) --> %29    * --> %2A    + --> %2B    , --> %2C
  • / --> %2F    : --> %3A    ; --> %3B    = --> %3D    ? --> %3F
  • @ --> %40    [ --> %5B    ] --> %5D
  • git config --global https.proxy https://proxyuser:[email protected]/域名:port
  • git config --global http.proxy http://proxyuser:[email protected]/域名:port
  • proxy_username=代理服务器用户名
  • proxy_password=代理服务器密码
  • export http_proxy=http://yourproxy:8080/
  • export ftp_proxy=http://yourproxy:8080/
  • #or
  • export http_proxy=http://username:[email protected]:8080/
  • export ftp_proxy=http://username:[email protected]:8080/
  • export http_proxy
  • export ftp_proxy
  • http_proxy=http://yourproxy:8080/
  • ftp_proxy=http://yourproxy:8080/
  • export http_proxy
  • export ftp_proxy
  • http_proxy=http://username:[email protected]:8080/
  • ftp_proxy=http://username:[email protected]:8080/
  • BROWSER_ONLY=no # 只是浏览器。
  • DEFROUTE=yes # 启动默认路由。
  •  IPV4_FAILURE_FATAL=no # 不启用IPV4错误检测功能
  •  IPV6INIT=yes # 启用IPV6协议
  • PV6_AUTOCONF=yes # 自动配置IPV6地址
  •  IPV6_DEFROUTE=yes # 用IPV6默认路由
  • IPV6_FAILURE_FATAL=no # 不启用IPV6错误检测功能
  • IPV6_ADDR_GEN_MODE=stable-privacy # IPV6地址生成模型。
  • TYPE="Ethernet"     # 网络类型为以太网
  • BOOTPROTO="static"  # 配置成静态,默认动态IP为DHCP
  • NAME="eno16777736"  # 网卡设备名,设备名一定要跟文件名一致
  • DEVICE="eno16777736" # 网卡设备名,设备名一定要跟文件名一致
  • ONBOOT="yes"        # 该网卡是否随网络服务启动
  • IPADDR="192.168.1.103"  #主机ip地址
  • GATEWAY="192.168.1.1"   # 网关
  • NETMASK="255.255.255.0"   # 子网掩码
  • DNS1="218.85.152.99"    #DNS2也可以配置成8.8.8.8
  • PROXY_METHOD=none # 代理模式