最近在AWS上弄了一个EC2主机用来放一些比较杂的东西,开放了某个端口,由于我并不想放开所有的IP的访问权限, 就写了一个脚本用来获取我本机的公网地址然后用AWS CLI获取,撤销、更新 AWS 安全组规则中的 IP 地址。

请确保你已经配置好 AWS CLI 并拥有适当的权限来执行相关操作。

获取当前允许访问端口 xx 的 IP 地址

#!/usr/bin/env fish

# 获取当前 IP
set current_cidr (aws ec2 describe-security-groups --group-ids sg-xxxxx --query "SecurityGroups[0].IpPermissions[?FromPort=='xx'].IpRanges[0].CidrIp" --output text)

echo "当前端口 xx 的 CIDR: $current_cidr"

撤销旧的 IP 权限

if [ -n "$current_cidr" ]
    aws ec2 revoke-security-group-ingress --group-id sg-xxxxx --protocol tcp --port xx --cidr "$current_cidr"
    echo "从端口 xx 撤销了 CIDR $current_cidr"
else
    echo "未找到端口 xx 的 CIDR"
end

获取本机的公共 IP 地址

set local_ip (curl -s ifconfig.me)
echo "本机公共 IP 地址: $local_ip"

添加新的 IP 权限

if [ -n "$local_ip" ]
    aws ec2 authorize-security-group-ingress --group-id sg-xxxxx --protocol tcp --port xx --cidr "$local_ip/32"
    echo "将新的 CIDR $local_ip/32 添加到端口 xx"
else
    echo "无法获取本机公共 IP 地址"
end

以上脚本中的 sg-xxxxx 需要替换为实际的安全组 ID。此脚本会按照上述步骤执行操作,以管理安全组规则

研究了下eXR的file system, 记录下权当了解下系统的内部情况。

本文的演示事例使用的硬件A9K-RSP5-SE 和 eXR 742作为案例,使用的硬件不同,升级方式不同,磁盘的大小和分区是略微存在出入的。

如果你需要一个干净的,完全纯净的分区请采用以下方式升级或安装系统:

  • USB/PXE
  • 正常install command 升级,升级完成后re-image 所有的板卡 (re-image的操作,类似于PXE安装)

eXR 系统简介

如上图,eXR是在硬件的基础上有一个host 系统, host 系统里再run 两个vm (XR VM和sysadmin VM)。
[host:~]$ virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     sysadmin                       running
 3     default-sdr--1                 running

关于不同VM之间如何访问可以参考另一篇文章

Read the rest of this entry »

comments by ‘zhihua’

对于ASR9000来说 :
“show interfaces” and “show policy-map interfaces” show L2 frame size.
“show interfaces” does not include FCS bytes, but “show policy-map interfaces” includes FCS bytes(SIP700是个例外)

L1 frame size 和 L2 frame size的区别

如上图就是一个以太网帧的物理层具体所包含的内容。

  • Preamble: 前同步码 7 bytes
  • SFD: start frame delimiter 1 byte 帧开始定界符
  • Dst MAC: 6 bytes
  • Src MAC: 6 bytes
  • EtherType: 2 bytes
  • FCS(CRC): 4 bytes
Read the rest of this entry »
  • 2017.12-2019.05 ThinkPad X1 Carbon 4th Gen
  • 2019.05-2022.11 ThinkPad X1 Carbon 6th Gen
  • 2022.11-Now MacBook Pro 16 2019

工作5年了,公司给换了2次电脑,本来打算今年申请个M1的MBP,奈何不给审批,退而其次选择了2019款 intel芯片的,预计这款还得在手里用三年,也不知道能不能用这款3年前的设备再撑个3年。

这也算是我第一次真正使用的MAC(之前装过黑苹果尝过鲜,奈何太卡,没什么使用体验),Win上面的很多软件没有对应的MAC版,经过一个月的磨合,算是把工作上会用到的一些软件设置完毕,记录一下,未来换机也好快速设置:

软件包管理软件

Homebrew是 MacOS上的软件包管理工具,是setup一台新MAC首要需要设置的,安装方式也很简单,使用以下命令或者参考官网

/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"

后续我们需要安装的软件绝大部分可以通过brew命令快速安装,而不需要访问app store或者软件官网下载。

如下:

~ ❯ brew install wget

~ ❯ brew -h                                                                                                                       
Example usage:
  brew search TEXT|/REGEX/
  brew info [FORMULA|CASK...]
  brew install FORMULA|CASK...
  brew update
  brew upgrade [FORMULA|CASK...]
  brew uninstall FORMULA|CASK...
  brew list [FORMULA|CASK...]

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA|CASK

Contributing:
  brew create URL [--no-fetch]
  brew edit [FORMULA|CASK...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  <https://docs.brew.sh>

Read the rest of this entry »

什么是ZTP

Zero Touch Provisioning (ZTP) 是一项能够在几分钟内无需任何人工干预部署数千个网络设备的功能。
ZTP存在两种不同的操作:

  1. 下载应用配置到网络设备
  2. 下载并执行一个shell/python 脚本,shell/python 脚本中再包含配置的下载,软件版本检查,升级等操作。

要拥有一个有效的ZTP环境,DHCP和Web服务器是必须的。

在 ZTP 期间,DHCP 服务器提供引导文件名的路径。路由器下载此文件,如果下载的文件内容以 !! IOS XR ,它被认为是一个配置文件,ZTP对配置文件执行“apply_config”操作。如果下载的文件内容以#! /bin/bash, #! /bin/sh 或 #!/usr/bin/python 它被视为脚本文件,ZTP 执行该脚本。

ZTP Work Flow

ZTP 工作流程如下:

  1. XR Router 初始化ZTP,发送DHCP请求
  2. DHCP server返回配置文件或者脚本文件
  3. 路由器请求并下载脚本文件或者配置文件
  4. 路由器根据脚本文件下载镜像或者commit下载的配置文件.
Read the rest of this entry »

Update/Upgrade Packet

!!!! important , must be done.

rory@rory-22-04:~$ sudo apt update
rory@rory-22-04:~$ sudo apt upgrade

Modify Config to enable ipv6 support

/etc/ppp/options

!!!! add below under config file 
rory@rory-22-04:~$ grep ipv6 /etc/ppp/options
+ipv6 ipv6cp-use-ipaddr

/etc/sysctl.d/10-ipv6-privacy.conf

!!!! Make sure below config exsit under file 
rory@rory-22-04:~$ grep ipv6 /etc/sysctl.d/10-ipv6-privacy.conf
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2

/etc/sysctl.conf

rory@rory-22-04:~$ grep ipv6 /etc/sysctl.conf
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.ppp0.accept_ra=2

After take all above action, reboot your pc to make config take effect.

rory@rory-22-04:~$ reboot 

Setup PPP

Step 1: Open NM connection editor

rory@rory-vm:~$ sudo nm-connection-editor 

Step 2: add pppoe type nm connection

Step 3: complete pppoe config(username/password)

PPPoE connet

IPv6 地址获得方式

  1. 手动配置: 手动配置IPv6地址/前缀即其他网络配置参数(DNS、NIS、SNTP 服务器地址等参数)。
  2. 无状态地址地址分配: 由接口ID (MAC) 生成链路本地地址, 再根据路由通告报文RA(Router Advertisement) 包含的前缀信息自动配置本机地址.
  3. 有状态自动地址分配: 即DHCPv6方式, DHCPv6 又分为如下两种:
    • DHCPv6有状态自动分配: DHCPv6服务器自动分配IPv6地址/RD前缀以及其他网络配置参数(DNS、NIS、SNTP 服务器地址等参数).
    • DHCPv6无状态自动分配: 主机IPv6地址仍然通过路由器通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP 服务器地址等参数

如上, 路由器会周期的发送RA, 用来发现与本链路相连的路由器, 并获取与地址自动配置相关的前缀或其它配置参数。

有很多情况下,主机接入网络后会希望尽快获取前缀进行通信, 会立刻发送RS报文,路由器收到后会立刻回应RA。

RA(Router advertisement)报文置位情况:

M-bit置位: Client收到M-bit置位的RA报文, 需要向DHCPv6 Server 申请地址,DHCPv6 分配什么地址,client就需要使用什么地址.

O-bit置位: 如果O-bit没有置位, 则不去DHCP申请选项信息;如果置位了,则需要向DHCPv6请求DNS等其他信息。

M+O 为DHCPv6有状态自动配置, 单独M 为 DHCPv6无状态自动配置。

需要注意的是:

无论是无状态自动配置还是DHCPv6有或者无状态自动配置, ipv6节点的default gateway 地址都是RA通告得到的, 为通告RA信息的路由器的link-local地址。

PPPoE – Stateful Autoconfiguration(DHCPv6)

最近测试了下NCS55上面的MVPN,整理一下防止自己忘记了.

  • NCS55在MVPN profile上的支持不如ASR9K的种类多,具体哪些profile支持需要参考下NCS55的配置文档
  • NCS55由于芯片的特殊性,有些计数器并不是默认打开的,需要一些特殊的配置,如本文的组播流量的统计上。

Profile 14,据说是NCS55上最受欢迎的profile;这里使用如下的拓扑进行测试。

拓扑

Read the rest of this entry »

Tags: , ,

« Older entries