several fixups discussed on tuesday
This commit is contained in:
@@ -72,53 +72,6 @@ and reordering. These impairments are applied symmetrically on all
|
|||||||
machines, meaning effective round-trip impairment is approximately
|
machines, meaning effective round-trip impairment is approximately
|
||||||
double the per-machine values.
|
double the per-machine values.
|
||||||
|
|
||||||
\section{VPNs Under Test}
|
|
||||||
|
|
||||||
Ten VPN implementations were selected for evaluation, spanning a range
|
|
||||||
of architectures from centralized coordination to fully decentralized
|
|
||||||
mesh topologies. Table~\ref{tab:vpn_selection} summarizes the selection.
|
|
||||||
|
|
||||||
\begin{table}[H]
|
|
||||||
\centering
|
|
||||||
\caption{VPN implementations included in the benchmark}
|
|
||||||
\label{tab:vpn_selection}
|
|
||||||
\begin{tabular}{lll}
|
|
||||||
\hline
|
|
||||||
\textbf{VPN} & \textbf{Architecture} & \textbf{Notes} \\
|
|
||||||
\hline
|
|
||||||
Tailscale (Headscale) & Coordinated mesh & Open-source
|
|
||||||
coordination server \\
|
|
||||||
ZeroTier & Coordinated mesh & Global virtual Ethernet \\
|
|
||||||
Nebula & Coordinated mesh & Slack's overlay network \\
|
|
||||||
Tinc & Fully decentralized & Established since 1998 \\
|
|
||||||
Yggdrasil & Fully decentralized & Spanning-tree routing \\
|
|
||||||
Mycelium & Fully decentralized & End-to-end encrypted IPv6 overlay \\
|
|
||||||
Hyprspace & Fully decentralized & libp2p-based, IPFS-compatible \\
|
|
||||||
EasyTier & Fully decentralized & Rust-based, multi-protocol \\
|
|
||||||
VpnCloud & Fully decentralized & Lightweight, kernel bypass option \\
|
|
||||||
WireGuard & Point-to-point & Reference baseline (not a mesh VPN) \\
|
|
||||||
\hline
|
|
||||||
Internal (no VPN) & N/A & Baseline for raw network performance \\
|
|
||||||
\hline
|
|
||||||
\end{tabular}
|
|
||||||
\end{table}
|
|
||||||
|
|
||||||
WireGuard is included as a reference point despite not being a mesh VPN.
|
|
||||||
Its minimal overhead and widespread adoption make it a useful comparison
|
|
||||||
for understanding the cost of mesh coordination and NAT traversal logic.
|
|
||||||
|
|
||||||
\subsection{Selection Criteria}
|
|
||||||
|
|
||||||
VPNs were selected based on:
|
|
||||||
\begin{itemize}
|
|
||||||
\bitem{NAT traversal capability:} All selected VPNs can establish
|
|
||||||
connections between peers behind NAT without manual port forwarding.
|
|
||||||
\bitem{Decentralization:} Preference for solutions without mandatory
|
|
||||||
central servers, though coordinated-mesh VPNs were included for comparison.
|
|
||||||
\bitem{Active development:} Only VPNs with recent commits and
|
|
||||||
maintained releases were considered.
|
|
||||||
\bitem{Linux support:} All VPNs must run on Linux.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\subsection{Configuration Methodology}
|
\subsection{Configuration Methodology}
|
||||||
|
|
||||||
@@ -129,12 +82,7 @@ under \texttt{pkgs/} in the flake.
|
|||||||
|
|
||||||
Cryptographic material (WireGuard keys, Nebula certificates, ZeroTier
|
Cryptographic material (WireGuard keys, Nebula certificates, ZeroTier
|
||||||
identities) is generated deterministically via Clan's vars generator
|
identities) is generated deterministically via Clan's vars generator
|
||||||
system. For example, WireGuard keys are generated as:
|
system.
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
wg genkey > "$out/private-key"
|
|
||||||
wg pubkey < "$out/private-key" > "$out/public-key"
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
Generated keys are stored in version control under
|
Generated keys are stored in version control under
|
||||||
\texttt{vars/per-machine/\{name\}/} and read at NixOS evaluation time,
|
\texttt{vars/per-machine/\{name\}/} and read at NixOS evaluation time,
|
||||||
@@ -273,11 +221,6 @@ bursts, because a packet that was lost or reordered increases the
|
|||||||
probability that the next packet suffers the same fate. This produces
|
probability that the next packet suffers the same fate. This produces
|
||||||
realistic bursty degradation rather than uniformly distributed drops.
|
realistic bursty degradation rather than uniformly distributed drops.
|
||||||
|
|
||||||
The ``Low'' profile approximates a well-provisioned continental
|
|
||||||
connection, ``Medium'' represents intercontinental links or congested
|
|
||||||
networks, and ``High'' simulates severely degraded conditions such as
|
|
||||||
satellite links or highly congested mobile networks.
|
|
||||||
|
|
||||||
A 30-second stabilization period follows TC application before
|
A 30-second stabilization period follows TC application before
|
||||||
measurements begin, allowing queuing disciplines to settle.
|
measurements begin, allowing queuing disciplines to settle.
|
||||||
|
|
||||||
@@ -405,6 +348,8 @@ typical observations, while min and max capture outlier behavior.
|
|||||||
The nix-cache benchmark additionally reports standard deviation via
|
The nix-cache benchmark additionally reports standard deviation via
|
||||||
hyperfine's built-in statistical output.
|
hyperfine's built-in statistical output.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\section{Source Code Analysis}
|
\section{Source Code Analysis}
|
||||||
|
|
||||||
To complement the performance benchmarks with architectural
|
To complement the performance benchmarks with architectural
|
||||||
@@ -571,3 +516,53 @@ test-specific payload, and a \texttt{meta} object recording
|
|||||||
wall-clock duration, number of attempts, VPN restart count and
|
wall-clock duration, number of attempts, VPN restart count and
|
||||||
duration, connectivity wait time, source and target machine names,
|
duration, connectivity wait time, source and target machine names,
|
||||||
and on failure, the relevant service logs.
|
and on failure, the relevant service logs.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\section{VPNs Under Test}
|
||||||
|
|
||||||
|
VPNs were selected based on:
|
||||||
|
\begin{itemize}
|
||||||
|
\bitem{NAT traversal capability:} All selected VPNs can establish
|
||||||
|
connections between peers behind NAT without manual port forwarding.
|
||||||
|
\bitem{Decentralization:} Preference for solutions without mandatory
|
||||||
|
central servers, though coordinated-mesh VPNs were included for comparison.
|
||||||
|
\bitem{Active development:} Only VPNs with recent commits and
|
||||||
|
maintained releases were considered (with the exception of VPN Cloud).
|
||||||
|
\bitem{Linux support:} All VPNs must run on Linux.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
|
Ten VPN implementations were selected for evaluation, spanning a range
|
||||||
|
of architectures from centralized coordination to fully decentralized
|
||||||
|
mesh topologies. Table~\ref{tab:vpn_selection} summarizes the selection.
|
||||||
|
|
||||||
|
\begin{table}[H]
|
||||||
|
\centering
|
||||||
|
\caption{VPN implementations included in the benchmark}
|
||||||
|
\label{tab:vpn_selection}
|
||||||
|
\begin{tabular}{lll}
|
||||||
|
\hline
|
||||||
|
\textbf{VPN} & \textbf{Architecture} & \textbf{Notes} \\
|
||||||
|
\hline
|
||||||
|
Tailscale (Headscale) & Coordinated mesh & Open-source
|
||||||
|
coordination server \\
|
||||||
|
ZeroTier & Coordinated mesh & Global virtual Ethernet \\
|
||||||
|
Nebula & Coordinated mesh & Slack's overlay network \\
|
||||||
|
Tinc & Fully decentralized & Established since 1998 \\
|
||||||
|
Yggdrasil & Fully decentralized & Spanning-tree routing \\
|
||||||
|
Mycelium & Fully decentralized & End-to-end encrypted IPv6 overlay \\
|
||||||
|
Hyprspace & Fully decentralized & libp2p-based, IPFS-compatible \\
|
||||||
|
EasyTier & Fully decentralized & Rust-based, multi-protocol \\
|
||||||
|
VpnCloud & Fully decentralized & Lightweight, kernel bypass option \\
|
||||||
|
WireGuard & Point-to-point & Reference baseline (not a mesh VPN) \\
|
||||||
|
\hline
|
||||||
|
Internal (no VPN) & N/A & Baseline for raw network performance \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
WireGuard is included as a reference point despite not being a mesh VPN.
|
||||||
|
Its minimal overhead and widespread adoption make it a useful comparison
|
||||||
|
for understanding the cost of mesh coordination and NAT traversal logic.
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
\chapter{Preliminaries} % Main chapter title
|
|
||||||
|
|
||||||
\label{Preliminaries}
|
|
||||||
|
|
||||||
\subsection{Nix: A Safe and Policy-Free System for Software Deployment}
|
|
||||||
|
|
||||||
Nix addresses significant issues in software deployment by utilizing
|
|
||||||
cryptographic hashes to ensure unique paths for component instances
|
|
||||||
\cite{dolstra_nix_2004}. Features such as concurrent installation of
|
|
||||||
multiple versions, atomic upgrades, and safe garbage collection make
|
|
||||||
Nix a flexible deployment system. This work uses Nix to ensure that
|
|
||||||
all VPN builds and system configurations are deterministic.
|
|
||||||
|
|
||||||
\subsection{NixOS: A Purely Functional Linux Distribution}
|
|
||||||
|
|
||||||
NixOS extends Nix principles to Linux system configuration
|
|
||||||
\cite{dolstra_nixos_2008}. System configurations are reproducible and
|
|
||||||
isolated from stateful interactions typical in imperative package
|
|
||||||
management. This property is essential for ensuring identical test
|
|
||||||
environments across benchmark runs.
|
|
||||||
|
|
||||||
\subsection{UDP NAT and Firewall Puncturing in the Wild}
|
|
||||||
|
|
||||||
Halkes and Pouwelse~\cite{halkes_udp_2011} measure UDP hole punching
|
|
||||||
efficacy on a live P2P network using the Tribler BitTorrent client.
|
|
||||||
Their study finds that 79\% of peers are unreachable due to NAT or
|
|
||||||
firewall restrictions, yet 64\% reside behind configurations amenable
|
|
||||||
to hole punching. Among compatible peers, over 80\% of puncturing
|
|
||||||
attempts succeed, establishing hole punching as a practical NAT
|
|
||||||
traversal technique. Their timeout measurements further indicate that
|
|
||||||
keep-alive messages must be sent at least every 55 seconds to maintain
|
|
||||||
open NAT mappings.
|
|
||||||
|
|
||||||
These findings directly inform the evaluation criteria for this thesis.
|
|
||||||
All mesh VPNs tested rely on UDP hole punching for NAT traversal;
|
|
||||||
the 80\% success rate sets a baseline expectation, while the 55-second
|
|
||||||
timeout informs analysis of each implementation's keep-alive behavior
|
|
||||||
during source code review.
|
|
||||||
|
|
||||||
\subsection{An Overview of Packet Reordering in TCP}
|
|
||||||
TODO \cite{leung_overview_2007}
|
|
||||||
|
|
||||||
\subsection{Performance Evaluation of TCP over QUIC Tunnels}
|
|
||||||
TODO \cite{guo_implementation_2025}
|
|
||||||
@@ -12,9 +12,11 @@ The chapter concludes with findings from the source code analysis.
|
|||||||
|
|
||||||
\section{Baseline Performance}
|
\section{Baseline Performance}
|
||||||
|
|
||||||
Under the baseline impairment profile (no added latency, loss, or
|
|
||||||
reordering), the overhead introduced by each VPN relative to the
|
|
||||||
internal (no VPN) baseline and WireGuard can be measured in isolation.
|
% Under the baseline impairment profile (no added latency, loss, or
|
||||||
|
% reordering), the overhead introduced by each VPN relative to the
|
||||||
|
% internal (no VPN) baseline and WireGuard can be measured in isolation.
|
||||||
|
|
||||||
\subsection{Throughput Overhead}
|
\subsection{Throughput Overhead}
|
||||||
|
|
||||||
|
|||||||
@@ -250,8 +250,7 @@
|
|||||||
\newcommand{\decoRule}{\rule{.8\textwidth}{.4pt}} % New command for a
|
\newcommand{\decoRule}{\rule{.8\textwidth}{.4pt}} % New command for a
|
||||||
% rule to be used under figures
|
% rule to be used under figures
|
||||||
|
|
||||||
\setcounter{tocdepth}{3} % The depth to which the document sections
|
\setcounter{tocdepth}{1} % Only show chapters and sections in table of contents
|
||||||
% are printed to the table of contents
|
|
||||||
\ProvideDocumentCommand{\addchaptertocentry}{ m }{%
|
\ProvideDocumentCommand{\addchaptertocentry}{ m }{%
|
||||||
\addcontentsline{toc}{chapter}{#1}%
|
\addcontentsline{toc}{chapter}{#1}%
|
||||||
}
|
}
|
||||||
@@ -390,8 +389,6 @@ KOMA-script documentation for details.}]{fancyhdr}
|
|||||||
{\normalsize \degreename\par}% Degree name
|
{\normalsize \degreename\par}% Degree name
|
||||||
\bigskip
|
\bigskip
|
||||||
{\normalsize\bfseries \@title \par}% Thesis title
|
{\normalsize\bfseries \@title \par}% Thesis title
|
||||||
\medskip
|
|
||||||
{\normalsize \byname{} \authorname \par}% Author name
|
|
||||||
\bigskip
|
\bigskip
|
||||||
\end{center}
|
\end{center}
|
||||||
}
|
}
|
||||||
|
|||||||
63
main.tex
63
main.tex
@@ -76,7 +76,7 @@
|
|||||||
\newcommand{\bitem}[1]{
|
\newcommand{\bitem}[1]{
|
||||||
\item \textbf{#1}}
|
\item \textbf{#1}}
|
||||||
|
|
||||||
\setcounter{secnumdepth}{1} % Only number chapters and sections, not subsections
|
\setcounter{secnumdepth}{0} % Only number chapters, not sections or subsections
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
% MARGIN SETTINGS
|
% MARGIN SETTINGS
|
||||||
@@ -95,8 +95,7 @@
|
|||||||
% THESIS INFORMATION
|
% THESIS INFORMATION
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
\thesistitle{A Reproducible Analysis of P2P
|
\thesistitle{An Analysis of P2P VPN Implementation} % Your thesis title, this is used in the title
|
||||||
VPN Implementation and Overhead} % Your thesis title, this is used in the title
|
|
||||||
% and abstract, print it elsewhere with \ttitle
|
% and abstract, print it elsewhere with \ttitle
|
||||||
%\supervisor{\textsc{Ber Lorke}} % Your supervisor's name, this is
|
%\supervisor{\textsc{Ber Lorke}} % Your supervisor's name, this is
|
||||||
% used in the title page, print it elsewhere with \supname
|
% used in the title page, print it elsewhere with \supname
|
||||||
@@ -241,16 +240,44 @@ and Management}} % Your department's name and URL, this is used in
|
|||||||
seven benchmarks.
|
seven benchmarks.
|
||||||
|
|
||||||
Our analysis reveals that Tailscale outperforms the Linux kernel's
|
Our analysis reveals that Tailscale outperforms the Linux kernel's
|
||||||
default networking stack under degraded conditions. and tuned
|
default networking stack under degraded conditions, owing to its
|
||||||
congestion control: Reno over CUBIC, with RACK disabled to avoid
|
userspace IP stack with tuned parameters. We confirm this by
|
||||||
spurious retransmits under reordering. We validate this
|
re-running benchmarks with matching kernel-side tuning and observe
|
||||||
hypothesis by re-running benchmarks with tuned kernel buffer
|
comparable throughput gains. The investigation also uncovered a
|
||||||
parameters, demonstrating measurable throughput improvements. This
|
critical security vulnerability in one of the evaluated VPNs.
|
||||||
investigation also uncovered several critical security
|
|
||||||
vulnerabilities across the evaluated VPNs.
|
|
||||||
|
|
||||||
\end{abstract}
|
\end{abstract}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
% GERMAN ABSTRACT PAGE
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
\begingroup
|
||||||
|
\renewcommand{\abstractname}{Zusammenfassung}
|
||||||
|
\begin{abstract}
|
||||||
|
\addchaptertocentry{Zusammenfassung}
|
||||||
|
|
||||||
|
Diese Arbeit untersucht Peer-to-Peer-Mesh-VPNs mithilfe eines
|
||||||
|
reproduzierbaren, Nix-basierten Frameworks, das auf einem
|
||||||
|
Deployment-System namens Clan aufbaut. Wir evaluieren zehn
|
||||||
|
VPN-Implementierungen, darunter Tailscale (über Headscale),
|
||||||
|
Hyprspace, Nebula, Tinc und ZeroTier, unter vier
|
||||||
|
Netzwerkbeeinträchtigungsprofilen mit variierendem Paketverlust,
|
||||||
|
Paketumsortierung, Latenz und Jitter, was über 300 einzelne
|
||||||
|
Messungen in sieben Benchmarks ergibt.
|
||||||
|
|
||||||
|
Unsere Analyse zeigt, dass Tailscale unter beeinträchtigten
|
||||||
|
Bedingungen den Standard-Netzwerkstack des Linux-Kernels
|
||||||
|
übertrifft, was auf seinen Userspace-IP-Stack mit optimierten
|
||||||
|
Parametern zurückzuführen ist. Wir bestätigen dies, indem wir die
|
||||||
|
Benchmarks mit entsprechend angepassten Kernel-Parametern erneut
|
||||||
|
durchführen und vergleichbare Durchsatzgewinne beobachten. Die
|
||||||
|
Untersuchung deckte zudem eine kritische Sicherheitslücke in einem
|
||||||
|
der evaluierten VPNs auf.
|
||||||
|
|
||||||
|
\end{abstract}
|
||||||
|
\endgroup
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
% ACKNOWLEDGEMENTS
|
% ACKNOWLEDGEMENTS
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
@@ -282,15 +309,6 @@ and Management}} % Your department's name and URL, this is used in
|
|||||||
|
|
||||||
%\listoftables % Prints the list of tables
|
%\listoftables % Prints the list of tables
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
% ABBREVIATIONS
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\section*{Abbreviations}
|
|
||||||
\begin{acronym}[P2P] % [P2P] aligns entries to the longest label
|
|
||||||
\acro{P2P}{Peer to Peer}
|
|
||||||
\end{acronym}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
% PHYSICAL CONSTANTS/OTHER DEFINITIONS
|
% PHYSICAL CONSTANTS/OTHER DEFINITIONS
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
@@ -339,7 +357,7 @@ and Management}} % Your department's name and URL, this is used in
|
|||||||
% Include the chapters of the thesis as separate files from the Chapters folder
|
% Include the chapters of the thesis as separate files from the Chapters folder
|
||||||
% Uncomment the lines as you write the chapters
|
% Uncomment the lines as you write the chapters
|
||||||
\include{Chapters/Introduction}
|
\include{Chapters/Introduction}
|
||||||
\include{Chapters/Preliminaries}
|
\include{Chapters/Background}
|
||||||
\include{Chapters/Methodology}
|
\include{Chapters/Methodology}
|
||||||
\include{Chapters/Results}
|
\include{Chapters/Results}
|
||||||
\include{Chapters/Discussion}
|
\include{Chapters/Discussion}
|
||||||
@@ -361,6 +379,11 @@ and Management}} % Your department's name and URL, this is used in
|
|||||||
% Appendices folder
|
% Appendices folder
|
||||||
% Uncomment the lines as you write the Appendices
|
% Uncomment the lines as you write the Appendices
|
||||||
|
|
||||||
|
\chapter{Abbreviations}
|
||||||
|
\begin{acronym}[P2P] % [P2P] aligns entries to the longest label
|
||||||
|
\acro{P2P}{Peer to Peer}
|
||||||
|
\end{acronym}
|
||||||
|
|
||||||
%\include{Appendices/AppendixA}
|
%\include{Appendices/AppendixA}
|
||||||
%\include{Appendices/AppendixB}
|
%\include{Appendices/AppendixB}
|
||||||
%\include{Appendices/AppendixC}
|
%\include{Appendices/AppendixC}
|
||||||
|
|||||||
Reference in New Issue
Block a user