\documentclass{hitec} \usepackage{polski} \usepackage[utf8]{inputenc} \usepackage{url} \usepackage{xcolor} \usepackage[ampersand]{easylist} \newcommand{\dir}[1] {\texttt{\color{teal} \detokenize{#1}}} \definecolor{orange}{rgb}{1,0.5,0} \newcommand{\file}[1] {\texttt{\color{orange} \detokenize{#1}}} \newcommand{\filepath}[1] {\texttt{\color{violet} \detokenize{#1}}} \author{Mateusz Bielesz, Wojciech Kosior, Marek Moryl, Kamil Szarek} \title{Użytkowanie 0TDNS} \begin{document} \maketitle \begin{sloppypar} \section{Instalacja części back-endowej} W celu zainstalowania systemu klonujemy repozytorium: \url{https://repo.or.cz/0tDNS.git} i wykonujemy jako root: \begin{verbatim} # ./install.sh \end{verbatim} Skrypt \file{install.sh} przekopiowuje do \dir{/var/lib/0tdns/} oraz do \dir{/usr/sbin/} skrypty wchodzące w skład systemu. Oprócz tego \file{install.sh} umieszcza importowany przez inne skrypty \file{ztdnslib.py} w \dir{/usr/lib/python3/dist-packages/} oraz kopiuje \file{db_connection_config.yml} do katalogu \dir{/etc/0tdns/}. Programy działające w ramach systemu automatycznie sukają konfiguracji systemu pod \filepath{/etc/0tdns/db_connection_config.yml}. Dostarczony plik jest domyślną konfiguracją, którą administrator systemu powinien zmodyfikować precyzując w niej adekwatny adres bazy danych i inne parametry. Przy wywołaniu \file{install.sh} można ustawić odpowiednią zmienną środowiskową \begin{verbatim} $ INSTALL_ROOT=/some/path/ ./install.sh \end{verbatim} lub podać argument do skryptu \begin{verbatim} $ ./install.sh /some/path/ \end{verbatim} Efekt jest w obu przypadkach taki sam - wszystkie pliki zostaną zainstalowane w \dir{/some/path/}, co może zostać wykorzystane do instalacji wewnątrz chroot'a lub do stworzenia pakietu dystrybucji. Po instalacji plików w systemie konieczne jest utworzenie użytkownika i dodanie wpisów do crontaba, co wykonać można wywołaniem skryptu \begin{verbatim} # ./setup.sh \end{verbatim} Funkcjonalność \file{setup.sh} i \file{install.sh} została rozdzielona z myślą o dystrybucji systemu. \section{Deinstalacja części back-endowej} W celu odwrócenia zmian dokonanych przez \file{setup.sh} należy wywołać \begin{verbatim} # ./uninstall.sh \end{verbatim} Jeśli z systemu mają być usunięte także pliki zainstalowane przez skrypt \file{install.sh}, można użyć następującej flagi \begin{verbatim} # uninstall.sh --delete-files \end{verbatim} \section{Działanie części back-endowej systemu} Demon crona co gdzin uruchamia skrypt \file{hourly.py}, który łączy się z bazą (używając funkcji z \file{ztdnslib.py}, która czyta konfigurację \filepath{/etc/0tdns/db_connection_config.yml}). Skrypt \file{hourly.py} pobiera z bazy id wszystkich połączeń VPN, które nawiąże w celu odpytywania serwerów DNS. Dla każdego VPN \file{hourly.py} sprawdza, czy jego plik konfiguracyjny znajduje się w systemie. Jeżli nie, jest pobierany z bazy i zapisywany jako \filepath{/var/lib/0tdns/.ovpn}. Następnie dla każdego VPN wywoływany jest skrypt \file{vpn_wrapper.sh} (nie powinien on być uruchamiany manualnie, a jedynie wywoływany przez \file{hourly.py}), któremu jako argumenty podawane są kolejno: \begin{easylist} & ścieżka do pliku konfiguracyjnego OpenVPN & fizyczny adres ip systemu (tj. adres źródłowy, który powinny mieć nieroutowane przez VPN datagramy IP) & zawarte w jednym argumencie oddzielone od siebie znakami białymi adresy podsieci, do których ruch nie powinien być routowany przez VPN & polecenie (plik wykonywalny) do uruchomienia wewnątrz namespace'a (jest nim \filepath{/var/lib/0tdns/perform_queries.py}, który również czyta konfigurację 0TDNS i łączy się z bazą danych przed wykonaniem zapytań DNS) & argumenty do programu wykonywanego wewnątrz namespace'u skryptu && godzina wywołania \file{hourly.py} && id VPN w bazie \end{easylist} Skrypt \file{vpn_wrapper.sh} otwiera połączenie VPN, tworzy namespace, przekierowuje ruch z namespace przez VPN i uruchamia podaną komendę wewnątrz namespace'a. Po jej zakończeniu zamyka połączenie VPN i usuwa namespace. \end{sloppypar} \end{document}