Linux 之网络相关命令及配置文件

IP地址:

    他们可唯一标识IP网络中的每一台设备

    每台主机(计算机,网络设备,外围设备)必须具有唯一的地址

    IP地址由两部分组成:

      网络ID:

        标识网络

        每个网段分配一个网络ID

       主机ID:

        标识单个主机

        由组织分配给各设备

IPv4地址格式:点分十进制记法

blob.png

IP地址分类

v A类:

0 000 0000 – 0 111 1111: 1-127

网络数:126, 127 每个网络中的主机数:2^24-2 


默认子网掩码:255.0.0.0 私网地址:10.0.0.0

v B类: 

      10 00 0000 – 10 11 1111128-191

         网络数:2^14 每个网络中的主机数:2^16-2

      默认子网掩码:255.255.0.0

私网地址:172.16.0.0-172.31.0.0 

 

v C类:

110 0 0000 – 110 1 1111: 192-223

网络数:2^21 每个网络中的主机数:2^8-2 

默认子网掩码:255.255.255.0

私网地址:192.168.0.0-192.168.255.0




v D类:组播


1110 0000 – 1110 1111: 224-239

v E类:


240-255


公共IP地址范围

 

A

110.0.0.0 9.255.255.255

11.0.0.0 126.255.255.255

 

B

128.0.0.0 172.15.255.255

172.32.0.0 191.255.255.255

 

 

C

192.0.0.0 192.167.255.255

192.169.0.0 223. 255.255.255

私有地址范围

 

A

10.0.0.0 10.255.255.255

 

B

172.16.0.0 172.31.255.255

 

C

192.168.0.0 192.168.255.255

特殊地址:

特殊地址
0.0.0.0 0.0.0.0不是一个真正意义上的IP地址。它表示一个集合:所有不清楚的主机和目的网络。
255.255.255.255 限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
127.0.0.1127.255.255.254 本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“127.0.0.1”的 数据包。
224.0.0.0239.255.255.255 组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5OSPF 路由器,地址多用于一些特定的程序以及多媒体程序
169.254.x.x 如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址。

blob.png

  172.16         .2         . 160

  Network   Subnet    Host



DHCP 协议及动态主机如何获取ip

blob.png



基本网络设置:

将Linux 主机接入到网络,需要配置网络相关设置

静态指定:

ifcfg : ifconfig,route,netstat

ip : object {link,addr,route},ss,tc

system-config-network-tui(setup)

配置文件

centos 7 :新增工具: nmcli,nmtui

动态分配:

DHCP : Dynamic Host Configuration Protocol


ifconfig命令

    ifconfig [interface]    #显示该接口信息

    ifconfig -a        #显示所有接口信息

    ifconfig   

     #只显示已经处于激活状态的接口信息

ifconfig interface [aftype] options|address…

    ifconfig IFACE ip/mask up     
      比如 #ifconfig eth1 10.1.1.22/24 up
    ifconfig IFACE ip network mask up
      比如  ## ifconfig eth1 10.1.1.11 netmask 255.255.0.0

    注意:立即送往内核中的TCP/IP协议栈中并且,这些操作都是立即生效的


route命令

路由管理命令;可以通过 route -n 来查看路由信息

路由条目类型

    主机路由:目标地址为单个IP

    网络路由:目标地址为IP网络

    默认路由:目标为任意主机,0.0.0.0/0.0.0.0

路由信息添加命令:

route  add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

示例:

route add -net 10.0.0.0/8 gw 192.168.10.1 dev eth1
route add -net 0.0.0.0/0.0.0.0 gw 192.168.10.1 dev eth1    #添加默认路由
route add default gw 192.168.10.1 dev eth1            #添加默认路由
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0       #添加单个主机到路由

路由信息删除命令:

route   del [-net|-host] target [gw Gw] [netmask Nm]  [[dev]If]

示例: 

route del -net 10.0.0.0/8 gw 192.168.10.1   #删除指向网络的路由信息
route del -host 192.168.1.3    #删除执向主机的路由
route del default        #删除默认路由

配置动态路由:通过守护进程获取动态路由

  • 安装quagga包,支持多种格式的RIP,OSPF,BGP

  • 命令vtysh配置


netstat命令

显示路由表信息: 

  netstat {–route|-r} [–numeric|-n] 

 -r : 显示内核路由表

 -n : 以数字格式显示

显示网络连接:

netstat [–tcp|-t] [–udp|-u] [–udplite|-U] [–sctp|-S] [–raw|-w] [–listening|-l] [–all|-a] [–numeric|-n] [–extend|-e[–extend|-e]] [–program|-p]

  • -t :TCP协议的相关连接,连接均有其状态;FSM(Finate State Machine);

  • -u :UDP相关的连接

  • -w :raw socket相关的连接

  • -l :处于监听状态的连接

  • -a :所有状态

  • -n :以数字格式显示IP和Port

  • -e :扩展格式

  • -p :显示相关的进程及PID

常用组合:

 -tan;-uan;-tnl;-unl;-tunlp

显示接口的统计数据:

netstat {–interfaces|-I|-i [–all|-a] [–extend|-e] [–verbose|-v] [–program|-p][–numeric|-n]

所有接口:    netstat -i 

指定接口:    netstat -I<IFACE>  ifconfig -s <IFACE>

blob.png


ip命令

配置Linux网络属性

ip [ OPTIONS ] OBJECT { COMMAND | help }

  OBJECT := { link | addr | route | netns }

  注意:OBJECT可简写,各OBJECT的子命令也可简写

(1) ip link :network device configuration

ip link set-change device attributes

ip link set eth1 down         #down 
ip link set eth1 up           #up
ip link set eth1 multicast on/off     #启用或禁用多播功能
ip link set eth1 name NAME     #重命名接口
ip link set eth1 mtu NUMBER     #设定mtu默认1500
ip link set eth1 netns PID      #用于将接口移动到指定的网络名称空间

ip link [show|list] display device attributes

ip link help  显示简要帮助

ifup/ifdown命令:

    注意:通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别并完成设置的

(2) ip netns :ip manage network namespaces

ip netns list #列出所有的netns

ip netns add NAME #创建指定的netns

ip netns del NAME #删除指定的netns

ip netns exec NAME COMMAND #在指定的netns运行命令

(3) ip addr – protocol address management

ip addr {add|del} IFADDR dev STRING

 [label LABEL]:添加地址时指明网卡别名 

 [scope {global|link|host}]:指明作用域 

    global :全局可用

    link :仅链接可用

    host :本机可用

 [broadcast ADDRESS]:指明广播地址,会根据ip和掩码自动计算得到,我们一般不写

ip addr add IFADDR dev IFACE

  ifconfig eth1 0   清空eth1接口ip

  ip addr add 10.1.252.32/16 dev eth1

  ip addr add 10.1.0.1/16 dev eth3 label eth3:0

ip addr delete IFADDR dev IFACE

 和ip address add 命令类似

ip addr show IFACE :显示IFACE指定接口的信息

ip address flush dev eth1 #清空eth1接口的所有地址

ip addr flush dev eth0 label eth0:0

(4) ip route – routing table management

添加路由信息:ip route add

ip route add TARGET via GW IFACE src SOURCE_IP

  TARGET:

    主机路由:IP

    网络路由:NETWORK/MASK   

 ip route add 192.168.0.0/24 via 172.16.0.1 

 ip route add 192.168.1.13 via 172.16.0.1 

 ip route add 10.1.2.1/24 via 10.1.2.1 dev eth1 src 10.3.2.1

 添加网关:ip route add default via GW dev IFACE 

       ip route add default via 172.16.0.1 

删除路由信息:ip route del

ip route del TARGET

ip route delete 10.1.2.1/24

显示路由: ip route show|list

清空路由表: ip route flush [dev IFACE] [via PREFIX]

ip route flush dev eht1


路由练习:

设备如下:

PC1:kali linux

PC2:WINDOWS 10

R1:CENTOS 6.8

R2:CENTOS 7.2

blob.png

命令如下:

R1:
ifconfig eth3 192.168.41.1/24
ifconfig eth2 1.1.1.1/24
route add -net 10.100.41.0/24 gw 1.1.1.2 dev eth2
iptables -F
echo 1 > /proc/sys/net/ipv4/ip_forward
R2:
ifconfig eth3 1.1.1.2/24
ifconfig eth4 10.100.41.1/24
route add -net 192.168.41.0/24 gw 1.1.1.1 dev eth3
iptables -F
echo 1 > /proc/sys/net/ipv4/ip_forward
PC1:
ifconfig eth1 192.168.41.41/24
route add default dev eth1
iptables -F
PC2:
10.100.41.41
255.255.255.0
10.100.41.1

blob.png

blob.png


ss命令

格式: ss [OPTION]…[FILTER]

netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息

OPTION:

  • -t :TCP协议的相关连接

  • -u :UDP相关的连接

  • -w :raw socket相关的连接

  • -l :监听状态的连接

  • -a :所有状态的连接

  • -n :数字格式

  • -p :相关的程序及其PID

  • -e :扩展格式信息

  • -m :内存用量

  • -o :计时器信息

FILTER: [state TCP-STATE][EXPRESSION]

TCP常见的状态:

 tcp finite state machine:

    LISTEN: 监听

    ESTABLISHED: 已建立的连接

    FIN_WAIT_1    

    FIN_WAIT_2

    SYN_SENT

    SYN_RECV

    CLOSED

EXPRESSION:

    dport = 

    sport =

   示例: '( dport = :ssh or sport = :ssh )'

    ss -tan '( dport=:22 or sport=:22 )'

    ss -tan state ESTABLISHED

常用组合:

 -tan,-tanl,-tanlp,-uan

常见做法:

  • ss -l  显示本地打开的所有端口

  • ss -pl  显示每个进程具体打开的socket

  • ss -t -a  显示所有tcp socket

  • ss -u -a  显示所有的UDP Socekt

  • ss -o state established '( dport = :smtp or sport = :smtp )'  显示所有已建立的SMTP连接

  • ss -o state established '( dport = :http or sport = :http )'  显示所有已建立的HTTP连接

  • ss -x src /tmp/.X11-unix/*  找出所有连接X服务器的进程

  • ss -s  列出当前socket详细信息


网络配置文件

IP、MASK、GW、DNS相关配置文件: /etc/sysconfig/network-scripts/ifcfg-IFACE 

路由相关的配置文件: /etc/sysconfig/network-scripts/route-IFACE 

配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE 通过大量参数来定义接口的属性;其可通过vim等文本编辑器直接修改,也可以使用专用的命令来进行修改(centos 6 :system-config-network(setup),centos 7 :nmtui)

ifcfg-eth0 配置文件详解

DEVICE     此配置文件应用到的设备 
HWADDR     对应的设备的MAC地址 
BOOTPROTO     激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp 
NM_CONTROLLED     NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
ONBOOT     在系统引导时是否激活此设备 
TYPE     接口类型;常见有的Ethernet, Bridge 
UUID     设备的惟一标识 
IPADDR     指明IP地址 
NETMASK     子网掩码 
GATEWAY     默认网关 
DNS1     第一个DNS服务器指向 
DNS2     第二个DNS服务器指向 
USERCTL     普通用户是否可控制此设备 
PEERDNS     如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中

管理网络服务:

    centos 6: service SERVICE {start|stop|restart|stop}

    centos 7: systemctl {start|stop|restart|stop} SERVICE[.service]

配置文件修改后,如果生效,需要重启网络服务

    centos 6: service network restart

    centos 7: systemctl restart network.service

本地解析器

解析器执行正向和逆向查询

此配置文件在 /etc/hosts

    本地主机名数据库和IP地址的映像

    对小型独立网络有效

    通常,在使用DNS前检查

    可以通过 gentent hosts 命令查看 /etc/hosts 内容

dns解析

此配置文件在 /etc/resolv.conf

    nameserver 10.1.0.1

    nameserver 202.106.0.20

    nameserver 8.8.8.8

注意:最多可以有三个

一般情况下,hosts的优先级高于dns解析的优先级,但是,可以通过 /etc/nsswitch.conf 文件来修改优先级

blob.png

正向解析: FQDN(主机) –> IP

    dig -t A FQDN

    host -t A FQDN

反向解析: IP –> FQDN

    dig -x IP

    host -t PRT IP

配置主机名

hostname 命令:

查看:hostname

配置:hostname HOSTNAME  当前系统有效,重启后失效

hostnamectl命令:(centos 7)

hostnamectl status :显示当前主机名等信息

hostnamectl set-hostname NAME:设定主机名,永久有效

配置文件在/etc/sysconfig/network

HOSTNAME=<HOSTNAME>

注意:此方法不会立即生效;但以后后一直有效

配置路由信息:

/etc/sysconfig/network-scripts/route-IFACE

注意:配置完成后,需要service network restart 或 systemctl restart network 重启网络服务生效

配置文件有两种风格:

(1) TARGET via GW

示例: 10.1.0.0/16 via 172.16.0.1

(2) 每三行定义一条路由

ADDRESS#=TARGET

NETMASK#=MASK

GATEWAY#=NEXTHOP

示例:

ADDRESS1=10.1.0.0

NETMASK1=255.255.0.0

GATEWAY1=172.16.0.1

网卡别名

对虚拟主机有用,可以将多个IP地址绑定到一个NIC上: eth0:1 ; eth0:2 ; eth0:3 …

ifconfig 命令

    ifconfig eth0:0 10.1.2.4/16 up

    ifconfig eth0:0 down

ip命令

    ip addr add 10.1.4.5/16 dev eth0 label eth0:0

    ip addr del 10.1.4.5/16 dev eth0 label eth0:0

    ip addr flush dev eth0 label eth0:0

注意:

如果是dhcp必须配置到非别名的网卡上,并且禁用NetworkManager,然后重启service network restart,否则不会生效

查看dhcp获取信息

cat /var/lib/dhclient/网卡名

修改网关

1,可以在/etc/sysconfig/network

2,也可以在/etc/sysconfig/network-scripts/ifcfg-eth0

2的优先级大于1的优先级

设备别名:

为每一个设备别名生成独立的接口配置文件

  关闭NetworkManager服务

  ifcfg-ethx:xxx

  必须使用静态联网

    DEVICE=eth0:0 

    IPADDR=10.10.10.10 

    NETMASK=255.0.0.0 O

    NPARENT=yes 

注意:必须重启网络服务才可以生效

blob.png

blob.png

网络配置:

Linux 网络属性配置的tui

     system-config-network-tui

     setup

注意:记得重启网络服务方能使之生效

配置当前的主机的主机名

hostname HOSTNAME

/etc/sysconfig/network

 HOSTNAME=XXX

hostnamectl set-hostname liuyu7 #直接写到配置文件并生效

blob.png

网卡名称

网络接口识别并命名相关的udev配置文件

配置规则如下:

/etc/udev/rules.d/70-persistent-net.rules

查看网卡: 

dmesg | grep -i eth 

ethtool -i eth0

查看系统的加载的驱动信息 lsmod

卸载网卡驱动:

rmmod e1000  或  modprobe -r e1000

装载网卡驱动:

modprobe e1000

网络接口配置-bonding

概念:Bonding 就是讲多块网卡绑定到同一IP地址对外提供服务,可以实现高可用或者负载均衡,当然,直接给两块网卡设置同一IP地址也是不可能的.通过bonding,虚拟一块网卡对外提供连接,物理网卡则被修改为相同的MAC地址

Bonding的工作模式:

Mode 0(balance-rr): 轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力

Mode 1(active-backup): 活动-备份(主备)策略:在绑定中,只有一个slave被激活。当且仅当活动的slave接口失败时才会激活其他的salve。为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见

Mode 3(broadcast): 广播策略:在所有的slave接口上传送所有的报文。本模式提供容错能力

课外:

mode指定了bond0的工作模式,在redhat中有0-6共7种工作模式,常用的是0和1。

mode=0 表示 load balancing (round-robin)为负载均衡方式,两块网卡都工作。 
mode=1 表示 fault-tolerance (active-backup)提供冗余功能,工作方式是主 从的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份。  
mode=2 表示 XOR policy 为平衡策略。此模式提供负载平衡和容错能力  
mode=3 表示 broadcast 为广播策略。此模式提供了容错能力  
mode=4 表示 IEEE 802.3ad Dynamic link aggregation 为 IEEE 802.3ad 为 动态链接聚合。该策略可以通过 xmit_hash_policy 选项从缺省的 XOR 策略改变到其他策略。  
mode=5 表示 Adaptive transmit load balancing 为适配器传输负载均衡。该 模式的必要条件:ethtool 支持获取每个 slave 的速率  
mode=6 表示 Adaptive load balancing 为适配器适应性负载均衡。该模式包含 了 balance-tlb 模式,同时加上针对 IPV4 流量的接收负载均衡(receive load   balance, rlb),而且不需要任何 switch(交换机)的支持。  
bonding 只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对 外的链路 down 掉了,而交换机本身并没有故障,那么 bonding 会认为链路没有问题而继 续使用。

Bonding配置如下:

首先创建bonding设备的配置文件

/etc/sysconfig/network-scripts/ifcfg-bond0 

 DEVICE=bond0 

 BOOTPROTO=none 

 BONDING_OPTS= "miimon=100  mode=0"

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

 DEVICE=eth0 

 BOOTPROTO=none 

 MASTER=bond0 

 SLAVE=yes 

 USERCTL=no 

重启网络服务

查看bond0状态 : cat /proc/net/bond0

Bonding配置:

miimon 是用来进行链路检测的。如果miimom=100,那么系统每100ms 检测一次链路链接状态,如果有一条线路通就转入另一条链路

删除bond0

   ifconfig bond0 down

   rmmod bonding

详细帮助参看:/usr/share/doc/kernel-docversion/Documentation/networking/bonding.txt


实验如下

通过两块网卡测试bond1 主备

vim /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0
BOOTPROTO=dhcp
BONDING_OPTS="miimon=100 mode=1"

vim /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

vim /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

service NetworkManager stop
service network restart

blob.png

blob.png

blob.png

blob.png

blob.png

主备切换时丢包

blob.png


centos 7 网络属性配置

rhel 6之前,网络接口使用连续号码命名:eth0,eth1等,当增加或删除网卡时,名称可能会发生变化

rhel 7开始使用基于硬件,设备拓扑和设置类型命名

(1)网卡命名机制:

systemd对网络设备的命名方式 

(a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1 

(b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1 

(c) 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0 

(d) 如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56 

(e) 上述均不可用时,则使用传统命名机制

基于BIOS支持启用biosdevname软件

  内置网卡:em1,em2

  pci卡:pYpX   Y:slot  X:port

(2)名称组成格式

    en: Ethernet 有线局域网 

    wl: wlan 无线局域网 

    ww: wwan无线广域网 

名称类型:

    o<index>: 集成设备的设备索引号 

    s<slot>: 扩展槽的索引号 

    x<MAC>: 基于MAC地址的命名 

    p<bus>s<slot>: enp2s1

网卡设备的命名过程:

第一步: 

   udev, 辅助工具程序/lib/udev/rename_device, /usr/lib/udev/rules.d/60-net.rules 

第二步: 

   biosdevname 会根据/lib/udev/rules.d/71biosdevname.rules 

第三步: 

   通过检测网络接口设备,根据/lib/udev/rules.d/75-net-description ID_NET_NAME_ONBOARD ID_NET_NAME_SLOT ID_NET_NAME_PATH

如何采用传统命名方式命名

(1)编辑 /etc/default/grub 配置文件

找到 GRUB_CMDLINE_LINUX 并添加修改为: GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0" 

或者直接修改 /boot/grub2/grub.cfg

(2)为grub2生成其配置文件

grub2-mkconfig -o /etc/grub2.cfg

(3)重启系统

类似文章