# Software - Debian 11 (bullseye), auf dem Laptop Ubuntu 18.04 - Tinc 1.1pre17 oder tinc 1.0.36 - Bird 2.07 # Installation - Installation des Betriebssystems wird hier nicht beschrieben. - Hier werden die Schritte nach der Installation von Debian 11 (bullseye) zum Aufbau eines VPN mit Tinc und Bird beschrieben werden. - Für die meisten Befehle sind root Rechte erforderlich. - Tinc 1.0.36 und bird 2 können aus dem stable Repo installiert werden mit apt install tinc bird2 - Tinc 1.1pre17 kann aus experimental installiert werden (hier nicht beschrieben) oder aus den Sourcen kompiliert werden: sudo apt install build-essential libncurses-dev libreadline-dev liblzo2-dev libssl-dev wget http://tinc-vpn.org/packages/tinc-1.1pre17tar.gz tar zxvf tinc-1.1pre17.tar.gz ./configure Falls Fehler auftreten, fehlende Pakete nach installieren,dann make sudo make install # Allgemein - Informationen auf dieser Seite sind teilweise von anderen Wiki-Seiten übernommen. Es werden für alle Interfaces statische IPV4 Adressen verwendet, auf dem Laptop ist auch DHCP aktiv. Die hier verwendeten Adressen sind dem Wiki [IP-Adressen](IP-Adressen) für berghofen entnommen. # Hardware - APU mit Debian 11 (Bullseye) ohne grafische Oberfläche - Laptop mit Ubuntu 18.04 Berghofen, wie auch die anderen Standorte, besteht jeweils mindestens aus der APU und einem Laptop sowie einem Internetrouter (F!Box). An jedem Standort gibt es mehrere Tincverbindungen: - lan: zwischen APU und Laptop - wan: zwischen APU und den anderen Standorten - wan: zwischen Laptop und den anderen Standorten # Dateien der APU /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback up ip addr add 193.43.220.130/32 dev lo # The primary network interface allow-hotplug enp1s0 iface enp1s0 inet static address 192.168.178.51/24 #default gateway wird von bird erledigt # gateway 192.168.178.254 broadcast 192.168.178.255 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.178.254 dns-search fritz.box up ip rule add from all iif enp1s0 lookup 1 prio 1000 || true up ip rule add from 192.168.178.0/24 lookup 1 prio 1010 || true allow-hotplug wan iface wan inet static address 193.43.220.162/27 broadcast 193.43.220.191 mtu 1504 allow-hotplug lan iface lan inet static address 192.168.34.1/24 broadcast 192.168.34.255 mtu 1504 #allow-hotplug wlp5s0 # wlan z.Zt. nicht verwendet #iface wlp5s0 inet dhcp Die Schnittstellen der Interfacesdatei sind: - lo Standardloopback - enp1s0 ethernet - wan virtuelle Tinc Schnittstelle - lan virtuelle Tinc Schnittstelle - wlp5s0 nicht verwendete, auskommentierte WLAN Schnittstelle ## Für die Datenweitergabe zwischen den Netzen ist der folgende Eintrag nötig. /etc/sysctl.conf # Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1 # Tinc Verzeichnistruktur Tinc APU und Laptop Einstellungen etc/tinc/ |-- lan | |-- hosts | | |-- berghofen | | `-- berglap | |-- rsa_key.priv | |-- ed25519_key.priv ## nur bei tinc 1.1 | `-- tinc.conf `-- wan |-- hosts | |-- berghofen | |-- berglap | |-- hoerde | `-- nordstadt |-- rsa_key.priv |-- ed25519_key.priv ## nur bei tinc 1.1 `-- tinc.conf /etc/tinc/lan/tinc.conf der APU berghofen ## APU lan tinc.conf Name = berghofen Device = /dev/net/tun Mode = switch AddressFamily = ipv4 BindToAddress = 192.168.178.51 Port = 10001 MaxTimeout = 30 GraphDumpFile = /var/run/tinc.lan.dot ConnectTo = berglap /etc/tinc/wan/tinc.conf der APU berghofen ## APU wan tinc.conf Name = berghofen Device = /dev/net/tun Mode = switch AddressFamily = ipv4 BindToaddress = 192.168.178.51 Port = 661 MaxTimeout = 30 GraphDumpFile = /var/run/tinc.wan.dot ConnectTo = hoerde ConnectTo = nordstadt /etc/tinc/lan/tinc.conf des Laptop berglap ## Laptop lan tinc.conf Name = berglap Device = /dev/net/tun Mode = switch AddressFamily = ipv4 BindToAddress = 192.168.178.52 Port = 10001 MaxTimeout = 30 GraphDumpFile = /var/run/tinc.lan.dot ConnectTo = berghofen /etc/tinc/wan/tinc.conf des Laptop berglap ## Laptop wan tinc.conf Name = berglap Device = /dev/net/tun Mode = switch AddressFamily = ipv4 BindToaddress = 192.168.178.52 Port = 661 MaxTimeout = 30 GraphDumpFile = /var/run/tinc.wan.dot ConnectTo = hoerde ConnectTo = nordstadt Da auf jedem Rechner 2 Tincinstanzen an demselben Interface laufen, werden sie durch unterschiedliche Ports getrennt: WAN mit port 661, LAN mit Port 10001. Inhalt der hosts Dateien Die Public und private Keys werden von Tinc erzeugt: bei tinc 1.0.36: tincd -n wan -K 4096 tincd -n lan -K 4096 bei tinc 1.1: tinc -n wan generate-keys 4096 tinc -n lan generate-keys 4096 Die ED25519PublicKey Zeile wird nur bei tinc 1.1 erzeugt/verwendet. Für hosts, die per ConnectTo in der tinc.conf angesprochen werden, ist in der zugehörigen hosts Datei die IPadresse des hosts und der port erforderlich für die aktive Verbindungsaufnahme. /etc/tinc/lan/hosts/berghofen auf APU und laptop Address = 192.168.178.51 Port = 10001 -----BEGIN RSA PUBLIC KEY----- Schlüsseldaten -----END RSA PUBLIC KEY----- Ed25519PublicKey = WmAmMY95+B/A9FDQz7ZiV6WQcG2qAUUclRP52dwXSdD /etc/tinc/lan/hosts/berglap auf APU und laptop Address = 192.168.178.52 Port = 10001 -----BEGIN RSA PUBLIC KEY----- Schlüsseldaten -----END RSA PUBLIC KEY----- Ed25519PublicKey = WCkEAe/gohI7JAGLiHPKdE+ayxYrG1wuTfQQijAROuD /etc/tinc/wan/hosts/berghofen auf APU -----BEGIN RSA PUBLIC KEY----- Schlüsseldaten -----END RSA PUBLIC KEY----- Ed25519PublicKey = Tkhp7t+MsmQKsWIkO5qimTKoWdkvRigKwctxtfOu2MF /etc/tinc/wan/hosts/hoerde auf APU und berglap Address = 130.180.53.22 Port = 661 -----BEGIN RSA PUBLIC KEY----- Schlüsseldaten -----END RSA PUBLIC KEY----- Ed25519PublicKey = MjaltxtfPP1SdHgNH/dUuHmbYDXFdZMEUUbl0Qi/YCA /etc/tinc/wan/hosts/nordstadt auf APU und berglap Address = 91.204.4.53 Port = 661 -----BEGIN RSA PUBLIC KEY----- Schlüsseldaten -----END RSA PUBLIC KEY----- Ed25519PublicKey = 4znU87BKnctOFb+/JQhIltGtYN3h3czOVInolRPWgvA /etc/tinc/wan/hosts/berglap auf berglap -----BEGIN RSA PUBLIC KEY----- Schlüsseldaten -----END RSA PUBLIC KEY----- Ed25519PublicKey = 4znU87BKnctOFb+/JQhIltGtYN3h3czOVInolRPWgvA Die Tinc Instanzen können auf APU und berglap gestartet werden mit: systemctl start tinc@lan systemctl start tinc@wan Beispielhaft tinc@lan abfragen: systemctl status tinc@lan tinc@lan.service - Tinc net lan Loaded: loaded (/lib/systemd/system/tinc@.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-03-29 21:26:01 CEST; 1 months 0 days ago Docs: info:tinc man:tinc(8) man:tinc.conf(5) http://tinc-vpn.org/docs/ Main PID: 472 (tincd) Tasks: 1 (limit: 4657) Memory: 4.1M CPU: 22min 34.347s CGroup: /system.slice/system-tinc.slice/tinc@lan.service └─472 /usr/sbin/tincd -n lan -D ... Dabei ist das enabled in der Loaded Zeile wichtig. Um die Programme automatisch nach einem reboot zu starten, eventuell falls nicht durch die Installation schon eingerichtet: systemctl enable tinc@lan systemctl enable tinc@wan # Bird auf der APU berghofen und Laptop berglap /etc/iproute2/rt_tables identisch auf APU / laptop # # reserved values # 255 local 254 main 253 default 0 unspec # # local # 1 tinc - Die bird.conf des laptops ist bis auf andere IP Adressen identisch /etc/bird/bird.conf # bird.conf Alle Anpassungen als defines # damit keine übersehen wird define publicIP = 193.43.220.130; define publicIP_32 = 193.43.220.130/32; define isprouter = 192.168.178.254; # ab hier passt alles für unsere lan/wan Netze router id publicIP; # log syslog { debug, info, trace, remote }; /* optional */ define AS35675_all = [ 193.43.220.0/23 ]; define AS35675_any = [ 193.43.220.0/23+ ]; protocol device device0 { scan time 10; } /* wg. BSD: */ protocol direct direct0 { ipv4; } protocol kernel kernel0 { learn on; scan time 120; ipv4 { import all; export where source != RTS_DEVICE; }; } # erstellt neue routing tabelle ipv4 table fib1table; #RTS route source #import / export protocol kernel kernel1 { kernel table 1; learn on; scan time 120; ipv4 { table fib1table; import all; export where source != RTS_DEVICE; }; } protocol static static1 { ipv4 { table fib1table; }; route 0.0.0.0/0 via isprouter; /* zur F!Box */ } protocol ospf ospfwan { ipv4 { import all; export where net ~ AS35675_any; }; area 0.0.0.0 { stubnet publicIP_32 { cost 1; }; interface "wan" { type broadcast; cost 100; }; interface "lan" { type broadcast; cost 10; }; }; } Den bird starten und eventuell rebootfest machen: systemctl start bird systemctl enable bird