link/doc/main.tex

111 lines
3.8 KiB
TeX

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage{listings}
\usepackage{hyperref}
\usepackage{xcolor}
\title{Quick Guide: Using link.py for Veth Pair Management in Incus Containers}
\author{c2023}
\date{\today}
\lstset{
basicstyle=\ttfamily\footnotesize,
frame=single,
backgroundcolor=\color{gray!10},
keywordstyle=\color{blue},
commentstyle=\color{green!70!black},
breaklines=true,
captionpos=b
}
\begin{document}
\maketitle
\section*{Introduction}
This document provides a quick guide on using \texttt{link.py} to create and manage virtual Ethernet (veth) pairs in Incus containers. Veth pairs are useful for creating network connections between different network namespaces, such as those used by containers.
\section*{Requirements}
\begin{itemize}
\item \textbf{Python} (preferably version 3.x)
\item \textbf{Root privileges}: Run \texttt{link.py} with \texttt{sudo} to ensure the necessary permissions.
\item \textbf{Incus installed} and properly configured on your system.
\item \textbf{Running containers}: Ensure that the Incus containers you want to connect are running.
\end{itemize}
\section*{Basic Usage}
The general syntax to run \texttt{link.py} is as follows:
\begin{lstlisting}[language=bash]
sudo python link.py \
-ns1 <namespace1> -t1 <type1> \
-ns2 <namespace2> -t2 <type2> \
-n1 <veth1> -n2 <veth2> \
[-b1 <bridge1>] [-b2 <bridge2>]
\end{lstlisting}
\begin{itemize}
\item \texttt{-ns1}, \texttt{-ns2}: Names of the network namespaces or containers.
\item \texttt{-t1}, \texttt{-t2}: Container type (use \texttt{incus} for Incus containers).
\item \texttt{-n1}, \texttt{-n2}: Names of the veth interfaces.
\item \texttt{-b1}, \texttt{-b2} (optional): Attach veth to a specified bridge on either end.
\end{itemize}
\section*{Example Commands}
\subsection*{Example 1: Connect Host and Incus Container}
Connect the host network namespace to an Incus container's network namespace.
\begin{lstlisting}[language=bash]
sudo python link.py \
-ns1 my_incus_container -t1 incus \
-n1 veth_container -n2 veth_host
\end{lstlisting}
\subsection*{Example 2: Connect Two Incus Containers}
Create a veth pair connecting two Incus containers.
\begin{lstlisting}[language=bash]
sudo python link.py \
-ns1 incus_container1 -t1 incus \
-ns2 incus_container2 -t2 incus \
-n1 veth1 -n2 veth2
\end{lstlisting}
\subsection*{Example 3: Attach Host End to a Bridge}
Create a veth pair between the host and an Incus container, attaching the host end to a bridge named \texttt{br0}.
\begin{lstlisting}[language=bash]
sudo python link.py \
-ns1 my_incus_container -t1 incus \
-n1 veth_container -n2 veth_host \
-b2 br0
\end{lstlisting}
\section*{Notes}
\begin{itemize}
\item If \texttt{'1'} is specified for \texttt{-ns1} or \texttt{-ns2}, it defaults to the host namespace.
\item Ensure bridges exist before attempting to attach veth pairs to them.
\item The script automatically brings up interfaces and bridges after creation.
\end{itemize}
\section*{Testing Connectivity}
Assign IP addresses to each end of the veth pair for testing connectivity. Example commands:
\begin{lstlisting}[language=bash]
# On the host
sudo ip addr add 192.168.10.1/24 dev veth_host
# Inside the Incus container
sudo incus exec my_incus_container -- ip addr add 192.168.10.2/24 dev veth_container
# Test with ping
ping 192.168.10.2
\end{lstlisting}
\section*{Troubleshooting}
\begin{itemize}
\item \textbf{Permission errors}: Ensure you're running the script with \texttt{sudo}.
\item \textbf{Interface not found}: Verify that the interface names are unique and do not conflict with existing interfaces.
\item \textbf{Container not found}: Check that the Incus container names are correct and that they are running.
\end{itemize}
\end{document}