zoukankan      html  css  js  c++  java
  • 12-2 网络路由和网络配置

    网络路由和网络配置

    route命令

    • 路由管理命令
    • 查看:route -n
    • 添加:route add
      • route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
    • 目标:192.168.1.3 网关:172.16.0.1
      • route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
    • 目标:192.168.0.0 网关:172.16.0.1
      • route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
      • route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
    • 默认路由,网关:172.16.0.1
      • route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
      • route add default gw 172.16.0.1
    • 删除:route del
      • route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
    • 目标:192.168.1.3 网关:172.16.0.1
      • route del -host 192.168.1.3
    • 目标:192.168.0.0 网关:172.16.0.1
      • route del -net 192.168.0.0 netmask 255.255.255.0

    配置动态路由

    • 通过守护进程获取动态路由
      • 安装quagga包
      • 支持多种路由协议:RIP、OSPF和BGP
      • 命令vtysh配置

    netstat命令

    • 显示网络连接:
      • netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
      • -t: tcp协议相关
      • -u: udp协议相关
      • -w: raw socket相关
      • -l: 处于监听状态
      • -a: 所有状态
      • -n: 以数字显示IP和端口
      • -e:扩展格式
      • -p: 显示相关进程及PID
    • 常用组合:
      • -tan, -uan, -tnl, -unl
    • 显示路由表:
      • netstat {--route|-r} [--numeric|-n]
        • -r: 显示内核路由表
      • -n: 数字格式
    • 显示接口统计数据:
      • netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
        • netstat -i
        • netstat –I=IFACE
        • ifconfig -s eth0

    ip命令

    配置Linux网络属性:ip命令

    • ip - show / manipulate routing, devices, policy routing and tunnels

      • ip [ OPTIONS ] OBJECT { COMMAND | help }
      • OBJECT := { link | addr | route }
      • ip link - network device configuration
        • set dev IFACE
          • 可设置属性:
          • up and down:激活或禁用指定接口
            • ifup/ifdown
        • show [dev IFACE]:指定接口
          • [up]:仅显示处于激活状态的接口
    • ip addr { add | del } IFADDR dev STRING

      • [label LABEL]:添加地址时指明网卡别名
      • [scope {global|link|host}]:指明作用域
        • global: 全局可用
        • link: 仅链接可用
        • host: 本机可用
      • [broadcast ADDRESS]:指明广播地址
      • ip addr add 172.16.100.100/16 dev eth0 label eth0:0
      • ip addr del 172.16.100.100/16 dev eth0 label eth0:0
    • ip address show - look at protocol addresses

      • [dev DEVICE]
      • [label PATTERN]
      • [primary and secondary]
    • ip addr flush 使用格式同show

      • ip addr flush dev eth0
    • ip route - routing table management

      • 添加路由:ip route add
      • ip route add TARGET via GW dev 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.100 via 172.16.0.1
        • 添加网关:ip route add default via GW dev IFACE
        • ip route add default via 172.16.0.1
      • 删除路由:ip route del TARGET
      • 显示路由:ip route show|list
      • 清空路由表:ip route flush [dev IFACE] [via PREFIX]
        • ip route flush dev eth0

    ss命令

    • 格式:ss [OPTION]... [FILTER]

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

      • socket信息
    • 选项:

      • -t: tcp协议相关
      • -u: udp协议相关
      • -w: 裸套接字相关
      • -x:unix sock相关
      • -l: listen状态的连接
      • -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 )’
    • 常用组合:

      • -tan, -tanl, -tanlp, -uan

    示例:

    • ss -l 显示本地打开的所有端口
    • ss -pl 显示每个进程具体打开的socket
    • ss -t -a 显示所有tcp socket
    • ss -u -a 显示所有的UDP Socekt
    • ss -o state established '( dport = :ssh or sport = :ssh )' 显示所有已建立的
      • ssh连接
    • ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
    • 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:

      • 说明参考/usr/share/doc/initscripts-9.49.30/sysconfig.txt
      • 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”,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf

    • 设备配置被保存在文本文件中

      • /etc/sysconfig/network-scripts/ifcfg-
      • 帮助文档列出完整选项列表:/usr/share/doc/initcripts-
        • /sysconfig.txt

    动态配置:

    DEVICE=ethX
    HWADDR=0:02:8A:A6:30:45
    BOOTPROTO=dhcp
    ONBOOT=yes
    Type=Ethernet

    静态配置:

    DEVICE=ethX
    HWADDR=0:02:8A:A6:30:45
    IPADDR=192.168.0.123
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.254
    ONBOOT=yes
    Type=Etherne

    主机名和本地解析器

    • 配置当前主机的主机名:
      • hostname [HOSTNAME]
      • /etc/sysconfig/network
        • HOSTNAME=
    • 解析器执行正向和逆向查询
    • /etc/hosts
      • 本地主机名数据库和IP地址的映像
      • 对小型独立网络有用
      • 通常,在使用DNS前检查
      • getent hosts 查看/etc/hosts 内容

    dns名字解析

    • /etc/resolv.conf

      • nameserver DNS_SERVER_IP1
      • nameserver DNS_SERVER_IP2
      • nameserver DNS_SERVER_IP3
      • search magedu.com
    • /etc/nsswitch.conf

      • 与/etc/hosts相比优先于DNS
    • 正向解析:FQDN-->IP

      • dig -t A FQDN
      • host -t A FQDN
    • 反向解析:IP-->FQDN

      • dig -x IP
      • host -t PTR IP
    • /etc/sysconfig/network-scripts/route-IFACE

      • 注意:需service network restart生效
      • 两种风格:
        1. TARGET via GW
          • 如:10.0.0.0/8 via 172.16.0.1
        2. 每三行定义一条路由
          • ADDRESS#=TARGET
          • NETMASK#=mask
          • GATEWAY#=GW

    网卡别名

    • 对虚拟主机有用
    • 将多个IP地址绑定到一个NIC上
      • eth0:1 、eth0:2、eth0:3
    • ifconfig命令:
      • ifconfig eth0:0 192.168.1.100/24 up
      • ifconfig eth0:0 down
    • ip命令:
      • ip addr add 172.16.1.1/16 dev eth0
      • ip addr add 172.16.1.2/16 dev eth0 label eth0:0
      • ip addr del 172.16.1.2/16 dev eth0 label eth0:0
      • ip addr flush dev eth0 label eth0:0

    设备别名

    • 为每个设备别名生成独立的接口配置文件
      • 关闭NetworkManager服务
      • ifcfg-ethX:xxx
      • 必须使用静态联网
        • DEVICE=eth0:0
        • IPADDR=10.10.10.10
        • NETMASK=255.0.0.0
        • ONPARENT=yes
    • 注意:service network restart 生效
    • 参考:/usr/share/doc/initscripts-*/sysconfig.txt

    网络接口配置-bonding

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

    Bonding工作模式

    • 共7种模式:0-6 Mode
    • Mode 0 (balance-rr): 轮询(Round-robin)策略,从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
    • Mode 1 (active-backup): 活动-备份(主备)策略,只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave.为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
    • Mode 3 (broadcast):广播策略,在所有的slave接口上传送所有的报文,提供容错能力
    • active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和EtherChannel

    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状态:/proc/net/bonding/bond0

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

    • 删除bond0

      • ifconfig bond0 down
      • rmmod bonding
    • 详细帮助:

    CentOS 7网络配置

    • CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当增加或删除网卡
      时,名称可能会发生变化
    • CentOS 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

    使用传统命名方式:

    • (1) 编辑/etc/default/grub配置文件
      • GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
      • 或:修改/boot/grub2/grub.cfg
    • (2) 为grub2生成其配置文件
      • grub2-mkconfig -o /etc/grub2.cfg
    • (3) 重启系统

    CentOS 7网络配置工具

    • CentOS7主机名
      • 配置文件:/etc/hostname ,默认没有此文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
      • 显示主机名信息
        • hostname
        • hostnamectl status
      • 设置主机名
        • hostnamectl set-hostname centos7.magedu.com
        • 删除文件/etc/hostname,恢复主机名localhost.localdomain
    • CentOS 7网络配置工具
      • 图形工具:nm-connection-editor
      • 字符配置tui工具:nmtui
      • 命令行工具:nmcli

    nmcli命令

    • 地址配置工具:nmcli
    • nmcli [ OPTIONS ] OBJECT { COMMAND | help }
      • device - show and manage network interfaces
      • nmcli device help
      • connection - start, stop, and manage network connections
      • nmcli connection help
    • 修改IP地址等属性:
      • nmcli connection modify IFACE [+|-]setting.property value
        • setting.property:
        • ipv4.addresses ipv4.gateway
        • ipv4.dns1 ipv4.method manual | auto
    • 修改配置文件执行生效:systemctl restart network
      • nmcli con reload
    • nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0

    使用nmcli配置网络

    • NeworkManager是管理和监控网络设置的守护进程
    • 设备即网络接口,连接是对网络接口的配置,一个网络接口可有多个连接配置,但同时只有一个连接配置生效
    • 显示所有包括不活动连接
      • nmcli con show
    • 显示所有活动连接
      • nmcli con show --active
    • 显示网络连接配置
      • nmcli con show "System eth0“
    • 显示设备状态
      • nmcli dev status
    • 显示网络接口属性
      • nmcli dev show eth0
    • 创建新连接default,IP自动通过dhcp获取
      • nmcli con add con-name default type Ethernet ifname eth0
    • 删除连接
      • nmcli con del default
    • 创建新连接static ,指定静态IP,不自动连接
      • nmcti con add con-name static ifname eth0 autoconnect no type
      • Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254
    • 启用static连接配置
      • nmcli con up static
    • 启用default连接配置
      • nmcli con up default
    • 查看帮助
      • nmcli con add help

    举例:

    • 修改连接设置
      • nmcli con mod “static” connection.autoconnect no
      • nmcli con mod “static” ipv4.dns 172.25.X.254
      • nmcli con mod “static” +ipv4.dns 8.8.8.8
      • nmcli con mod “static” -ipv4.dns 8.8.8.8
      • nmcli con mod “static” ipv4.addresses “172.16.X.10/24 172.16.X.254”
      • nmcli con mod “static” +ipv4.addresses 10.10.10.10/16
    • DNS设置,存放在/etc/resolv.conf文件中
      • PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取 等价于下面命令:
      • nmcli con mod “system eth0” ipv4.ignore-auto-dns yes

    命令与文件的对照:
    nmcli

    • 修改连接配置后,需要重新加载配置
      • nmcli con reload
      • nmcli con down “system eth0” 可被自动激活
      • nmcli con up “system eth0”
      • nmcli dev dis eth0 禁用网卡,访止被自动激活
    • 图形工具
      • nm-connection-editor
    • 字符工具
      • nmtui
      • nmtui-connect
      • nmtui-edit
      • nmtui-hostname

    nmcli实现bonding:

    • 添加bonding接口
      • nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
    • 添加从属接口
      • nmcli con add type bond-slave ifname ens7 master bond0
      • nmcli con add type bond-slave ifname ens3 master bond0
        • 注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
    • 要启动绑定,则必须首先启动从属接口
      • nmcli con up bond-slave-eth0
      • nmcli con up bond-slave-eth1
    • 启动绑定
      • nmcli con up mybond0

    网络组Network Teaming

    • 网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量

    • 网络组不同于旧版中bonding技术,提供更好的性能和扩展性

    • 网络组由内核驱动和teamd守护进程实现

    • 多种方式runner

      • broadcast
      • roundrobin
      • activebackup
      • loadbalance
      • lacp (implements the 802.3ad Link Aggregation Control Protocol)
    • 启动网络组接口不会自动启动网络组中的port接口

    • 启动网络组接口中的port接口总会自动启动网络组接口

    • 禁用网络组接口会自动禁用网络组中的port接口

    • 没有port接口的网络组接口可以启动静态IP连接

    • 启用DHCP连接时,没有port接口的网络组会等待port接口的加入

    创建网络组接口:

    • nmcli con add type team con-name CNAME ifname INAME [config JSON]
      • CNAME 连接名,INAME 接口名
      • JSON 指定runner方式
      • 格式:'{"runner": {"name": "METHOD"}}'
      • METHOD 可以是broadcast, roundrobin,
        • activebackup, loadbalance, lacp

    创建port接口:

    • nmcli con add type team-slave con-name CNAME ifname INAME master
      • TEAM
      • CNAME 连接名
      • INAME 网络接口名
      • TEAM 网络组接口名
    • 连接名若不指定,默认为team-slave-IFACE
    • nmcli dev dis INAME
    • nmcli con up CNAME
      • INAME 设备名 CNAME 网络组接口名或port接口

    网络组示例:

    • nmcli con add type team con-name myteam0 ifname team0 config '{"runner": {"name": "loadbalance"}}' ipv4.addresses 192.168.1.100/24 ipv4.method manual
    • nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0
    • nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0
    • nmcli con up myteam0
    • nmcli con up team0-eth1
    • nmcli con up team0-eth2
    • teamdctl team0 state
    • nmcli dev dis eth1

    管理网络组配置文件

    • /etc/sysconfig/network-scripts/ifcfg-team0

    DEVICE=team0
    DEVICETYPE=Team
    TEAM_CONFIG="{"runner": {"name": "broadcast"}}"
    BOOTPROTO=none
    IPADDR0=172.16.0.100
    PREFIX0=24
    NAME=team0
    ONBOOT=yes

    • /etc/sysconfig/network-scripts/ifcfg-team0-eth1

    DEVICE=eth1
    DEVICETYPE=TeamPort
    TEAM_MASTER=team0
    NAME=team0-eth1
    ONBOOT=yes

    删除网络组:

    • nmcli connection down team0
    • teamdctl team0 state
    • nmcli connection show
    • nmcli connectioni delete team0-eth0
    • nmcli connectioni delete team0-eth1
    • nmcli connection show

    网桥

    • 桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。
    • 主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、D

    配置实现网桥:

    • 创建软件网桥
      • nmcli con add con-name mybr0 type bridge ifname br0
      • nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
      • nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0
    • 查看配置文件
      • cat /etc/sysconfig/network-scripts/ifcfg-br0
      • cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
    • 工具包 yum install bridge-utils
    • 查看网桥 brctl show
    • 查看CAM表 brctl showmacs br0
    • 添加和删除网桥 brctl addbr | delbr br0
    • 添加和删除网桥中网卡 brctl addif | delif br0 eth0
    • 注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口

    测试网络工具

    • 在命令行下测试网络的连通性
      • 显示主机名
        • hostname
      • 测试网络连通性
        • ping
      • 显示正确的路由表
        • ip route
    • 跟踪路由
      • traceroute
      • tracepath
      • mtr
    • 确定名称服务器使用
      • nslookup
      • host
      • dig

    Ubuntu的网络配置

    • 网卡名称:

      • 默认ubuntu的网卡名称和CentOS 7类似,如:ens33,ens38等
    • 修改网卡名称为传统命名方式:

      • 修改配置文件为下面形式
        • vi /etc/default/grub
        • GRUB_CMDLINE_LINUX="net.ifnames=0"
      • 生效新的grub.cfg文件
        • grub-mkconfig -o /boot/grub/grub.cfg
      • reboot
    • 官网文档:

    • 配置自动获取IP

    cat /etc/netplan/01-netcfg.yaml  
    network:  
        version: 2  
        renderer: networkd  
        ethernets:  
            ens33:  
                dhcp4: yes  
    
    • 修改网卡配置文件后需执行命令生效:netplan apply

    • 配置静态IP:

    cat /etc/netplan/01-netcfg.yaml
    network:
        version: 2
        renderer: networkd
        ethernets:
            eth0:
                addresses:
                    - 192.168.6.10/24
                    - 10.10.10.10/24
                gateway4: 192.168.6.1
                nameservers:
                    search: [mydomain, otherdomain]
                    addresses: [223.5.5.5, 8.8.8.8, 1.1.1.1]
    
    • 查看ip和gateway
      ip addr
      route -n
    • 查看DNS
    ls -l /etc/resolv.conf
    lrwxrwxrwx 1 root root 39 Dec 12 11:36 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
    
    systemd-resolve --status
    
    • 修改主机名
      • hostnamectl set-hostname ubuntu1904
  • 相关阅读:
    【leetcode】49. 字母异位词分组
    【leetcode】48. 旋转图像
    【leetcode】48. 全排列 2
    Day4前端学习之路——背景边框列表链接和更复杂的选择器
    Day3前端学习之路——CSS基本知识
    Day2前端学习之路——HTML基本知识
    Day1前端学习之路——概述
    Axure实现抽奖转盘(二)
    Axure实现百度登录页面(一)
    线性代数课程较好的资料
  • 原文地址:https://www.cnblogs.com/kjalbert/p/11732813.html
Copyright © 2011-2022 走看看