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


    IP地址:

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

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

        IP地址由两部分组成:

          网络ID:

                    标识网络

                    每个网段分配一个网络ID

           主机ID:

                    标识单个主机

                    由组织分配给各设备

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

    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 1111:128-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.1~127.255.255.254本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“127.0.0.1”的 数据包。
    224.0.0.0到239.255.255.255组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF 路由器,地址多用于一些特定的程序以及多媒体程序
    169.254.x.x如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址。

      172.16         .2         . 160

      Network   Subnet    Host

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

    基本网络设置:

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

    静态指定:

    1. ifcfg : ifconfig,route,netstat
    2. ip : object {link,addr,route},ss,tc
    3. system-config-network-tui(setup)

    配置文件

    centos 7 :新增工具: nmcli,nmtui

    动态分配:

    DHCP : Dynamic Host Configuration Protocol

    ifconfig命令

    1.     ifconfig [interface]    #显示该接口信息
    2.     ifconfig -a        #显示所有接口信息
    3.     ifconfig    #只显示已经处于激活状态的接口信息

    ifconfig interface [aftype] options|address...

    1. ifconfig IFACE ip/mask up     
    2. 比如 #ifconfig eth1 10.1.1.22/24 up
    3. ifconfig IFACE ip network mask up
    4. 比如  ## 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]

    示例:

    1. route add -net 10.0.0.0/8 gw 192.168.10.1 dev eth1
    2. route add -net 0.0.0.0/0.0.0.0 gw 192.168.10.1 dev eth1    #添加默认路由
    3. route add default gw 192.168.10.1 dev eth1            #添加默认路由
    4. 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]

    示例: 

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

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

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

    • 命令vtysh配置

    netstat命令

    显示路由表信息: 

    1. netstat {--route|-r} [--numeric|-n] 
    2.  -r : 显示内核路由表
    3.  -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  ifconfig -s


    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
    1. ip link set eth1 down         #down 
    2. ip link set eth1 up           #up
    3. ip link set eth1 multicast on/off     #启用或禁用多播功能
    4. ip link set eth1 name NAME     #重命名接口
    5. ip link set eth1 mtu NUMBER     #设定mtu默认1500
    6. ip link set eth1 netns PID      #用于将接口移动到指定的网络名称空间
    1. ip link [show|list] display device attributes
    2. ip link help  显示简要帮助

    ifup/ifdown命令:

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

    (2) ip netns :ip manage network namespaces

    1. ip netns list #列出所有的netns
    2. ip netns add NAME#创建指定的netns
    3. ip netns del NAME #删除指定的netns
    4. ip netns exec NAME COMMAND#在指定的netns运行命令

    (3) ip addr - protocol address management

    1. ip addr {add|del} IFADDR dev STRING
    2.  [label LABEL]:添加地址时指明网卡别名 
    3.  [scope {global|link|host}]:指明作用域 
    4.     global :全局可用
    5.     link :仅链接可用
    6.     host :本机可用
    7.  [broadcast ADDRESS]:指明广播地址,会根据ip和掩码自动计算得到,我们一般不写
    1. ip addr add IFADDR dev IFACE
    2.   ifconfig eth1 0   清空eth1接口ip
    3.   ip addr add 10.1.252.32/16 dev eth1
    4.   ip addr add 10.1.0.1/16 dev eth3 label eth3:0
    1. ip addr delete IFADDR dev IFACE
    2.  和ip address add 命令类似

    ip addr show IFACE :显示IFACE指定接口的信息
    1. ip address flush dev eth1 #清空eth1接口的所有地址
    2. ip addr flush dev eth0 label eth0:0

    (4) ip route - routing table management

    添加路由信息:ip route add

    1. ip route add TARGET via GW IFACE src SOURCE_IP
    2.   TARGET:
    3.     主机路由:IP
    4.     网络路由:NETWORK/MASK   
    5.  ip route add 192.168.0.0/24 via 172.16.0.1 
    6.  ip route add 192.168.1.13 via 172.16.0.1 
    7.  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

    1. ip route del TARGET
    2. 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

    命令如下:

    1. R1:
    2. ifconfig eth3 192.168.41.1/24
    3. ifconfig eth2 1.1.1.1/24
    4. route add -net 10.100.41.0/24 gw 1.1.1.2 dev eth2
    5. iptables -F
    6. echo 1 > /proc/sys/net/ipv4/ip_forward
    7. R2:
    8. ifconfig eth3 1.1.1.2/24
    9. ifconfig eth4 10.100.41.1/24
    10. route add -net 192.168.41.0/24 gw 1.1.1.1 dev eth3
    11. iptables -F
    12. echo 1 > /proc/sys/net/ipv4/ip_forward
    13. PC1:
    14. ifconfig eth1 192.168.41.41/24
    15. route add default dev eth1
    16. iptables -F
    17. PC2:
    18. 10.100.41.41
    19. 255.255.255.0
    20. 10.100.41.1


    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 配置文件详解

    1. DEVICE     此配置文件应用到的设备 
    2. HWADDR     对应的设备的MAC地址 
    3. BOOTPROTO     激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp 
    4. NM_CONTROLLED     NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
    5. ONBOOT     在系统引导时是否激活此设备 
    6. TYPE     接口类型;常见有的Ethernet, Bridge 
    7. UUID     设备的惟一标识 
    8. IPADDR     指明IP地址 
    9. NETMASK     子网掩码 
    10. GATEWAY     默认网关 
    11. DNS1     第一个DNS服务器指向 
    12. DNS2     第二个DNS服务器指向 
    13. USERCTL     普通用户是否可控制此设备 
    14. 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 文件来修改优先级

    正向解析: 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=

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

    配置路由信息:

    /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

    示例:

    1. ADDRESS1=10.1.0.0
    2. NETMASK1=255.255.0.0
    3. GATEWAY1=172.16.0.1

    网卡别名

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

    ifconfig 命令

    1. ifconfig eth0:0 10.1.2.4/16 up
    2. ifconfig eth0:0 down

    ip命令

    1. ip addr add 10.1.4.5/16 dev eth0 label eth0:0
    2. ip addr del 10.1.4.5/16 dev eth0 label eth0:0
    3. 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

      必须使用静态联网

    1. DEVICE=eth0:0 
    2. IPADDR=10.10.10.10 
    3. NETMASK=255.0.0.0 O
    4. NPARENT=yes 

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

    网络配置:

    Linux 网络属性配置的tui

         system-config-network-tui

         setup

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

    配置当前的主机的主机名

    hostname HOSTNAME

    /etc/sysconfig/network

     HOSTNAME=XXX

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

    网卡名称

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

    配置规则如下:

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

    查看网卡: 

    1. dmesg | grep -i eth 
    2. 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 

    1.  DEVICE=bond0 
    2.  BOOTPROTO=none 
    3.  BONDING_OPTS= "miimon=100  mode=0"

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

    1.  DEVICE=eth0 
    2.  BOOTPROTO=none 
    3.  MASTER=bond0 
    4.  SLAVE=yes 
    5.  USERCTL=no 

    重启网络服务

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

    Bonding配置:

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

    删除bond0

    1. ifconfig bond0 down
    2. rmmod bonding

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


    实验如下

    通过两块网卡测试bond1 主备

    1. vim /etc/sysconfig/network-scripts/ifcfg-bond0 
    2. DEVICE=bond0
    3. BOOTPROTO=dhcp
    4. BONDING_OPTS="miimon=100 mode=1"
    5. vim /etc/sysconfig/network-scripts/ifcfg-eth3
    6. DEVICE=eth3
    7. BOOTPROTO=none
    8. MASTER=bond0
    9. SLAVE=yes
    10. USERCTL=no
    11. vim /etc/sysconfig/network-scripts/ifcfg-eth2
    12. DEVICE=eth2
    13. BOOTPROTO=none
    14. MASTER=bond0
    15. SLAVE=yes
    16. USERCTL=no
    17. service NetworkManager stop
    18. service network restart

    主备切换时丢包


    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: 集成设备的设备索引号 

        s: 扩展槽的索引号 

        x: 基于MAC地址的命名 

        ps: 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)重启系统

  • 相关阅读:
    springcloud6:负载均衡
    面向对象设计介绍和代码示例
    linux中网络命令:write,wall,ping,ifconfig,mail,last,lastlog,traceroute,netstat,mount
    ESP8266-Arduino编程实例-三路红外寻迹传感器驱动
    日志框架体系整理( 基础 )
    авито/avito ru 代表什么意思?投放广告的时候需要加入关键词中吗?
    【运维面试题】谈谈对IO多路复用的理解
    导数...
    动画二:动画(keyformes)
    perf工具使用
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126308572