网络管理续

网卡改名

openeuler

1.先查看ip a | egrep 'mtu|scope'

2.修改网卡配置文件

cd /etc/sysconfig/network-scripts/

mv ifcfg-ens160 ifcfg-eth0

sed -i 's@ens160@eth0@g'  ifcfg-eth0

3.修改grub配置文件

vim  /etc/default/grub

GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0 biosdevname=0"

net.ifnames=0:关闭系统的 “可预测网卡命名” 功能

biosdevname=0:关闭 BIOS 提供的设备命名规则

两个一起加上,系统才会放弃 ens160 这种名字,改用 eth0。

4.重读配置文件并重启

网卡属性定制

(rocky+)

准备工作,为rocky10虚拟主机添加一块VM虚拟网卡,设置为NAT模式

接着打开,检查网卡名称  ip a | grep mtu

2.查看网卡id

cat /sys/class/net/ens224/type

3.定制设备关联信息,增加一条记录,

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

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

4.定制配置文件

创建网卡文件

cd /etc/NetworkManager/system-connections/

cp ens160.nmconnection eth1.nmconnection

定制配置

cat eth1.nmconnection

vim eth1.nmconnection

重启生效

网卡生效

准备再添加一块虚拟网卡,NAT模式

检查网卡名称

ip -a | tail -3

查看设备现状

nmcli  con

定制设备关联信息

cd /etc/NetworkManager/system-connections/

查看设备信息

nmcli device

查看配置ls

定制配置

cat ens256.nmconnection

vim ens256 nmconnection

重载配置

nmcli conn down ens256

  网络命令:

        hostname(查看 / 设置主机名)

   hostname:显示主机名

显示ip地址,会卡一会,要通过dns反解主机名 hostname -i

显示所有ipv4地址 hostname -I

临时定制主机名 hostname ubuntu-test

立刻生效 exec /bin/bash,重启后生效reboot

从文件中读取

     设置主机名hostnamectl 永久设置

恢复原来的名字

   ifconfig( 查看 / 配置网卡 IP、子网、网关)

        route( 查看 / 配置路由表 )

        netstat( 查看网络连接、端口和路由统计 )

        ip link( 管理 / 查看网卡设备状态(开关、属性) )

        ip addr( 查看 / 配置网卡 IP 地址信息。 )

        ip route( 查看 / 配置路由表

        ss( 查看网络连接(比 netstat 快) )

        nmcli( NetworkManager 命令行工具,管理网卡 / 网络 )

        ping( 测试网络连通性 ) 仅主机模式

连接网

        fping( 批量 ping 多台主机,检测连通性 )

        curl( 获取 / 发送网页数据,测试链接)

        wget( 下载文件 )

        tcpdump( 抓包,分析网络流量 )

        traceroute( 追踪数据包路由路径 )

        tracepath功能同 traceroute,无需特权,追踪路由 )

        mtrping+traceroute 结合,实时链路诊断 )

        nmap扫描主机 / 端口,探测网络服务 )

        nc网络调试工具,监听 / 传输数据 )

shell编程进阶

             循环语法:for、while、until

             循环控制:break、continue、exit

             函数:

                           定义函数、传参函数、函数调用、函数传参、脚本传参

                           函数体里面的变量 local

linux 启动

  • -- linux 启动开机加电自检(BIOS检测硬件,确认CPU,内存,硬盘等正常)
  •      -- 系统引导(读取硬盘引导区,定位操作系统)
  •     -- grub 启动(显示系统选择菜单,加载Linux内核)
  •     -- linux 内核管理(初始化硬件,加载驱动,挂载根文件系统)
  •     -- 1 号进程(systemd,系统第一个进程,创建左右后续进程,启动系统服务)
  •      --  系统初始化(加载系统配置和环境变量)
  •      -- 服务运行级别(设定系统 工作模式,启动对应服务)
  •      --  隐藏 - 系统启动自定义收尾动作(后台完成系统底层初始化)
  •     -- 登录(进入终端或图形界面,等待使用)

dns 解析

               定位:域名 ->ip(方便人类记忆域名,设备依靠IP完成网络通信)

               域名:

                            FQDN(完全合格域名,完整全网唯一域名)

                            主机名(区分服务器,代表具体设备)

                            二级域(企业或个人注册的专属域名)

                            顶级域(域名末尾标识,如com,cn)

                            根域(域名最顶层,所有域名的源头)

               根服务器:域名解析最顶层服务器

                             ipv4(13组根服务器)、ipv6【25组根服务器】

               域名解析流程:

                       递归查询:域名(发起解析请求) - 缓存(查询本机DNS缓存) - hosts(匹配本地静态映射文件)-localDNS(请求本地域名服务器解析)

                       迭代查询:localDNS - 先访问根域服务器,localDNS - 根域指引访问顶级域服务器、localDNS - 顶级域指引访问二级域服务器

                配置流程:

                        主配置文件(控制DNS服务全局参数)

                        ->zone 配置文件(定义域名区域信息)

                      ->db 存放具体域名与数据记录解析规则文件

                解析记录类型:

                      SOA(起始授权记录,标识区域管理信息)

                       NS(域名服务器记录,指定DNS服务器)

                        A(将域名解析为IPV4地址)

                        AAAA(将域名解析为ipv6地址)

                       PTR(反向解析,IP解析为域名)

                     CNAME(别名记录,域名跳转)

                      SRV (服务定位记录,标记服务端口与地址)

    实践

            dns 主从

主服务器(10.0.0.13)配置步骤

  • 确认工作目录:head -n2 /etc/bind/named.conf.options

  • 编辑区域配置:vim /etc/bind/named.conf.local,写入主服务器 zone 配置

  • 创建并编辑正向区域文件:vim /var/cache/bind/db.magedu.com,写入解析规则

  • 语法检查:named-checkzone magedu.com /var/cache/bind/db.magedu.com

  • 重启服务:named-checkconf && systemctl restart bind9

  • 验证服务状态:systemctl status bind9


从服务器(10.0.0.16)配置步骤

  • 编辑区域配置:vim /etc/bind/named.conf.local,写入从服务器 zone 配置

  • 创建同步目录并授权:mkdir -p /var/cache/bind/slaves && chown bind:bind /var/cache/bind/slaves

  • 语法检查与服务重启:named-checkconf && systemctl restart bind9

  • 验证同步结果:ls /var/cache/bind/slaves/,看到db.magedu.com文件即同步成功

  • 解析测试:nslookup dns1.magedu.com 127.0.0.1,成功解析到10.0.0.13即配置完成

            dns 转发

主 DNS 服务器:10.0.0.15(Rocky)

  • 安装 bind 服务及工具yum install -y bind bind-utils

  •         查看 named 系统所属组,确认权限getent group named

新建正向解析数据文件touch /var/named/db.golang-magedu.com

设置解析文件权限为 640chmod 640 /var/named/db.golang-magedu.com

恢复文件 SELinux 安全上下文restorecon -v /var/named/db.golang-magedu.com

编辑正向解析文件,添加域名 A 记录vim /var/named/db.golang-magedu.com

检查解析区域配置是否正确named-checkzone golang-magedu.com /var/named/db.golang-magedu.com

重启 named 服务,加载配置systemctl restart named

查看 named 服务运行状态systemctl status named

问题===========================

关闭防火墙systemctl stop firewalld

临时关闭 SELinuxsetenforce 0


转发客户端操作ubuntu-13:

测试与主 DNS 服务器网络连通性ping 10.0.0.15

编辑系统 DNS 配置文件,指定上游 DNSvim /etc/systemd/resolved.conf

配置DNS转发  vim /etc/named.conf

重启系统解析服务,使配置生效systemctl restart systemd-resolved

指定主 DNS 地址,测试 DNS 转发解析nslookup www.golang-magedu.com 10.0.0.15

          问: TCP/UDP 的 53 端口干什么的?

           TCP【主从同步用的】、UDP【对外 dns 解析用的】

CDN 和网络通信安全


1 CDN

               定位: 内容分发网络,就近缓存静态资源,提升访问速度、减轻源站压力。


2 网络通信安全

              通信安全里面三大算法:对称加密【效率高】、非对称加密【身份认证】、单向加密算法【数据完整性】

             通信的安全:多种算法的组合

             落地方式:SSL/TLS 依靠 CA 体系,通过证书实现加密通信和身份认证。

             自建 CA 步骤

                   1 CA 创建【私钥、公钥】

                   2 服务端操作【私钥创建 .key、签名请求创建 .csr】

                   3 CA 签发证书【生成证书 .crt | .pem】

               https 定位:http + ssl/tls(加密版 HTTP,安全传输)


3 ssh

              定位:安全的 shell(安全远程登录工具)

              功能:远程登录【ssh root@10.0.0.13】

                         远程执行【ssh root@10.0.0.13 "cmd"】

                         远程传输【scp|rsync 源文件 目标目录】

 自建 CA 操作(rocky10)

1.创建CA所需要的文件

mkdir -pv /etc/pki/CA/{certs,crl,newcert,private}

tree /etc/pki/CA/

2.生成CA私钥

cd /etc/pki/CA/

openssl genrsa -out private/cakey.pem 2048

ls private/

3.生成CA自签名证书

  openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -days 3650 -out /etc/pki/CA/cacert.pem

4.查看证书

 cat /etc/pki/CA/cacert.pem

openssl -x509 -in /etc/pki/CA/cacert.pem -noout -text

4.导到WINDOWS中查看

sz /etc/pki/CA/cacert.pem

 ssh 跨主机免密码认证

1.在客户端生成密钥对

rocky

查看当前目录效果 ls .ssh/

生成秘匙 ssh-keygen

确认效果   ls .ssh/

2.把公钥文件里传输至远程服务器对应用户的家目录ubuntu24-13

查看目标机 ls .ssh/

将本机公匙上传给远程主机ssh-copy-id root@10.0.0.13

远程主机再次查看目标主机 ls .ssh/

测试免密登录 ssh root@10.0.0.13 cat /etc/lsb-release

1. 解析/etc/sysconfig/network-scripts/ifcfg-eth0配置格式。

TYPE=Ethernet              # 网络类型:以太网
PROXY_METHOD=none          # 代理方法:无
BROWSER_ONLY=no            # 仅浏览器使用:否
BOOTPROTO=none             # 启动协议:无(表示不使用如DHCP等自动获取IP的方式,采用静态配置)
DEFROUTE=yes               # 默认路由:是(此网络接口用于默认路由)
IPV4_FAILURE_FATAL=no      # IPv4故障致命性:否(IPv4配置失败不会导致网络启动失败)
IPV6INIT=yes               # IPv6初始化:是(启用IPv6支持)
IPV6_AUTOCONF=yes          # IPv6自动配置:是(允许系统自动配置IPv6地址)
IPV6_DEFROUTE=yes          # IPv6默认路由:是(此网络接口用于IPv6默认路由)
IPV6_FAILURE_FATAL=no      # IPv6故障致命性:否(IPv6配置失败不会导致网络启动失败)
IPV6_ADDR_GEN_MODE=eui64   # IPv6地址生成模式:eui64(基于网络接口的唯一标识符生成IPv6地址)
NAME=eth0                  # 网络接口名称:eth0
UUID=0bb624f5-12ff-45e4-b950-00f743ea97b7  # 网络接口的唯一标识符(UUID)
DEVICE=eth0                # 设备名称:eth0(表示与网络接口名称相同)
ONBOOT=yes                 # 开机时自动启动:是
IPADDR=10.0.0.31           # IPv4地址:10.0.0.31(静态配置的IP地址)
PREFIX=24                  # 网络前缀长度:24
GATEWAY=10.0.0.2           # 默认网关:10.0.0.2
DNS1=10.0.0.2              # DNS服务器地址:10.0.0.2(首选DNS服务器)
DOMAIN=xxx.com             # 用于简化域名访问用的配置,输入www会自动补全域名后缀

2. 使用脚本判断 你主机所在网络内在线的主机IP有哪些? ping通则在线。

#!/bin/bash
#
# 文件名:scan_lan.sh
# 用途:扫描当前局域网内所有在线主机 IP
# 作者:yangfucheng
# 日期:2024-(自动生成日期)

# -------------------------- 第一步:获取本机 IP --------------------------
# hostname -I 会输出本机所有 IP(空格分隔),awk 取第一个就是主 IP
# 比如你的环境是 10.0.0.15,那 myip 就是 10.0.0.15
myip=$(hostname -I | awk '{print $1}')

# -------------------------- 第二步:拆分网段 --------------------------
# cut -d. -f1  取第一段(10)
# cut -d. -f2  取第二段(0)
# cut -d. -f3  取第三段(0)
# 合并后 net = 10.0.0,就是你所在的整个网段前缀
net1=$(echo $myip | cut -d. -f1)
net2=$(echo $myip | cut -d. -f2)
net3=$(echo $myip | cut -d. -f3)
net="$net1.$net2.$net3"

# -------------------------- 第三步:循环扫描 1~254 --------------------------
# 从 1 循环到 254,逐个拼 IP
for i in {1..254}
do
    # 拼接成完整 IP,比如 10.0.0.1、10.0.0.2 … 10.0.0.254
    ip="$net.$i"

    # ping -c 1 只发一个包,-W 1 超时1秒
    # >/dev/null 2>&1 把所有输出都屏蔽,不干扰,只看结果
    ping -c 1 -W 1 $ip >/dev/null 2>&1

    # $? = 0 表示 ping 成功,说明该 IP 在线
    [ $? -eq 0 ] && echo "在线: $ip"
done

# -------------------------- 第四步:扫描结束提示 --------------------------
echo "================================"
echo "扫描完成"

3. 使用while read line和/etc/passwd,计算用户id总和。

#/bin/bash
#日期:2026-04-25
#脚本名字:uid_sum.sh
#作者:yangfucheng
#功能:while read line 读取/etc/passwd 计算所有用户ID总和
#初始化总和变量为0,用于累加所有用户的ID
sum=0
#开始循环,逐行读取/etc/passwd文件内容,每次读取一行赋值给line变量
while read line
do
        #跳过空行,防止出错
        [ -z "$line" ] &&  continue
        #截取当前行中:分隔的第三列,即用户uid,赋值uid变量
        uid=$(echo "$line" | cut -d: -f3)


        #将当前uid累加到总和sum中
        sum=$((sum + uid))
#循环结束,将/etc/passwd文件作为循环插入
done < /etc/passwd

#输出最终计算的所有用户的UID总和
echo "所有用户的UID总和为:$sum"

4. 总结索引数组和关联数组,字符串处理,高级变量使用及示例。

索引数组:数字下标从0开始

arr(a,b,c,d,10,20)

arr[0]="张三"

arr[1]="李四"

arr[2]="王五"

输出第1个元素 echo ${arr[0]}

输出所有元素 echo ${arr[*]}

echo ${arr[@]}

数组长度 echo ${#arr[@]}

遍历数组 for i in ${arr[@]};do echo $i;done

关联数组:必须先声明:declare -A  (键值对)

declare -A person

person["name"]="小明"

person["age"]=20

person["city"]="北京"

取值 echo ${person["name"]}

所有key echo ${!person[@]}

 所有value echo ${person[@]}

遍历 for key in ${!person[@]};

do

            echo "$key: ${person[$key]}"

done

字符串处理:

取长度 

str="hello world"

echo ${#str}

截取字符串

从第2个字符开始,取3个 echo ${str:1:3}

替换

替换第一个匹配 echo ${str/old/new}

删除前后缀

 删除前缀 echo ${str#he}

 删除后缀 echo ${str%d}

大小写转换

 转大写 echo ${str^^}

转小写 echo ${str,,}

高级变量使用;

默认值

变量为空,使用默认值

echo ${name:-"yangfucheng"}

判断变量是否存在

存在则赋值

echo ${name:="默认值"}

变量替换

存在则赋值 echo ${name:="默认值"}

命令结果赋值给变量

now=$(date)

echo $now

数组转字符串

arr=(a b c)

str="${arr[*]}"

索引数组遍历

arr=(苹果 香蕉 橘子)

for fruit in ${arr[@]};do

        echo "水果:$fruit"

done

关联数组存用户信息

declare -A user user

["name"]="小红"

user["age"]=18

for k in ${!user[@]};do

      echo "$k => ${user[$k]}"

done

字符串截取 + 替换

str="I love Linux"

echo ${str:2:4}

echo ${str/Linux/Shell} 

5. 求10个随机数的最大值与最小值。

#!/bin/bash
# 作者:yangfucheng
# 日期:2026-04-24
# 功能:生成10个随机数,计算最大值、最小值
#定义数组存放随机数
arr=()
#循环生成10个随机数
for ((i=0; i<10; i++))
do
        #生成0-99随机数
        num=$((RANDOM % 100))
        arr+=($num)

done
#输出这10个随机数
echo "生成的10个随机数:${arr[@]}"
#初始化最大最小值
max=${arr[0]}
min=${arr[0]}
#遍历比较
for n in ${arr[@]}
do
        if [ $n -gt $max ]; then
                max=$n
        fi
        if [ $n -lt $min ]; then
                min=$n
        fi
done
#输出结果
echo "最大值:$max"
echo "最小值:$min"

6. 使用递归调用,完成阶乘算法实现。

#/bin/bash
#recursive factorial-递归实现阶乘算法
#作者:yangfucheng
#日期:2026-04-26
#递归函数:计算阶乘
#参数:n(非负整数)
#返回:n!的结果
factorial(){
        local n=$1

        #递归终止条件:0! 和 1!都等于1
        if [ $n -eq 0 ]  ||  [ $n -eq 1 ]; then
                echo 1
        else
                #递归公式:n! = n * (n-1)!
                local prev=$(factorial $(( n - 1)))
                echo $((n * prev))

        fi
}
#主程序 :交互输入并计算
read -p "请输入一个非负整数:" num

#输入合法性检查
if ! [[ $num =~ ^[0-9]+$ ]]; then
    echo "错误:请输入一个有效的非负整数!"
    exit 1
fi
#调用递归函数并输出结果
result=$(factorial $num)
echo "$num = $result"

7. 总结主机到主机的包传递过程。

发送端从上到下逐层封装:应用数据 → 加端口 → 加 IP → 加 MAC → 转为电信号发出。

中间经过交换机、路由器逐跳转发,根据 MAC 和 IP 寻址。

接收端从下到上逐层解封装,最终把数据交给目标应用。

8. 总结IP地址 A, B, C, D 类,并解析IP地址的组成

A 类地址:首个十进制数范围 1~126,默认子网掩码 255.0.0.0。网络位占 8 位,主机位占 24 位,网络数量少、主机数量极多,用于大型网络。

B 类地址:首个十进制数范围 128~191,默认子网掩码 255.255.0.0。网络位 16 位,主机位 16 位,适合中型企业、校园网。

C 类地址:首个十进制数范围 192~223,默认子网掩码 255.255.255.0。网络位 24 位,主机位 8 位,主机数量少,是最常用的局域网地址。

D 类地址:首个十进制数范围 224~239,没有网络位和主机位之分,专门用于 组播,不分配给普通主机使用。

9. 201.222.200.111/18计算主机数?子网掩码?说明计算方法。

网络位是18

子网掩码计算:

连续 18 位二进制为 1,分段为:11111111.11111111.11000000.00000000

8 位二进制固定值(从左到右) 128 64 32 16 8 4 2 1

换算十进制:255.255.192.0(第三段前 2 个 1 相加:128+64=192)

主机位:32−18=14 位

可用主机数:214−2=16382

10. 当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?

/16 掩码 = 255.255.0.0

/24 掩码 = 255.255.255.0

A 掩码 255.255.0.0,只对比 IP 前两段,A 和 B 前两段相同,A 判断为同一网段

B 掩码 255.255.255.0,对比前三段,双方不同,B 判断为不同网段。

A 判定与 B 为同一网段,B 判定与 A 为不同网段。有网关可正常通信;无网关则无法通信。

11. 如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。

32个子网,那么需要借5位做子网,原网络位:8 位,新网络位:8+5=13 位,剩余主机位:32−13=19 位,11111111 . 11111000 . 00000000 . 00000000,也就是255.248.0.0,主机数:219−2=524286台。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐