FRR OSPF Route-MAP 配置指南

概述

Route-Map 是 FRR (FRRouting) 中强大的路由策略工具,用于控制 OSPF 路由的发布和接收。通过 Route-Map,可以实现:

  • 路由过滤
  • 路由属性修改
  • 条件路由发布

基本概念

Route-Map 结构

Route-Map 由一条或多条 sequence 组成,每个 sequence 有:

  • 匹配条件 (match):定义哪些路由会被处理
  • 动作 (action)permit(允许)或 deny(拒绝)
  • 设置语句 (set):修改路由属性

顺序执行

Route-Map 按序列号从小到大依次执行:

  • 一旦匹配成功,执行对应动作并停止
  • 如果所有 sequence 都未匹配,默认拒绝

常用匹配条件

匹配类型说明示例
ip address匹配 IP 地址/前缀match ip address prefix-list LIST
interface匹配出接口match interface eth0
metric匹配路由开销match metric 100
protocol匹配路由协议类型match protocol ospf
next-hop匹配下一跳地址match ip next-hop A.B.C.D
tag匹配路由标签match tag 100
as-path匹配 AS 路径(BGP)match as-path 100

支持的协议类型

  • ospf - OSPF 路由
  • static - 静态路由
  • connected - 直连路由
  • kernel - 内核路由
  • rip - RIP 路由
  • bgp - BGP 路由
  • isis - IS-IS 路由
  • pim - PIM 路由

Netbox 迁移到 k3s

本文记录了将 Netbox 从旧环境迁移到 k3s 集群的过程。

迁移步骤

1. 备份数据库

使用 pg_dump 导出 Netbox 数据库,排除变更日志表以减小备份体积:

pg_dump --username netbox --password --host localhost --exclude-table-data=extras_objectchange netbox > netbox.sql

2. 删除旧 Pod

为了避免 Pod 竞争和锁定问题,先删除现有的 Netbox Pod:

kubectl delete po netbox-68cbd8b854-2hvgp

3. 修改 PostgreSQL 认证方式

临时禁用密码认证

# 进入 PostgreSQL Pod
kubectl exec -it netbox-postgresql-0 -- sed -ibak 's/^\([^#]*\)md5/\1trust/g' /opt/bitnami/postgresql/conf/pg_hba.conf

# 重新加载配置
kubectl exec -it netbox-postgresql-0 -- pg_ctl reload

创建新数据库和用户

kubectl exec -it netbox-postgresql-0 -- psql -U postgres

DROP DATABASE netbox;
CREATE DATABASE netbox;
ALTER USER netbox WITH PASSWORD 'balabalabala';
ALTER DATABASE netbox OWNER TO netbox;

-- PostgreSQL 15 及以上版本需要
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;

恢复密码认证

kubectl exec -it netbox-postgresql-0 -- sed -i 's/^\([^#]*\)trust/\1md5/g' /opt/bitnami/postgresql/conf/pg_hba.conf
kubectl exec -it netbox-postgresql-0 -- pg_ctl reload

4. 恢复数据库

kubectl exec -it netbox-postgresql-0 -- sh -c "PGPASSWORD=balabalabala psql -U netbox -d netbox < /tmp/netbox.sql"

wget用Content-Disposition字段值为文件名

基本用法

wget可以通过--content-disposition参数使用HTTP响应头中的Content-Disposition字段来设置下载文件的文件名。

wget [--no-check-certificate] --content-disposition 'url'

详细说明

Content-Disposition头字段

Content-Disposition是HTTP响应头中的一个字段,用于指示如何处理响应内容。当服务器希望浏览器下载文件而不是显示时,会使用这个字段。

常见的格式:

Content-Disposition: attachment; filename="example.pdf"
Content-Disposition: attachment; filename*=UTF-8''%E4%BE%8B%E5%AD%90.pdf

参数说明

  • --content-disposition: 启用对Content-Disposition头的支持
  • --no-check-certificate: 跳过SSL证书验证(可选,用于自签名证书)

实际应用场景

1. 动态文件下载

当下载链接指向动态生成的文件时,服务器会通过Content-Disposition指定正确的文件名:

wget --content-disposition "https://example.com/download.php?id=123"

2. 中文文件名处理

对于包含中文字符的文件名,Content-Disposition可能会使用URL编码:

wget --content-disposition "https://example.com/中文文件.pdf"

wget会自动处理URL编码的文件名。

3. 批量下载

结合其他参数使用:

# 后台下载,使用Content-Disposition文件名
wget -b --content-disposition "https://example.com/file.zip"

# 限制下载速度,使用Content-Disposition文件名
wget --limit-rate=100k --content-disposition "https://example.com/large-file.iso"

pip-audit:Python 依赖安全扫描工具

pip-audit 是 PyPA(Python Packaging Authority)维护的依赖安全扫描工具,用于检查 Python 环境和依赖文件中是否存在已知漏洞。数据来源是 Python Packaging Advisory Database,通过 PyPI JSON API 或 OSV 查询。

和 npm audit 类似,但 pip 本身没有内置 audit 功能,pip-audit 填补了这个空缺。

安装

pip install pip-audit

需要 Python 3.10+。也支持 conda 安装:

conda install -c conda-forge pip-audit

基本用法

扫描当前环境

pip-audit

直接扫描当前虚拟环境中安装的所有包,输出有漏洞的包及 CVE 编号。

扫描 requirements 文件

pip-audit -r requirements.txt

扫描项目路径

pip-audit /path/to/project

会自动识别项目中的依赖文件(requirements.txt、pyproject.toml、setup.cfg 等)。

扫描 lock 文件

pip-audit --locked /path/to/project

Netmiko:Python多厂商网络设备SSH自动化库

Netmiko 是一个基于 Paramiko 的 Python 库,专门用于简化网络设备的 SSH 管理。它支持 Cisco、Juniper、Arista、HP、华为、Fortinet 等 100+ 平台,提供统一的 API 接口,让网络工程师可以用一套代码管理不同厂商的设备。

安装

pip install netmiko

基本用法

建立 SSH 连接

from netmiko import ConnectHandler

device = {
    'device_type': 'cisco_xe',
    'host': '192.168.1.1',
    'username': 'admin',
    'password': 'password',
}

net_connect = ConnectHandler(**device)
print(net_connect.find_prompt())  # 输出: cisco5#

device_type 指定设备厂商和型号,常见值包括:

device_type厂商/平台
cisco_iosCisco IOS
cisco_xeCisco IOS XE
cisco_nxosCisco NX-OS
juniper_junosJuniper JunOS
arista_eosArista EOS
huawei华为
hp_comwareH3C Comware
fortinetFortinet

执行 show 命令

output = net_connect.send_command('show ip arp')
print(output)

Netmiko 会自动处理输出分页(terminal length 0),并去除命令回显和提示符,只返回纯净的命令输出。

对于耗时较长的命令,可以指定超时时间:

output = net_connect.send_command('show tech-support', delay_factor=5, max_loops=500)

执行配置命令

config_commands = [
    'interface GigabitEthernet0/1',
    'description Uplink-to-Core',
    'ip address 10.0.0.1 255.255.255.0',
    'no shutdown',
]

output = net_connect.send_config_set(config_commands)
print(output)

# 保存配置
net_connect.save_config()

send_config_set() 会自动进入配置模式、逐条执行命令、退出配置模式。

批量管理多台设备

from netmiko import ConnectHandler

devices = [
    {'device_type': 'cisco_xe', 'host': '192.168.1.1', 'username': 'admin', 'password': 'pass1'},
    {'device_type': 'cisco_xe', 'host': '192.168.1.2', 'username': 'admin', 'password': 'pass2'},
    {'device_type': 'cisco_xe', 'host': '192.168.1.3', 'username': 'admin', 'password': 'pass3'},
]

for device in devices:
    try:
        conn = ConnectHandler(**device)
        output = conn.send_command('show version')
        print(f'{device["host"]}: {output[:100]}...')
        conn.disconnect()
    except Exception as e:
        print(f'{device["host"]}: 连接失败 - {e}')

在线文件共享网站

以下是几个常用的在线文件共享服务,可用于快速分享文件给他人:

📁 文件传输服务

https://easylink.cc/

  • 简洁快速的文件传输服务
  • 无需注册即可使用
  • 支持设置提取码和有效期

文叔叔

https://www.wenshushu.cn/

  • 国内知名的文件传输平台
  • 支持大文件传输(单文件最大支持 5GB)
  • 提供跨端管理功能

Hostize

https://www.hostize.com/

  • 提供临时文件存储服务
  • 支持快速分享链接
  • 界面简洁易用

去文件

https://quwenjian.cc/

  • 免费在线文件传输工具
  • 无需登录,上传即生成分享链接
  • 文件自动过期删除

💡 选择建议

  • 传输小文件:推荐使用 EasyLink 或去文件
  • 大文件传输:推荐使用文叔叔
  • 临时分享:推荐使用 Hostize

⚠️ 注意事项

  • 请勿传输敏感或机密信息
  • 注意文件大小限制和有效期设置
  • 定期清理过期文件链接

在线抠图工具推荐

以下是几款优秀的在线抠图工具,各有特色,可根据需求选择使用:

HTML Zone Background Remover

https://html.zone/background-remover/

  • 特点:免费且操作简单,支持多种图片格式
  • 优点
    • 无需注册,直接上传使用
    • 处理速度快,一般几秒内完成
    • 支持 JPG、PNG、WebP 等格式
    • 自动识别主体和背景,智能抠图
  • 适用场景:快速处理简单图片,适合用户日常使用

Pickwant

https://www.pickwant.com/removebg

  • 特点:AI 驱动的智能抠图,效果精准
  • 优点
    • 采用先进的 AI 算法,识别边缘准确
    • 支持复杂背景和头发丝细节
    • 提供多种抠图模式:自动、手动微调、批量处理
    • 可调整抠图质量,免费版限制图片大小
  • 适用场景:专业级抠图需求,如电商产品图、证件照处理

高定抠图

https://www.gaoding.com/koutu

  • 特点:国产工具,针对中文用户优化
  • 优点
    • 支持中文界面,操作简单直观
    • 提供手绘功能,可手动修复边缘
    • 支持透明背景输出,适合设计需求
    • 免费版有使用次数限制
  • 适用场景:国内用户首选,适合日常使用和简单设计工作

0v0 AI BG Remover

https://0v0.ai/rmbg/

  • 特点:完全免费的开源 AI 抠图工具
  • 优点
    • 基于 AI 模型,处理效果优秀
    • 无需注册,使用流程简单
    • 支持多种图片格式和复杂场景
    • 处理速度快,适合批量处理
  • 适用场景:需要抠图但预算有限的用户,学生和设计师

redirusr 和 redircmp — Active Directory 默认容器重定向

Active Directory(AD)新建用户和计算机时,默认存放在 CN=UsersCN=Computers 容器中。这两个是容器(Container)而非组织单元(OU),无法直接应用组策略(GPO)。在生产环境中,通常需要将默认位置指向自定义 OU,以便统一管理策略和权限。

Windows Server 提供了 redirusr.exeredircmp.exe 两个内置工具来完成这一操作。

使用官方 Registry v2 搭建 Docker Mirror 私有镜像仓库

在国内网络环境下,直接从 Docker Hub 拉取镜像经常遇到超时或被限流的问题。搭建一个本地 Docker Mirror 代理仓库可以有效解决这个痛点。本文介绍如何使用官方 Registry v2 搭建私有镜像代理仓库。

为什么要搭 Docker Mirror

1. Docker Hub 公网限速

Docker Hub 对匿名用户的拉取限速为 100 次/6 小时,免费账户为 200 次/6 小时。在 CI/CD 流水线或多人团队环境下,这个限额很容易触达。通过自建 Mirror 代理,所有节点的拉取请求汇聚到 Mirror 节点,Mirror 对上游只产生一次请求,有效规避限额。

2. 缓存加速 Build

在 CI/CD 构建中,每次 docker build 都需要拉取基础镜像。即使代码没有变化,基础镜像也会被反复从公网拉取,浪费时间。Mirror 缓存了基础镜像后:

  • 首次构建:从上游拉取并缓存
  • 后续构建:直接从 Mirror 拉取,速度提升 5-10 倍
  • 多节点并行构建:共享同一个 Mirror,只消耗一次外网流量

使用 Python 通过 ISAPI 读取海康威视摄像头设备信息

海康威视(Hikvision)摄像头提供了一套基于 HTTP 的 ISAPI(Intelligent Security API)接口,可以方便地通过程序读取设备信息、配置参数等。本文介绍如何用 Python 通过 ISAPI 接口读取海康摄像头的设备信息。

ISAPI 简介

ISAPI 是海康威视定义的一套 RESTful 风格接口,运行在摄像头的 Web 服务(默认端口 80/443)上。接口路径通常以 /ISAPI/ 开头,请求和响应使用 XML 格式。常见的设备信息接口包括:

接口路径说明
/ISAPI/System/deviceInfo获取设备基本信息(型号、序列号、固件版本等)
/ISAPI/System/status获取设备运行状态(在线时间、CPU/内存使用率等)
/ISAPI/System/Network/interfaces获取网络接口信息(IP、MAC 等)