init(): initial commit
This commit is contained in:
+26
@@ -0,0 +1,26 @@
|
||||
# General
|
||||
.DS_Store
|
||||
__MACOSX/
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
Icon[
|
||||
]
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
@@ -0,0 +1,5 @@
|
||||
# Backup of containerlab topology
|
||||
*.yaml.bak
|
||||
|
||||
# containerlab files
|
||||
clab-*
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
@@ -0,0 +1,54 @@
|
||||
FROM ubuntu:22.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt update && \
|
||||
apt install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
bash \
|
||||
zsh \
|
||||
vim \
|
||||
git \
|
||||
bind9-dnsutils \
|
||||
bridge-utils \
|
||||
conntrack \
|
||||
ethtool \
|
||||
ipset \
|
||||
iptables \
|
||||
openssh-server \
|
||||
strace \
|
||||
jq \
|
||||
netcat-openbsd \
|
||||
ipython3 \
|
||||
scapy \
|
||||
iproute2 \
|
||||
iputils-ping \
|
||||
iputils-arping \
|
||||
mtr \
|
||||
traceroute \
|
||||
tcptraceroute \
|
||||
net-tools \
|
||||
tcpdump \
|
||||
tshark \
|
||||
bird2-doc \
|
||||
bird2 && \
|
||||
mkdir /run/bird && \
|
||||
apt clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
USER root
|
||||
WORKDIR /root
|
||||
ENV HOSTNAME=sch57
|
||||
|
||||
# ZSH Themes
|
||||
RUN curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh | sh
|
||||
RUN git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
|
||||
RUN git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
|
||||
COPY ./configs/zshrc .zshrc
|
||||
COPY ./configs/motd motd
|
||||
|
||||
RUN chmod -R g=u /root
|
||||
RUN chown root:root /usr/bin/dumpcap
|
||||
|
||||
CMD [ "sleep", "infinity" ]
|
||||
@@ -0,0 +1,8 @@
|
||||
_ ___
|
||||
| | |__ \
|
||||
| | ) |
|
||||
| | / /
|
||||
| |____ / /_
|
||||
|______|____|
|
||||
|
||||
Networks Demo
|
||||
@@ -0,0 +1,140 @@
|
||||
# If you come from bash you might have to change your $PATH.
|
||||
# export PATH=$HOME/bin:/usr/local/bin:$PATH
|
||||
|
||||
# Path to your oh-my-zsh installation.
|
||||
export ZSH=$HOME/.oh-my-zsh
|
||||
|
||||
# Set name of the theme to load. Optionally, if you set this to "random"
|
||||
# it'll load a random theme each time that oh-my-zsh is loaded.
|
||||
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
|
||||
#export TERM="xterm-256color"
|
||||
ZSH_THEME="powerlevel10k/powerlevel10k"
|
||||
|
||||
ZSH_DISABLE_COMPFIX="true"
|
||||
|
||||
# Set list of themes to load
|
||||
# Setting this variable when ZSH_THEME=random
|
||||
# cause zsh load theme from this variable instead of
|
||||
# looking in ~/.oh-my-zsh/themes/
|
||||
# An empty array have no effect
|
||||
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
|
||||
|
||||
# Uncomment the following line to use case-sensitive completion.
|
||||
# CASE_SENSITIVE="true"
|
||||
|
||||
# Uncomment the following line to use hyphen-insensitive completion. Case
|
||||
# sensitive completion must be off. _ and - will be interchangeable.
|
||||
# HYPHEN_INSENSITIVE="true"
|
||||
|
||||
# Uncomment the following line to disable bi-weekly auto-update checks.
|
||||
# DISABLE_AUTO_UPDATE="true"
|
||||
|
||||
# Uncomment the following line to change how often to auto-update (in days).
|
||||
# export UPDATE_ZSH_DAYS=13
|
||||
|
||||
# Uncomment the following line to disable colors in ls.
|
||||
# DISABLE_LS_COLORS="true"
|
||||
|
||||
# Uncomment the following line to disable auto-setting terminal title.
|
||||
# DISABLE_AUTO_TITLE="true"
|
||||
|
||||
# Uncomment the following line to enable command auto-correction.
|
||||
# ENABLE_CORRECTION="true"
|
||||
|
||||
# Uncomment the following line to display red dots whilst waiting for completion.
|
||||
# COMPLETION_WAITING_DOTS="true"
|
||||
|
||||
# Uncomment the following line if you want to disable marking untracked files
|
||||
# under VCS as dirty. This makes repository status check for large repositories
|
||||
# much, much faster.
|
||||
# DISABLE_UNTRACKED_FILES_DIRTY="true"
|
||||
|
||||
# Uncomment the following line if you want to change the command execution time
|
||||
# stamp shown in the history command output.
|
||||
# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
|
||||
# HIST_STAMPS="mm/dd/yyyy"
|
||||
|
||||
# Would you like to use another custom folder than $ZSH/custom?
|
||||
# ZSH_CUSTOM=/path/to/new-custom-folder
|
||||
|
||||
# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
|
||||
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
|
||||
# Example format: plugins=(rails git textmate ruby lighthouse)
|
||||
# Add wisely, as too many plugins slow down shell startup.
|
||||
plugins=(
|
||||
git
|
||||
zsh-autosuggestions
|
||||
yarn
|
||||
web-search
|
||||
jsontools
|
||||
macports
|
||||
node
|
||||
sudo
|
||||
docker
|
||||
)
|
||||
|
||||
source $ZSH/oh-my-zsh.sh
|
||||
# User configuration
|
||||
cat motd
|
||||
|
||||
# export MANPATH="/usr/local/man:$MANPATH"
|
||||
|
||||
# You may need to manually set your language environment
|
||||
# export LANG=en_US.UTF-8
|
||||
|
||||
# Preferred editor for local and remote sessions
|
||||
# if [[ -n $SSH_CONNECTION ]]; then
|
||||
# export EDITOR='vim'
|
||||
# else
|
||||
# export EDITOR='mvim'
|
||||
# fi
|
||||
|
||||
# Compilation flags
|
||||
# export ARCHFLAGS="-arch x86_64"
|
||||
|
||||
# ssh
|
||||
# export SSH_KEY_PATH="~/.ssh/rsa_id"
|
||||
|
||||
# Set personal aliases, overriding those provided by oh-my-zsh libs,
|
||||
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
|
||||
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
|
||||
# For a full list of active aliases, run `alias`.
|
||||
#
|
||||
# Example aliases
|
||||
# alias zshconfig="mate ~/.zshrc"
|
||||
# alias ohmyzsh="mate ~/.oh-my-zsh"
|
||||
|
||||
# test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
|
||||
|
||||
# Reload the plugin to highlight the commands each time Iterm2 starts
|
||||
#source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||
|
||||
### VISUAL CUSTOMIZATION ###
|
||||
# Elements options of left prompt (remove the @username context)
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(host dir rbenv)
|
||||
# Elements options of right prompt
|
||||
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()
|
||||
# Add a second prompt line for the command
|
||||
POWERLEVEL9K_PROMPT_ON_NEWLINE=false
|
||||
|
||||
# Add a space in the first prompt
|
||||
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=''
|
||||
|
||||
# Visual customization of the second prompt line
|
||||
#local user_symbol="$"
|
||||
#if [[ $(print -P "%#") =~ "#" ]]; then
|
||||
# user_symbol = "#"
|
||||
#fi
|
||||
#POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%{%B%F{black}%K{yellow}%} $user_symbol%{%b%f%k%F{yellow}%} %{%f%}"
|
||||
|
||||
# Change the git status to red when something isn't committed and pushed
|
||||
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='red'
|
||||
|
||||
# Add a new line after the global prompt
|
||||
POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
|
||||
|
||||
# Colorize the top Tabs of Iterm2 with the same color as background
|
||||
# Just change the 18/26/33 which are the rgb values
|
||||
echo -e "\033]6;1;bg;red;brightness;18\a"
|
||||
echo -e "\033]6;1;bg;green;brightness;26\a"
|
||||
echo -e "\033]6;1;bg;blue;brightness;33\a"
|
||||
Executable
+68
@@ -0,0 +1,68 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux pipefail
|
||||
|
||||
# containerlab needs some time to setup links
|
||||
sleep $CONTAINERLAB_TIMEOUT
|
||||
|
||||
if [ "$ROLE" = "switch" ]; then
|
||||
echo "Configuring as switch with MAC=$MAC"
|
||||
|
||||
if [ "$VLAN" = "yes" ]; then
|
||||
ip link add name br0 type bridge vlan_filtering 1
|
||||
else
|
||||
ip link add name br0 type bridge
|
||||
fi
|
||||
|
||||
ip link set dev br0 address $MAC
|
||||
ip link set br0 up
|
||||
for i in eth1 eth2 eth3 eth4; do
|
||||
ip link set $i master br0
|
||||
ip link set $i up
|
||||
done
|
||||
|
||||
if [ "$VLAN" = "yes" ]; then
|
||||
bridge vlan add dev eth1 vid 10 pvid untagged
|
||||
bridge vlan add dev eth2 vid 20 pvid untagged
|
||||
bridge vlan add dev eth4 vid 10,20
|
||||
fi
|
||||
|
||||
echo "Switch setup complete"
|
||||
|
||||
elif [ "$ROLE" = "bridge" ]; then
|
||||
echo "Configuring as bridge with MAC=$MAC"
|
||||
|
||||
if [ "$VLAN" = "yes" ]; then
|
||||
ip link add name br0 type bridge vlan_filtering 1
|
||||
else
|
||||
ip link add name br0 type bridge
|
||||
fi
|
||||
|
||||
ip link set dev br0 address $MAC
|
||||
ip link set br0 up
|
||||
ip link set eth1 master br0
|
||||
ip link set eth2 master br0
|
||||
ip link set eth1 up
|
||||
ip link set eth2 up
|
||||
|
||||
if [ "$VLAN" = "yes" ]; then
|
||||
bridge vlan add dev eth1 vid 10,20
|
||||
bridge vlan add dev eth2 vid 10,20
|
||||
fi
|
||||
|
||||
echo "Bridge setup complete"
|
||||
|
||||
elif [ "$ROLE" = "host" ]; then
|
||||
echo "Configuring as host with MAC=$MAC"
|
||||
|
||||
ip link set dev eth1 down
|
||||
ip link set dev eth1 address $MAC
|
||||
ip link set dev eth1 up
|
||||
|
||||
echo "Host setup complete"
|
||||
|
||||
else
|
||||
echo "Unknown ROLE: $ROLE"
|
||||
fi
|
||||
|
||||
sleep infinity
|
||||
@@ -0,0 +1,73 @@
|
||||
name: l2-l3-1
|
||||
prefix: net
|
||||
|
||||
topology:
|
||||
kinds:
|
||||
linux:
|
||||
image: docker.io/itqdev/netops:latest
|
||||
|
||||
defaults:
|
||||
network-mode: none
|
||||
cmd: /scripts/node-init.sh
|
||||
env:
|
||||
ROLE: host
|
||||
CONTAINERLAB_TIMEOUT: 5
|
||||
VLAN: yes
|
||||
binds:
|
||||
- ./docker/scripts:/scripts
|
||||
|
||||
nodes:
|
||||
sw_left:
|
||||
kind: linux
|
||||
env:
|
||||
ROLE: switch
|
||||
MAC: "02:11:11:11:00:01"
|
||||
sw_right:
|
||||
kind: linux
|
||||
env:
|
||||
ROLE: switch
|
||||
MAC: "02:11:11:11:00:02"
|
||||
mid_bridge:
|
||||
kind: linux
|
||||
env:
|
||||
ROLE: bridge
|
||||
MAC: "02:11:11:11:11:03"
|
||||
|
||||
pc1:
|
||||
kind: linux
|
||||
env:
|
||||
MAC: "02:00:00:00:01:01"
|
||||
pc2:
|
||||
kind: linux
|
||||
env:
|
||||
MAC: "02:00:00:00:01:02"
|
||||
pc3:
|
||||
kind: linux
|
||||
env:
|
||||
MAC: "02:00:00:00:01:03"
|
||||
|
||||
pc4:
|
||||
kind: linux
|
||||
env:
|
||||
MAC: "02:00:00:00:02:04"
|
||||
pc5:
|
||||
kind: linux
|
||||
env:
|
||||
MAC: "02:00:00:00:02:05"
|
||||
pc6:
|
||||
kind: linux
|
||||
env:
|
||||
MAC: "02:00:00:00:02:06"
|
||||
|
||||
links:
|
||||
- endpoints: ["sw_left:eth1", "pc1:eth1"]
|
||||
- endpoints: ["sw_left:eth2", "pc2:eth1"]
|
||||
- endpoints: ["sw_left:eth3", "pc3:eth1"]
|
||||
|
||||
- endpoints: ["sw_right:eth1", "pc4:eth1"]
|
||||
- endpoints: ["sw_right:eth2", "pc5:eth1"]
|
||||
- endpoints: ["sw_right:eth3", "pc6:eth1"]
|
||||
|
||||
- endpoints: ["sw_left:eth4", "mid_bridge:eth1"]
|
||||
- endpoints: ["sw_right:eth4", "mid_bridge:eth2"]
|
||||
# - endpoints: ["sw_left:eth5", "sw_right:eth5"]
|
||||
@@ -0,0 +1,5 @@
|
||||
# Backup of containerlab topology
|
||||
*.yaml.bak
|
||||
|
||||
# containerlab files
|
||||
clab-*
|
||||
@@ -0,0 +1,54 @@
|
||||
FROM ubuntu:22.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt update && \
|
||||
apt install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
bash \
|
||||
zsh \
|
||||
vim \
|
||||
git \
|
||||
bind9-dnsutils \
|
||||
bridge-utils \
|
||||
conntrack \
|
||||
ethtool \
|
||||
ipset \
|
||||
iptables \
|
||||
openssh-server \
|
||||
strace \
|
||||
jq \
|
||||
netcat-openbsd \
|
||||
ipython3 \
|
||||
scapy \
|
||||
iproute2 \
|
||||
iputils-ping \
|
||||
iputils-arping \
|
||||
mtr \
|
||||
traceroute \
|
||||
tcptraceroute \
|
||||
net-tools \
|
||||
tcpdump \
|
||||
tshark \
|
||||
bird2-doc \
|
||||
bird2 && \
|
||||
mkdir /run/bird && \
|
||||
apt clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
USER root
|
||||
WORKDIR /root
|
||||
ENV HOSTNAME=sch57
|
||||
|
||||
# ZSH Themes
|
||||
RUN curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh | sh
|
||||
RUN git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
|
||||
RUN git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
|
||||
COPY ./configs/zshrc .zshrc
|
||||
COPY ./configs/motd motd
|
||||
|
||||
RUN chmod -R g=u /root
|
||||
RUN chown root:root /usr/bin/dumpcap
|
||||
|
||||
CMD [ "sleep", "infinity" ]
|
||||
@@ -0,0 +1,8 @@
|
||||
_ ___
|
||||
| | |__ \
|
||||
| | ) |
|
||||
| | / /
|
||||
| |____ / /_
|
||||
|______|____|
|
||||
|
||||
Networks Demo
|
||||
@@ -0,0 +1,140 @@
|
||||
# If you come from bash you might have to change your $PATH.
|
||||
# export PATH=$HOME/bin:/usr/local/bin:$PATH
|
||||
|
||||
# Path to your oh-my-zsh installation.
|
||||
export ZSH=$HOME/.oh-my-zsh
|
||||
|
||||
# Set name of the theme to load. Optionally, if you set this to "random"
|
||||
# it'll load a random theme each time that oh-my-zsh is loaded.
|
||||
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
|
||||
#export TERM="xterm-256color"
|
||||
ZSH_THEME="powerlevel10k/powerlevel10k"
|
||||
|
||||
ZSH_DISABLE_COMPFIX="true"
|
||||
|
||||
# Set list of themes to load
|
||||
# Setting this variable when ZSH_THEME=random
|
||||
# cause zsh load theme from this variable instead of
|
||||
# looking in ~/.oh-my-zsh/themes/
|
||||
# An empty array have no effect
|
||||
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
|
||||
|
||||
# Uncomment the following line to use case-sensitive completion.
|
||||
# CASE_SENSITIVE="true"
|
||||
|
||||
# Uncomment the following line to use hyphen-insensitive completion. Case
|
||||
# sensitive completion must be off. _ and - will be interchangeable.
|
||||
# HYPHEN_INSENSITIVE="true"
|
||||
|
||||
# Uncomment the following line to disable bi-weekly auto-update checks.
|
||||
# DISABLE_AUTO_UPDATE="true"
|
||||
|
||||
# Uncomment the following line to change how often to auto-update (in days).
|
||||
# export UPDATE_ZSH_DAYS=13
|
||||
|
||||
# Uncomment the following line to disable colors in ls.
|
||||
# DISABLE_LS_COLORS="true"
|
||||
|
||||
# Uncomment the following line to disable auto-setting terminal title.
|
||||
# DISABLE_AUTO_TITLE="true"
|
||||
|
||||
# Uncomment the following line to enable command auto-correction.
|
||||
# ENABLE_CORRECTION="true"
|
||||
|
||||
# Uncomment the following line to display red dots whilst waiting for completion.
|
||||
# COMPLETION_WAITING_DOTS="true"
|
||||
|
||||
# Uncomment the following line if you want to disable marking untracked files
|
||||
# under VCS as dirty. This makes repository status check for large repositories
|
||||
# much, much faster.
|
||||
# DISABLE_UNTRACKED_FILES_DIRTY="true"
|
||||
|
||||
# Uncomment the following line if you want to change the command execution time
|
||||
# stamp shown in the history command output.
|
||||
# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
|
||||
# HIST_STAMPS="mm/dd/yyyy"
|
||||
|
||||
# Would you like to use another custom folder than $ZSH/custom?
|
||||
# ZSH_CUSTOM=/path/to/new-custom-folder
|
||||
|
||||
# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
|
||||
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
|
||||
# Example format: plugins=(rails git textmate ruby lighthouse)
|
||||
# Add wisely, as too many plugins slow down shell startup.
|
||||
plugins=(
|
||||
git
|
||||
zsh-autosuggestions
|
||||
yarn
|
||||
web-search
|
||||
jsontools
|
||||
macports
|
||||
node
|
||||
sudo
|
||||
docker
|
||||
)
|
||||
|
||||
source $ZSH/oh-my-zsh.sh
|
||||
# User configuration
|
||||
cat motd
|
||||
|
||||
# export MANPATH="/usr/local/man:$MANPATH"
|
||||
|
||||
# You may need to manually set your language environment
|
||||
# export LANG=en_US.UTF-8
|
||||
|
||||
# Preferred editor for local and remote sessions
|
||||
# if [[ -n $SSH_CONNECTION ]]; then
|
||||
# export EDITOR='vim'
|
||||
# else
|
||||
# export EDITOR='mvim'
|
||||
# fi
|
||||
|
||||
# Compilation flags
|
||||
# export ARCHFLAGS="-arch x86_64"
|
||||
|
||||
# ssh
|
||||
# export SSH_KEY_PATH="~/.ssh/rsa_id"
|
||||
|
||||
# Set personal aliases, overriding those provided by oh-my-zsh libs,
|
||||
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
|
||||
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
|
||||
# For a full list of active aliases, run `alias`.
|
||||
#
|
||||
# Example aliases
|
||||
# alias zshconfig="mate ~/.zshrc"
|
||||
# alias ohmyzsh="mate ~/.oh-my-zsh"
|
||||
|
||||
# test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
|
||||
|
||||
# Reload the plugin to highlight the commands each time Iterm2 starts
|
||||
#source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||
|
||||
### VISUAL CUSTOMIZATION ###
|
||||
# Elements options of left prompt (remove the @username context)
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(host dir rbenv)
|
||||
# Elements options of right prompt
|
||||
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()
|
||||
# Add a second prompt line for the command
|
||||
POWERLEVEL9K_PROMPT_ON_NEWLINE=false
|
||||
|
||||
# Add a space in the first prompt
|
||||
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=''
|
||||
|
||||
# Visual customization of the second prompt line
|
||||
#local user_symbol="$"
|
||||
#if [[ $(print -P "%#") =~ "#" ]]; then
|
||||
# user_symbol = "#"
|
||||
#fi
|
||||
#POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%{%B%F{black}%K{yellow}%} $user_symbol%{%b%f%k%F{yellow}%} %{%f%}"
|
||||
|
||||
# Change the git status to red when something isn't committed and pushed
|
||||
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='red'
|
||||
|
||||
# Add a new line after the global prompt
|
||||
POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
|
||||
|
||||
# Colorize the top Tabs of Iterm2 with the same color as background
|
||||
# Just change the 18/26/33 which are the rgb values
|
||||
echo -e "\033]6;1;bg;red;brightness;18\a"
|
||||
echo -e "\033]6;1;bg;green;brightness;26\a"
|
||||
echo -e "\033]6;1;bg;blue;brightness;33\a"
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux pipefail
|
||||
|
||||
# containerlab needs some time to setup links
|
||||
sleep $CONTAINERLAB_TIMEOUT
|
||||
|
||||
if [ "$ROUTER" = "yes" ]; then
|
||||
echo "Configuring as router..."
|
||||
|
||||
ip link add br0 type bridge
|
||||
|
||||
ip addr add 192.168.100.1/24 dev br0
|
||||
ip addr add 172.16.100.1/24 dev br0
|
||||
|
||||
ip link set dev br0 up
|
||||
|
||||
ip link set eth1 up
|
||||
ip link set eth2 up
|
||||
ip link set eth3 up
|
||||
ip link set eth4 up
|
||||
|
||||
ip link set eth1 master br0
|
||||
ip link set eth2 master br0
|
||||
ip link set eth3 master br0
|
||||
ip link set eth4 master br0
|
||||
|
||||
echo "Router setup complete"
|
||||
|
||||
else
|
||||
echo "Configuring as host with CIDR=$CIDR and GATEWAY=$GATEWAY"
|
||||
|
||||
ip link set eth1 up
|
||||
ip addr add $CIDR dev eth1
|
||||
ip route add default via $GATEWAY dev eth1
|
||||
|
||||
echo "Host setup complete"
|
||||
fi
|
||||
|
||||
sleep infinity
|
||||
@@ -0,0 +1,54 @@
|
||||
name: l2-l3-2
|
||||
prefix: net
|
||||
|
||||
topology:
|
||||
kinds:
|
||||
linux:
|
||||
image: docker.io/itqdev/netops:latest
|
||||
|
||||
defaults:
|
||||
network-mode: none
|
||||
cmd: /scripts/node-init.sh
|
||||
env:
|
||||
ROUTER: no
|
||||
CONTAINERLAB_TIMEOUT: 5
|
||||
binds:
|
||||
- ./docker/scripts:/scripts
|
||||
|
||||
nodes:
|
||||
router1:
|
||||
kind: linux
|
||||
env:
|
||||
ROUTER: yes
|
||||
sysctls:
|
||||
net.ipv4.ip_forward: 1
|
||||
|
||||
pc1:
|
||||
kind: linux
|
||||
env:
|
||||
CIDR: 192.168.100.10/24
|
||||
GATEWAY: 192.168.100.1
|
||||
|
||||
pc2:
|
||||
kind: linux
|
||||
env:
|
||||
CIDR: 192.168.100.20/24
|
||||
GATEWAY: 192.168.100.1
|
||||
|
||||
pc3:
|
||||
kind: linux
|
||||
env:
|
||||
CIDR: 172.16.100.10/24
|
||||
GATEWAY: 172.16.100.1
|
||||
|
||||
pc4:
|
||||
kind: linux
|
||||
env:
|
||||
CIDR: 172.16.100.20/24
|
||||
GATEWAY: 172.16.100.1
|
||||
|
||||
links:
|
||||
- endpoints: ["router1:eth1", "pc1:eth1"]
|
||||
- endpoints: ["router1:eth2", "pc2:eth1"]
|
||||
- endpoints: ["router1:eth3", "pc3:eth1"]
|
||||
- endpoints: ["router1:eth4", "pc4:eth1"]
|
||||
@@ -0,0 +1,18 @@
|
||||
CFLAGS := "-Wall -O2"
|
||||
PROGRAM := "sockets_demo"
|
||||
|
||||
build:
|
||||
gcc {{CFLAGS}} -o {{PROGRAM}} main.c
|
||||
|
||||
run: build
|
||||
sudo ./{{PROGRAM}}
|
||||
|
||||
clean:
|
||||
rm -f {{PROGRAM}}
|
||||
|
||||
udp-server:
|
||||
nc -u -l -p 12002
|
||||
|
||||
tcp-server:
|
||||
nc -l -p 12001
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/ip_icmp.h>
|
||||
|
||||
#define SRC_PORT 12000
|
||||
|
||||
void stream_socket() {
|
||||
printf("\n=== STREAM SOCKET (TCP) ===\n");
|
||||
|
||||
int sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (sock < 0) {
|
||||
perror("socket");
|
||||
return;
|
||||
}
|
||||
|
||||
struct sockaddr_in src = {0};
|
||||
src.sin_family = AF_INET;
|
||||
src.sin_addr.s_addr = inet_addr("127.0.0.1");
|
||||
src.sin_port = htons(SRC_PORT);
|
||||
if (bind(sock, (struct sockaddr*)&src, sizeof(src)) < 0) {
|
||||
perror("bind");
|
||||
close(sock);
|
||||
return;
|
||||
}
|
||||
|
||||
struct sockaddr_in server = {0};
|
||||
server.sin_family = AF_INET;
|
||||
server.sin_port = htons(12001);
|
||||
inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);
|
||||
|
||||
printf("[*] Connecting to 127.0.0.1:12001...\n");
|
||||
if (connect(sock, (struct sockaddr*)&server, sizeof(server)) == 0) {
|
||||
printf("[+] Connected successfully!\n");
|
||||
const char *msg = "привет никифор";
|
||||
send(sock, msg, strlen(msg), 0);
|
||||
char buf[256] = {0};
|
||||
recv(sock, buf, sizeof(buf) - 1, 0);
|
||||
printf("[Response]:\n%s\n", buf);
|
||||
} else {
|
||||
perror("connect");
|
||||
}
|
||||
|
||||
close(sock);
|
||||
}
|
||||
|
||||
void datagram_socket() {
|
||||
printf("\n=== DATAGRAM SOCKET (UDP) ===\n");
|
||||
|
||||
int sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (sock < 0) {
|
||||
perror("socket");
|
||||
return;
|
||||
}
|
||||
|
||||
struct sockaddr_in src = {0};
|
||||
src.sin_family = AF_INET;
|
||||
src.sin_addr.s_addr = inet_addr("127.0.0.1");
|
||||
src.sin_port = htons(SRC_PORT);
|
||||
if (bind(sock, (struct sockaddr*)&src, sizeof(src)) < 0) {
|
||||
perror("bind");
|
||||
close(sock);
|
||||
return;
|
||||
}
|
||||
|
||||
struct sockaddr_in dest = {0};
|
||||
dest.sin_family = AF_INET;
|
||||
dest.sin_port = htons(12002);
|
||||
inet_pton(AF_INET, "127.0.0.1", &dest.sin_addr);
|
||||
|
||||
const char *msg = "ялквмом!";
|
||||
printf("[*] Sending UDP datagram to 127.0.0.1:12002...\n");
|
||||
sendto(sock, msg, strlen(msg), 0, (struct sockaddr*)&dest, sizeof(dest));
|
||||
printf("[+] Datagram sent, waiting for response...\n");
|
||||
|
||||
char buf[256];
|
||||
socklen_t addrlen = sizeof(dest);
|
||||
|
||||
while (1) {
|
||||
ssize_t n = recvfrom(sock, buf, sizeof(buf) - 1, 0, (struct sockaddr*)&dest, &addrlen);
|
||||
if (n > 0) {
|
||||
buf[n] = '\0';
|
||||
printf("[Response]: \n%s\n", buf);
|
||||
break;
|
||||
} else {
|
||||
sleep(0.1);
|
||||
}
|
||||
}
|
||||
|
||||
close(sock);
|
||||
}
|
||||
|
||||
void raw_socket() {
|
||||
printf("\n=== RAW SOCKET (ICMP) ===\n");
|
||||
|
||||
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
|
||||
if (sock < 0) {
|
||||
perror("socket");
|
||||
return;
|
||||
}
|
||||
|
||||
struct sockaddr_in dest = {0};
|
||||
dest.sin_family = AF_INET;
|
||||
inet_pton(AF_INET, "8.8.8.8", &dest.sin_addr);
|
||||
|
||||
struct icmphdr icmp_hdr = {0};
|
||||
icmp_hdr.type = ICMP_ECHO;
|
||||
icmp_hdr.code = 0;
|
||||
icmp_hdr.checksum = 0xFFFF;
|
||||
|
||||
printf("[*] Sending ICMP echo request to 8.8.8.8...\n");
|
||||
ssize_t sent = sendto(sock, &icmp_hdr, sizeof(icmp_hdr), 0,
|
||||
(struct sockaddr*)&dest, sizeof(dest));
|
||||
|
||||
if (sent > 0)
|
||||
printf("[+] ICMP packet sent\n");
|
||||
else
|
||||
perror("sendto");
|
||||
|
||||
close(sock);
|
||||
}
|
||||
|
||||
int main() {
|
||||
stream_socket();
|
||||
sleep(1);
|
||||
datagram_socket();
|
||||
sleep(1);
|
||||
raw_socket();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
# Backup of containerlab topology
|
||||
*.bak
|
||||
|
||||
# containerlab files
|
||||
clab-*
|
||||
@@ -0,0 +1,43 @@
|
||||
FROM ubuntu:22.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt update && \
|
||||
apt install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
bash \
|
||||
vim \
|
||||
git \
|
||||
bind9-dnsutils \
|
||||
bridge-utils \
|
||||
conntrack \
|
||||
ethtool \
|
||||
ipset \
|
||||
iptables \
|
||||
openssh-server \
|
||||
strace \
|
||||
jq \
|
||||
iproute2 \
|
||||
iputils-ping \
|
||||
iputils-arping \
|
||||
mtr \
|
||||
traceroute \
|
||||
tcptraceroute \
|
||||
net-tools \
|
||||
tcpdump \
|
||||
tshark \
|
||||
frr \
|
||||
frr-pythontools && \
|
||||
apt clean
|
||||
|
||||
USER root
|
||||
WORKDIR /root
|
||||
ENV HOSTNAME=ya-kit
|
||||
|
||||
COPY motd motd
|
||||
|
||||
RUN chmod -R g=u /root
|
||||
RUN chown root:root /usr/bin/dumpcap
|
||||
|
||||
CMD ["bash"]
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 355 KiB |
@@ -0,0 +1,36 @@
|
||||
zebra=yes
|
||||
bgpd=yes
|
||||
ospfd=yes
|
||||
ospf6d=no
|
||||
ripd=yes
|
||||
ripngd=no
|
||||
isisd=no
|
||||
pimd=no
|
||||
ldpd=no
|
||||
nhrpd=no
|
||||
eigrpd=no
|
||||
babeld=no
|
||||
sharpd=no
|
||||
staticd=yes
|
||||
pbrd=no
|
||||
bfdd=no
|
||||
fabricd=no
|
||||
|
||||
vtysh_enable=yes
|
||||
zebra_options=" -s 90000000 --daemon -A 127.0.0.1"
|
||||
bgpd_options=" --daemon -A 127.0.0.1"
|
||||
ospfd_options=" --daemon -A 127.0.0.1"
|
||||
ospf6d_options=" --daemon -A ::1"
|
||||
ripd_options=" --daemon -A 127.0.0.1"
|
||||
ripngd_options=" --daemon -A ::1"
|
||||
isisd_options=" --daemon -A 127.0.0.1"
|
||||
pimd_options=" --daemon -A 127.0.0.1"
|
||||
ldpd_options=" --daemon -A 127.0.0.1"
|
||||
nhrpd_options=" --daemon -A 127.0.0.1"
|
||||
eigrpd_options=" --daemon -A 127.0.0.1"
|
||||
babeld_options=" --daemon -A 127.0.0.1"
|
||||
sharpd_options=" --daemon -A 127.0.0.1"
|
||||
staticd_options=" --daemon -A 127.0.0.1"
|
||||
pbrd_options=" --daemon -A 127.0.0.1"
|
||||
bfdd_options=" --daemon -A 127.0.0.1"
|
||||
fabricd_options=" --daemon -A 127.0.0.1"
|
||||
@@ -0,0 +1,87 @@
|
||||
# Router A
|
||||
10.10.10.1 A-eth1
|
||||
192.168.1.254 A-eth2
|
||||
10.10.0.1 A
|
||||
|
||||
# Router B
|
||||
10.10.10.2 B-eth1
|
||||
10.10.10.9 B-eth2
|
||||
10.10.10.13 B-eth3
|
||||
10.10.0.2 B
|
||||
|
||||
# Router C
|
||||
10.10.10.17 C-eth1
|
||||
192.168.4.254 C-eth2
|
||||
10.10.10.21 C-eth3
|
||||
10.10.0.3 C
|
||||
|
||||
# Router D
|
||||
10.10.10.10 D-eth1
|
||||
10.10.10.18 D-eth2
|
||||
10.10.10.25 D-eth3
|
||||
10.10.10.28 D-eth4
|
||||
10.10.0.4 D
|
||||
|
||||
# Router F
|
||||
10.10.10.14 F-eth1
|
||||
10.10.10.26 F-eth2
|
||||
203.0.113.1 F-eth3
|
||||
203.0.113.5 F-eth4
|
||||
10.10.0.5 F
|
||||
|
||||
# Router G
|
||||
10.10.10.22 G-eth1
|
||||
10.10.10.30 G-eth2
|
||||
203.0.113.9 G-eth3
|
||||
10.10.0.6 G
|
||||
|
||||
# Router R1
|
||||
10.30.30.1 R1-eth1
|
||||
10.30.30.5 R1-eth2
|
||||
203.0.113.10 R1-eth3
|
||||
203.0.113.6 R1-eth4
|
||||
203.0.113.14 R1-eth5
|
||||
10.30.0.1 R1
|
||||
|
||||
# Router R2
|
||||
10.30.30.2 R2-eth1
|
||||
10.30.30.9 R2-eth3
|
||||
10.30.0.2 R2
|
||||
|
||||
# Router R3
|
||||
10.30.30.6 R3-eth1
|
||||
192.168.3.254 R3-eth2
|
||||
10.30.30.10 R3-eth3
|
||||
10.30.0.3 R3
|
||||
|
||||
# Router Frodo
|
||||
10.20.20.2 Frodo-eth1
|
||||
192.168.2.254 Frodo-eth2
|
||||
10.20.20.9 Frodo-eth3
|
||||
192.168.5.254 Frodo-eth4
|
||||
10.20.0.2 Frodo
|
||||
|
||||
# Router Gandalf
|
||||
10.20.20.1 Gandalf-eth1
|
||||
10.20.20.5 Gandalf-eth2
|
||||
203.0.113.2 Gandalf-eth3
|
||||
203.0.113.13 Gandalf-eth5
|
||||
10.20.0.1 Gandalf
|
||||
|
||||
# Router Sam
|
||||
10.20.20.6 Sam-eth1
|
||||
10.20.20.10 Sam-eth3
|
||||
10.20.0.3 Sam
|
||||
|
||||
# Host 1
|
||||
192.168.1.1 host1
|
||||
|
||||
# Host 2
|
||||
192.168.2.1 host2
|
||||
|
||||
# Host 3
|
||||
192.168.3.1 host3
|
||||
192.168.5.1 host3-alt
|
||||
|
||||
# Host 4
|
||||
192.168.4.1 host4
|
||||
@@ -0,0 +1,13 @@
|
||||
███████████ █████ ███
|
||||
░░███░░░░░███ ░░███ ░░░
|
||||
░███ ░███ ██████ █████ ████ ███████ ████ ████████ ███████
|
||||
░██████████ ███░░███░░███ ░███ ░░░███░ ░░███ ░░███░░███ ███░░███
|
||||
░███░░░░░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███
|
||||
░███ ░███ ░███ ░███ ░███ ░███ ░███ ███ ░███ ░███ ░███ ░███ ░███
|
||||
█████ █████░░██████ ░░████████ ░░█████ █████ ████ █████░░███████
|
||||
░░░░░ ░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░ ░░░░░ ░░░░ ░░░░░ ░░░░░███
|
||||
███ ░███
|
||||
░░██████
|
||||
░░░░░░
|
||||
|
||||
Routing information exchange protocols lab
|
||||
@@ -0,0 +1,27 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname A
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.10.10.1/30
|
||||
ip ospf cost 10
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
ip address 192.168.1.254/24
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.10.0.1/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.10.0.1
|
||||
network 10.10.0.1/32 area 1
|
||||
network 10.10.10.0/30 area 1
|
||||
network 192.168.1.0/24 area 1
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,32 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname B
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.10.10.2/30
|
||||
ip ospf cost 10
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
ip address 10.10.10.9/30
|
||||
ip ospf cost 10
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
ip address 10.10.10.13/30
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.10.0.2/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.10.0.2
|
||||
network 10.10.0.2/32 area 0
|
||||
network 10.10.10.0/30 area 1
|
||||
network 10.10.10.8/30 area 0
|
||||
network 10.10.10.12/30 area 0
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,32 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname C
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.10.10.17/30
|
||||
ip ospf cost 1
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
ip address 192.168.4.254/24
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
ip address 10.10.10.21/30
|
||||
ip ospf cost 100
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.10.0.3/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.10.0.3
|
||||
network 10.10.0.3/32 area 2
|
||||
network 10.10.10.0/27 area 2
|
||||
network 192.168.4.0/24 area 2
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,39 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname D
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.10.10.10/30
|
||||
ip ospf cost 10
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
ip address 10.10.10.18/30
|
||||
ip ospf cost 1
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
ip address 10.10.10.25/30
|
||||
ip ospf cost 1
|
||||
exit
|
||||
!
|
||||
interface eth4
|
||||
ip address 10.10.10.28/30
|
||||
ip ospf cost 10
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.10.0.4/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.10.0.4
|
||||
network 10.10.0.4/32 area 0
|
||||
network 10.10.10.8/30 area 0
|
||||
network 10.10.10.16/30 area 2
|
||||
network 10.10.10.24/30 area 0
|
||||
network 10.10.10.28/30 area 2
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,81 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname F
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
description B-eth3
|
||||
ip address 10.10.10.14/30
|
||||
ip ospf cost 10
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
description D-eth3
|
||||
ip address 10.10.10.26/30
|
||||
ip ospf cost 1
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
description Gandalf-eth3
|
||||
ip address 203.0.113.1/30
|
||||
exit
|
||||
!
|
||||
interface eth4
|
||||
description R1-eth4
|
||||
ip address 203.0.113.5/30
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.10.0.5/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router bgp 65501
|
||||
bgp router-id 10.10.0.5
|
||||
no bgp ebgp-requires-policy
|
||||
neighbor 10.10.0.6 remote-as 65501
|
||||
neighbor 10.10.0.6 update-source lo
|
||||
neighbor 203.0.113.2 remote-as 65502
|
||||
neighbor 203.0.113.2 update-source eth3
|
||||
neighbor 203.0.113.6 remote-as 65503
|
||||
neighbor 203.0.113.6 update-source eth4
|
||||
!
|
||||
address-family ipv4 unicast
|
||||
redistribute ospf metric 10 route-map BGP4-OSPF
|
||||
neighbor 10.10.0.6 next-hop-self
|
||||
neighbor 203.0.113.2 route-map PREFER-ROUTE in
|
||||
neighbor 203.0.113.6 route-map PREFER-ROUTE2 in
|
||||
exit-address-family
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.10.0.5
|
||||
redistribute bgp metric 20 metric-type 1 route-map BGP4-OSPF
|
||||
network 10.10.0.5/32 area 0
|
||||
network 10.10.10.0/27 area 0
|
||||
exit
|
||||
!
|
||||
ip prefix-list ALLOWED_ROUTES seq 10 permit 10.0.0.0/24 ge 32
|
||||
ip prefix-list ALLOWED_ROUTES seq 20 permit 192.168.0.0/16 ge 24
|
||||
ip prefix-list ALLOWED_ROUTES seq 30 deny 0.0.0.0/0 le 32
|
||||
ip prefix-list PREFER-ROUTE seq 5 permit 192.168.2.0/24
|
||||
ip prefix-list PREFER-ROUTE seq 10 deny any
|
||||
ip prefix-list PREFER-ROUTE2 seq 5 permit 192.168.3.0/24
|
||||
ip prefix-list PREFER-ROUTE2 seq 10 deny any
|
||||
!
|
||||
route-map BGP4-OSPF permit 10
|
||||
match ip address prefix-list ALLOWED_ROUTES
|
||||
exit
|
||||
!
|
||||
route-map PREFER-ROUTE permit 10
|
||||
match ip address prefix-list PREFER-ROUTE
|
||||
set local-preference 200
|
||||
set weight 32768
|
||||
exit
|
||||
!
|
||||
route-map PREFER-ROUTE2 permit 10
|
||||
match ip address prefix-list PREFER-ROUTE2
|
||||
set local-preference 200
|
||||
set weight 32768
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,62 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname G
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
description C-eth3
|
||||
ip address 10.10.10.22/30
|
||||
ip ospf cost 100
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
description D-eth4
|
||||
ip address 10.10.10.30/30
|
||||
ip ospf cost 10
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
description R1-eth3
|
||||
ip address 203.0.113.9/30
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.10.0.6/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router bgp 65501
|
||||
bgp router-id 10.10.0.6
|
||||
no bgp ebgp-requires-policy
|
||||
neighbor 10.10.0.5 remote-as 65501
|
||||
neighbor 10.10.0.5 shutdown
|
||||
neighbor 10.10.0.5 update-source lo
|
||||
neighbor 203.0.113.10 remote-as 65503
|
||||
neighbor 203.0.113.10 update-source eth3
|
||||
!
|
||||
address-family ipv4 unicast
|
||||
redistribute ospf metric 10 route-map BGP-to-OSPF
|
||||
neighbor 10.10.0.5 next-hop-self
|
||||
neighbor 203.0.113.10 route-map PREPEND out
|
||||
exit-address-family
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.10.0.6
|
||||
redistribute bgp metric 20 metric-type 1 route-map BGP-to-OSPF
|
||||
network 10.10.0.6/32 area 2
|
||||
network 10.10.10.0/27 area 2
|
||||
exit
|
||||
!
|
||||
ip prefix-list ALLOWED_ROUTES seq 10 permit 10.0.0.0/24 ge 32
|
||||
ip prefix-list ALLOWED_ROUTES seq 20 permit 192.168.0.0/16 ge 24
|
||||
ip prefix-list ALLOWED_ROUTES seq 30 deny 0.0.0.0/0 le 32
|
||||
!
|
||||
route-map BGP-to-OSPF permit 10
|
||||
match ip address prefix-list ALLOWED_ROUTES
|
||||
exit
|
||||
!
|
||||
route-map PREPEND permit 10
|
||||
set as-path prepend 65501 65501
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,64 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname R1
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.30.30.1/30
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
description R3-eth1
|
||||
ip address 10.30.30.5/30
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
ip address 203.0.113.10/30
|
||||
exit
|
||||
!
|
||||
interface eth4
|
||||
ip address 203.0.113.6/30
|
||||
exit
|
||||
!
|
||||
interface eth5
|
||||
ip address 203.0.113.14/30
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.30.0.1/32
|
||||
exit
|
||||
!
|
||||
router rip
|
||||
network 10.30.0.1/32
|
||||
network 10.30.30.0/28
|
||||
passive-interface lo
|
||||
passive-interface eth3
|
||||
passive-interface eth4
|
||||
passive-interface eth5
|
||||
redistribute bgp metric 5 route-map BGP4-rip
|
||||
version 2
|
||||
exit
|
||||
!
|
||||
router bgp 65503
|
||||
bgp router-id 10.30.0.1
|
||||
no bgp ebgp-requires-policy
|
||||
neighbor 203.0.113.5 remote-as 65501
|
||||
neighbor 203.0.113.5 update-source lo
|
||||
neighbor 203.0.113.9 remote-as 65501
|
||||
neighbor 203.0.113.9 update-source eth3
|
||||
neighbor 203.0.113.13 remote-as 65502
|
||||
neighbor 203.0.113.13 update-source eth5
|
||||
!
|
||||
address-family ipv4 unicast
|
||||
redistribute rip route-map BGP4-rip
|
||||
exit-address-family
|
||||
exit
|
||||
!
|
||||
ip prefix-list ALLOWED_ROUTES seq 10 permit 10.0.0.0/24 ge 32
|
||||
ip prefix-list ALLOWED_ROUTES seq 20 permit 192.168.0.0/16 ge 24
|
||||
ip prefix-list ALLOWED_ROUTES seq 30 deny 0.0.0.0/0 le 32
|
||||
!
|
||||
route-map BGP4-rip permit 10
|
||||
match ip address prefix-list ALLOWED_ROUTES
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,24 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname R2
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.30.30.2/30
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
ip address 10.30.30.9/30
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.30.0.2/32
|
||||
exit
|
||||
!
|
||||
router rip
|
||||
network 10.30.0.2/32
|
||||
network 10.30.30.0/28
|
||||
passive-interface lo
|
||||
version 2
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,30 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname R3
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.30.30.6/30
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
ip address 192.168.3.254/24
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
ip address 10.30.30.10/30
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.30.0.3/32
|
||||
exit
|
||||
!
|
||||
router rip
|
||||
network 10.30.0.3/32
|
||||
network 10.30.30.0/28
|
||||
network 192.168.3.0/24
|
||||
passive-interface lo
|
||||
passive-interface eth2
|
||||
version 2
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,45 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname Frodo
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
description Gandalf-eth1
|
||||
ip address 10.20.20.2/30
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
description usernet2
|
||||
ip address 192.168.2.254/24
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
description Sam-eth3
|
||||
ip address 10.20.20.9/30
|
||||
exit
|
||||
!
|
||||
interface eth4
|
||||
description usernet3
|
||||
ip address 192.168.5.254/24
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.20.0.2/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.20.0.2
|
||||
network 10.20.0.2/32 area 1
|
||||
network 10.20.20.0/30 area 0
|
||||
network 10.20.20.8/30 area 0
|
||||
network 192.168.2.0/24 area 1
|
||||
network 192.168.5.0/24 area 1
|
||||
area 0 filter-list prefix RESTRICT_5_SUBNET in
|
||||
exit
|
||||
!
|
||||
ip prefix-list RESTRICT_5_SUBNET seq 5 deny 192.168.5.0/24
|
||||
ip prefix-list RESTRICT_5_SUBNET seq 10 permit any
|
||||
!
|
||||
@@ -0,0 +1,55 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname Gandalf
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.20.20.1/30
|
||||
exit
|
||||
!
|
||||
interface eth2
|
||||
ip address 10.20.20.5/30
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
ip address 203.0.113.2/30
|
||||
exit
|
||||
!
|
||||
interface eth5
|
||||
ip address 203.0.113.13/30
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.20.0.1/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router bgp 65502
|
||||
bgp router-id 10.20.0.1
|
||||
no bgp ebgp-requires-policy
|
||||
neighbor 203.0.113.1 remote-as 65501
|
||||
neighbor 203.0.113.1 update-source eth3
|
||||
neighbor 203.0.113.14 remote-as 65503
|
||||
neighbor 203.0.113.14 update-source eth5
|
||||
!
|
||||
address-family ipv4 unicast
|
||||
redistribute ospf metric 10 route-map BGP4-OSPF
|
||||
exit-address-family
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.20.0.1
|
||||
redistribute bgp metric 20 metric-type 1 route-map BGP4-OSPF
|
||||
network 10.20.0.1/32 area 0
|
||||
network 10.20.20.0/30 area 0
|
||||
network 10.20.20.4/30 area 0
|
||||
exit
|
||||
!
|
||||
ip prefix-list ALLOWED_ROUTES seq 10 permit 10.0.0.0/24 ge 32
|
||||
ip prefix-list ALLOWED_ROUTES seq 20 permit 192.168.0.0/16 ge 24
|
||||
ip prefix-list ALLOWED_ROUTES seq 30 deny 0.0.0.0/0 le 32
|
||||
!
|
||||
route-map BGP4-OSPF permit 10
|
||||
match ip address prefix-list ALLOWED_ROUTES
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,25 @@
|
||||
frr version 8.1
|
||||
frr defaults traditional
|
||||
hostname Sam
|
||||
no ipv6 forwarding
|
||||
!
|
||||
interface eth1
|
||||
ip address 10.20.20.6/30
|
||||
exit
|
||||
!
|
||||
interface eth3
|
||||
ip address 10.20.20.10/30
|
||||
exit
|
||||
!
|
||||
interface lo
|
||||
ip address 10.20.0.3/32
|
||||
ip ospf passive
|
||||
exit
|
||||
!
|
||||
router ospf
|
||||
ospf router-id 10.20.0.3
|
||||
network 10.20.0.3/32 area 0
|
||||
network 10.20.20.4/30 area 0
|
||||
network 10.20.20.8/30 area 0
|
||||
exit
|
||||
!
|
||||
@@ -0,0 +1,187 @@
|
||||
name: routing
|
||||
prefix: net
|
||||
|
||||
topology:
|
||||
kinds:
|
||||
linux:
|
||||
image: docker.io/itqdev/netops:routing
|
||||
|
||||
defaults:
|
||||
network-mode: none
|
||||
|
||||
nodes:
|
||||
A:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- ospf/A/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
B:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- ospf/B/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
C:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- ospf/C/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
D:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- ospf/D/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
F:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- ospf/F/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
G:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- ospf/G/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
Gandalf:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- static/Gandalf/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
Frodo:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- static/Frodo/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
Sam:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- static/Sam/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
R1:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- rip/R1/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
R2:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- rip/R2/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
R3:
|
||||
kind: linux
|
||||
binds:
|
||||
- common/daemons:/etc/frr/daemons
|
||||
- common/vtysh.conf:/etc/frr/vtysh.conf
|
||||
- rip/R3/frr.conf:/etc/frr/frr.conf
|
||||
exec:
|
||||
- service frr start
|
||||
|
||||
host1:
|
||||
kind: linux
|
||||
image: docker.io/itqdev/netops:latest
|
||||
binds:
|
||||
- hosts:/etc/hosts
|
||||
exec:
|
||||
- ip addr add 192.168.1.1/24 dev eth2
|
||||
- ip link set eth2 up
|
||||
- ip route add 192.168.0.0/16 via 192.168.1.254 dev eth2
|
||||
|
||||
host4:
|
||||
kind: linux
|
||||
image: docker.io/itqdev/netops:latest
|
||||
binds:
|
||||
- hosts:/etc/hosts
|
||||
exec:
|
||||
- ip addr add 192.168.4.1/24 dev eth2
|
||||
- ip link set eth2 up
|
||||
- ip route add 192.168.0.0/16 via 192.168.4.254 dev eth2
|
||||
|
||||
host2:
|
||||
kind: linux
|
||||
image: docker.io/itqdev/netops:latest
|
||||
binds:
|
||||
- hosts:/etc/hosts
|
||||
exec:
|
||||
- ip addr add 192.168.2.1/24 dev eth2
|
||||
- ip link set eth2 up
|
||||
- ip route add 192.168.0.0/16 via 192.168.2.254 dev eth2
|
||||
|
||||
host3:
|
||||
kind: linux
|
||||
image: docker.io/itqdev/netops:latest
|
||||
binds:
|
||||
- hosts:/etc/hosts
|
||||
exec:
|
||||
- ip addr add 192.168.3.1/24 dev eth2
|
||||
- ip link set eth2 up
|
||||
- ip route add 192.168.0.0/16 via 192.168.3.254 dev eth2
|
||||
- ip addr add 192.168.5.1/24 dev eth4
|
||||
- ip link set eth4 up
|
||||
- ip route add 192.168.2.0/24 via 192.168.5.254 dev eth4
|
||||
|
||||
links:
|
||||
- endpoints: ["A:eth1","B:eth1"]
|
||||
- endpoints: ["B:eth2","D:eth1"]
|
||||
- endpoints: ["B:eth3","F:eth1"]
|
||||
- endpoints: ["C:eth1","D:eth2"]
|
||||
- endpoints: ["C:eth3","G:eth1"]
|
||||
- endpoints: ["D:eth3","F:eth2"]
|
||||
- endpoints: ["D:eth4","G:eth2"]
|
||||
- endpoints: ["Gandalf:eth3","F:eth3"]
|
||||
- endpoints: ["Gandalf:eth1","Frodo:eth1"]
|
||||
- endpoints: ["Gandalf:eth2","Sam:eth1"]
|
||||
- endpoints: ["Frodo:eth3","Sam:eth3"]
|
||||
- endpoints: ["R1:eth3","G:eth3"]
|
||||
- endpoints: ["R1:eth4","F:eth4"]
|
||||
- endpoints: ["R1:eth1","R2:eth1"]
|
||||
- endpoints: ["R1:eth2","R3:eth1"]
|
||||
- endpoints: ["R1:eth5","Gandalf:eth5"]
|
||||
- endpoints: ["R2:eth3","R3:eth3"]
|
||||
- endpoints: ["A:eth2","host1:eth2"]
|
||||
- endpoints: ["C:eth2","host4:eth2"]
|
||||
- endpoints: ["Frodo:eth2","host2:eth2"]
|
||||
- endpoints: ["R3:eth2","host3:eth2"]
|
||||
- endpoints: ["Frodo:eth4","host3:eth4"]
|
||||
|
||||
Reference in New Issue
Block a user