4. SONiC 命令行体系与 show 命令排错入门

SONiC 命令行体系与 show 命令排错入门 学习卡片

任务说明

本案例目标是在SONiC交换机上完成管理接口(通常为eth0)的IP地址、子网掩码和默认网关配置,并验证管理网络连通性。SONiC将管理接口配置持久化于/etc/sonic/config_db.json中,运行时可通过config命令动态修改。本案例同时覆盖两种方式,并给出验证路径。

配置前检查

首先确认当前管理接口名称与已有配置。SONiC默认管理接口为eth0,但部分平台可能使用mgmt0。执行以下命令查看:

ip addr show eth0
cat /etc/sonic/config_db.json | python3 -m json.tool | grep -A 15 "MGMT_INTERFACE"

预期输出中应能看到当前接口状态。若接口不存在,请先确认平台实际管理接口名称,后续命令需相应替换。

方法一:命令行动态配置(立即生效)

使用config interface ip add命令配置管理IP与掩码,使用config ip route add添加默认网关。本案例以管理IP 192.168.1.100/24、网关192.168.1.1为例:

sudo config interface ip add eth0 192.168.1.100/24
sudo config ip route add default 192.168.1.1

配置后立即验证接口地址与路由表:

ip addr show eth0
ip route show

预期输出中eth0应绑定192.168.1.100/24,路由表应包含default via 192.168.1.1 dev eth0。

方法二:修改config_db.json持久化配置

命令行配置在重启后会丢失,如需永久生效需写入config_db.json。先查看当前MGMT_INTERFACE段结构:

cat /etc/sonic/config_db.json | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps(d.get('MGMT_INTERFACE',{}), indent=2))"

若尚无该段,则需新增。使用以下Python脚本安全更新配置(以eth0为例):

sudo python3 << 'EOF'
import json, ipaddress

# 定义管理接口配置
mgmt_if = "eth0"
mgmt_ip = "192.168.1.100/24"
gw = "192.168.1.1"

# 读取现有配置
with open("/etc/sonic/config_db.json", "r") as f:
    config = json.load(f)

# 初始化 MGMT_INTERFACE 段
if "MGMT_INTERFACE" not in config:
    config["MGMT_INTERFACE"] = {}

# 构造 key: (接口, IP前缀)  value: {"gw": 网关}
key = (mgmt_if, mgmt_ip)
config["MGMT_INTERFACE"][key] = {"gw": gw}

# 写回文件(保留原格式)
with open("/etc/sonic/config_db.json", "w") as f:
    json.dump(config, f, indent=4)
    f.write("\n")

print("config_db.json 已更新")
EOF

注意:config_db.json中MGMT_INTERFACE的键为["eth0","192.168.1.100/24"]的JSON数组形式,上述脚本使用元组作为键,json.dump会自动转换为数组。修改后需重启sonic-mgmt-framework服务或执行config load -y /etc/sonic/config_db.json使配置生效:

sudo config load -y /etc/sonic/config_db.json

验证连通性

配置生效后,从管理网络内另一台主机(如192.168.1.50)执行:

ping -c 3 192.168.1.100

同时在SONiC交换机上测试到网关的连通性:

ping -c 3 192.168.1.1

若需验证互联网或远端管理网络连通,可进一步:

ping -c 3 8.8.8.8   # 需网关允许转发

判定标准

  • ip addr show eth0显示192.168.1.100/24且状态为UP;
  • ip route show包含default via 192.168.1.1 dev eth0;
  • 从管理主机能ping通交换机管理IP;
  • 交换机能ping通网关IP;
  • 重启后配置仍然存在(验证持久化生效)。
管理IP与默认网关配置验证拓扑 管理主机 192.168.1.50/24 SONiC交换机 eth0: 192.168.1.100/24 默认网关 192.168.1.1 管理网络 默认路由 配置命令(二选一或组合使用) # 方法一:命令行(重启失效) sudo config interface ip add eth0 192.168.1.100/24 sudo config ip route add default 192.168.1.1 # 方法二:修改 /etc/sonic/config_db.json 后 config load -y 验证点1: ip addr show eth0 验证点2: ping 192.168.1.1

故障排查提示

若配置后ping不通网关,按以下顺序检查:

  • ip addr show eth0确认IP已正确绑定且接口为UP状态;
  • ip route show确认默认路由存在且dev指向eth0;
  • 检查网关设备是否配置了指向交换机管理IP的回程路由;
  • 若使用config load -y后配置未生效,检查config_db.json中MGMT_INTERFACE键格式是否为["eth0","192.168.1.100/24"],且无重复键冲突。