IGP-Kopplung-Roadmap.page 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. ---
  2. title: Roadmap für die Weiterentwicklung der IGP-Kopplung
  3. categories: Projekte Routing VPN
  4. format: DocBook
  5. ...
  6. <article>
  7. <articleinfo>
  8. <title>Roadmap für die Weiterentwicklung der IGP-Kopplung</title>
  9. </articleinfo>
  10. <simpara>
  11. Dieses Dokument dient der Planung und Kooperation zur praktischen Weiterentwicklung der IGP-Kopplung. Zur Herleitung dieses Routingkonzepts für Freifunk-Netze siehe den Text zum <ulink url="Fussgaengerzonenproblem">Fußgängerzonenproblem</ulink>.
  12. </simpara>
  13. <table>
  14. <tgroup cols="3">
  15. <colspec align="left" />
  16. <colspec align="left" />
  17. <colspec align="left" />
  18. <thead>
  19. <row>
  20. <entry>
  21. Bereich
  22. </entry>
  23. <entry>
  24. Status
  25. </entry>
  26. <entry>
  27. Aufgaben
  28. </entry>
  29. </row>
  30. </thead>
  31. <tbody>
  32. <row>
  33. <entry>
  34. Routing
  35. </entry>
  36. <entry>
  37. -
  38. </entry>
  39. <entry>
  40. <para>
  41. Erstellung einer (mit den Teilnehmenden wachsenden) Einführung in das Thema dynamisches Routing:
  42. <itemizedlist>
  43. <listitem>
  44. <simpara>
  45. als Text, mit repository für Text und config und src, sowie ggf. passende Laborfirmware (zB à la <ulink url="http://nicolasacco.diveni.re/~gioacchino/internship-report/main.html">Libre-Mesh</ulink>).
  46. </simpara>
  47. </listitem>
  48. <listitem>
  49. <simpara>
  50. Unterthemen: Routing im Internet mit großem I (OSPF, BGP). Routing für den Freifunk, d.h. u.a. WLAN-adhoc-Meshes, leistungsschwache Router, communities (OLSR, Babel, B.A.T.M.A.N.). Mit Beispielen aus dem FF und insb. Übungen zum "Routing Selbermachen" mit üblicher Hardware.
  51. </simpara>
  52. </listitem>
  53. <listitem>
  54. <simpara>
  55. Ziel der Einführung: Eigenhändiger Anschluss der Geräte der Routing-Adepten (m/w) an das dynamische Routing der FF-(Übungs-)Netze. Dadurch leichteres Verstehen des eigenen (FF-)Netzes. Befähigung zum Analysieren und Lösen von Routingproblemen, und ggf. zum Verbessern und Weiterenwickeln des FF-Routings.
  56. </simpara>
  57. </listitem>
  58. </itemizedlist>
  59. </para>
  60. </entry>
  61. </row>
  62. <row>
  63. <entry>
  64. IGP-Kopplung
  65. </entry>
  66. <entry>
  67. Laborbetrieb (bewohnbar;)
  68. </entry>
  69. <entry>
  70. <itemizedlist>
  71. <listitem>
  72. <simpara>
  73. Aktualisierung des praktischen Teils des Textes "<ulink url="Fussgaengerzonenproblem">Fußgängerzonenproblem</ulink>": die zZ in Betrieb befindliche Konkretisierung der IGP-Kopplung enthält kleinere Korrekturen, Verbesserungen und insb. die für den realen Betrieb wichtige Integration von Babel-Metriken. Diese Fortschritte gegenüber der Version zu den FF-RL-Routing-Days sind noch nicht dokumentiert.
  74. </simpara>
  75. </listitem>
  76. <listitem>
  77. <para>
  78. Bird attitude readjustment:-) Notwendige und wünschenswerte patches sind nach bisheriger Erfahrung mit der IGP-Kopplung:
  79. <itemizedlist>
  80. <listitem>
  81. <simpara>
  82. OSPF &lt;-&gt; OSPF redistribution ermöglichen. Höchste Priorität, denn dies macht die Einfachheit der Idee "IGP-Kopplung" durch massive Vereinfachung gegenüber der jetzigen Bird-Konfiguration sichtbar und wirksam.
  83. </simpara>
  84. </listitem>
  85. <listitem>
  86. <simpara>
  87. Einführung eines Routenattributes "common_metric", das als tie-braker bei Routen gleicher preference fungiert, wenn es vorhanden ist. Dadurch können auch Routen aus verschiedenen IGPs gemäß einer gemeinsamen (globalen) Metrik verglichen werden. Dies stellt eine Voraussetzung für eine hererogene IGP-Kopplung dar, also dass verschiedene IGPs gleichzeitig genutzt und gekoppelt werden.
  88. </simpara>
  89. </listitem>
  90. <listitem>
  91. <simpara>
  92. Ggf. Optimierung der Interaktion von Bird und Kernel: bei den häufigen Routenänderungen in einer IGP-Kopplung mit dynamischen Metriken sollten die von Bird durchgeführten Änderungen an der FIB des Kernels minimiert werden, also insb. sollte nur dann eine Routenänderung erfolgen, wenn sich das gateway geändert hat, nicht nur der Metrikwert. Eine FIB-Änderung sollten in einem Schritt erfolgen (change) statt in zweien (delete + add).
  93. </simpara>
  94. </listitem>
  95. <listitem>
  96. <simpara>
  97. Die für die "Schleifenbits" der IGP-Kopplung benötigte Bitarithmetik könnte direkt in die filter language von Bird als elementare Operationen eingebaut werden.
  98. </simpara>
  99. </listitem>
  100. </itemizedlist>
  101. </para>
  102. </listitem>
  103. <listitem>
  104. <para>
  105. Babel attitude readjustment:-) Notwendige und wünschenswerte patches des babeld sind nach bisheriger Erfahrung:
  106. <itemizedlist>
  107. <listitem>
  108. <simpara>
  109. IP-Adressen, die auf einem Interface liegen, auf dem babeld läuft, sollten von babeld auch auf diesem Interface geroutet werden. (Der jetzige Zustand erscheint eher als bug denn als feature.)
  110. </simpara>
  111. </listitem>
  112. <listitem>
  113. <simpara>
  114. Erweiterung von Babel um die "Schleifenbits", oder Verallgemeinerungen davon.
  115. </simpara>
  116. </listitem>
  117. </itemizedlist>
  118. </para>
  119. </listitem>
  120. </itemizedlist>
  121. </entry>
  122. </row>
  123. <row>
  124. <entry>
  125. dDHCP (verteiltes DHCP)
  126. </entry>
  127. <entry>
  128. Laborbetrieb (bewohnbar;)
  129. </entry>
  130. <entry>
  131. <itemizedlist>
  132. <listitem>
  133. <simpara>
  134. In der jetzigen (extrem gebaumarkteten) Implementierung eines <ulink url="/Technik/Routing/Fragen#verteiltes-dhcp-durch-routing">durch Routinginformationen vermittelten dDHCP</ulink> fehlt noch die Konfliktauflösung nach Partitionierungen einer IGP-Kopplung. Dafür sollte zunächst ein geeigneter, d.h. insb. verteilter Entscheidungsalgorithmus formuliert werden, der (zB durch ein totale Ordnungsrelation auf den dDHCP-Routen der IGP-Kopplung) regelt, welche lease gültig bleibt und welche lease(s) von den entsprechenden dDHCP-Servern (Routern) autonom verworfen werden müssen. Das resultierende Verfahren könnte mit der Konvergenzgeschwindigkeit des Routings nach dem Wegfall einer Partitionierung den dDHCP-Adressbereich wieder konfliktfrei machen - wenn da nicht die Gültigkeitsspanne der ausgebenen leases wäre. Falls also globale Partitionierungen in einer konkreten IGP-Kopplung ein reales Problem darstellen, sollte die lease time möglichst klein gewählt werden, um die Auswirkungen auf die von IP-Adresskonflikten betroffenen clients zu minimieren, wg. "betroffen" = "keine Connectivity über den AP hinaus", also der GAU für den client.
  135. </simpara>
  136. </listitem>
  137. <listitem>
  138. <para>
  139. ISC-dhcpd attitude readjustment:-) Für die zZ implementierte Nutzung des ISC-dhcpd für dDHCP waren unschöne Workarounds nötig, die durch vmtl. kleine Eingriffe (patches) vermieden werden könnten, was auch seriöseren Implementierungen eines dDHCP-mit-ISC-dhcpd nutzen könnte.
  140. <itemizedlist>
  141. <listitem>
  142. <simpara>
  143. Mehr Informationen über eine lease an die getriggerten (on commit/on expiry) Skripte oder Daemons übergeben, die sich dann um das "d" in "dDHCP" kümmern.
  144. </simpara>
  145. </listitem>
  146. <listitem>
  147. <simpara>
  148. Bessere Abfragemöglichkeiten für leases und host entries in der lease DB.
  149. </simpara>
  150. </listitem>
  151. </itemizedlist>
  152. </para>
  153. </listitem>
  154. <listitem>
  155. <simpara>
  156. Entwicklung eines Daemons, der zwischen Bird und ISC-dhcpd vermittelt und die jetzigen Shell-Skripte (sic!) für das dDHCP ablöst. Dann könnten auch Caching (gegen Wackelkontakte im Routing) und Konfliktauflösung (gegen die Auswirkungen von globalen Partitionierungen, s.o.) leichter implementiert werden.
  157. </simpara>
  158. </listitem>
  159. <listitem>
  160. <simpara>
  161. Alternativ zu allem obigen könnte man auch einen eigenständigen dDHCPd versuchen (zB <ulink url="/Technik/Routing/Fragen#verteiltes-dhcp-im-mesh">pyddhcpd</ulink>, <ulink url="https://git.toppoint.de/sargon/ddhcpd/">ddhcpd</ulink>) oder selbst entwickeln. Gegen Letzteres spricht der Aufwand, das Rad neu zu erfinden, und für dDHCP mit ISC-dhcpd spricht die Verbreitung des ISC-dhcpd, die eine oft leichte Integrierbarkeit des dDHCP in bestehende Umgebungen verspricht. Außerdem kann der ISC-dhcpd auch Einiges, was es FF-Routernutzerinnen (m/w) erleichtert, DHCP-bezogene Spezialaufgaben vor Ort mit einem Standard-FF-Router und ohne Installation eines weiteren DHCPd zu lösen.
  162. </simpara>
  163. </listitem>
  164. </itemizedlist>
  165. </entry>
  166. </row>
  167. <row>
  168. <entry>
  169. Konfiguration
  170. </entry>
  171. <entry>
  172. Laborbetrieb (bewohnbar;)
  173. </entry>
  174. <entry>
  175. <itemizedlist>
  176. <listitem>
  177. <para>
  178. Format(e) für Konfigurationen.
  179. <itemizedlist>
  180. <listitem>
  181. <simpara>
  182. Die jetzige Implementierung (im Stil der Oldowan-Kultur) mit awk und sed reicht für das Aufsetzen von Standardroutern, die sich nur bzgl. RouterID und den resultierenden Adressen (IP und MAC) unterscheiden. Die Konfiguration für einen Router generiert dieser Router selbst mit Hilfe der o.g. Faustkeile aus einem generischen tarball, welcher Konfigurationstemplates und Shell-Skripte für diesen Zweck enthält. Die Konfigurationstemplates sind statisch und enthalten konstante Makrostrings, woraus das Generieren der konkreten Konfiguration mit sed und einem generierten sed-Skript erfolgt. Einige lokale Anpassungen der Routerkonfiguration können per rc.conf erfolgen, andere über eigene Konfigurationsdateien, welche die generierten default Konfigurationen ersetzen können, ohne erstere zu löschen (dank einer Oldowan-symlink-Methode). Das ist zwar etwas mühsam, aber für die endlich vielen Router eines Laborbetriebs ausreichend. Was auf dieser Ebene initialer Konfiguration zZ noch fehlt, ist die Generierung von Tinc-Nachbarschaften über Connect-To Einträge in allen tinc.conf Dateien der zZ drei Tinc-Instanzen eines Routers.
  183. </simpara>
  184. </listitem>
  185. <listitem>
  186. <simpara>
  187. Diese primitive Mechanik ist dahin weiterzuentwickeln, dass die Konfigurationstemplates selbst aus semantischen Konstanten (Hardware-Kennungen, Benutzerinput, ...) erzeugt werden. Dazu dürfen nur Bordmittel des Router-Images benutzt werden und die Entwicklung muss mindestens ermöglichen, dass der Router ans Netz kommt, seinen Job als Router macht, wartbar bleibt, und "höhere" Konfigurations- und Installationsmechaniken bootstrappen kann.
  188. </simpara>
  189. </listitem>
  190. <listitem>
  191. <simpara>
  192. Ein Verteilungssystem für die Konfigurationsmechanik ist zu entwickeln. Nur Bordmittel, aber incl. einer minimalen Versionsbehandlung, die für automatische oder ferngetriggerte Aktualisierungen der Basiskonfiguration(smechanik) ausreicht. Das Verteilungssystem sollte im Geiste der IGP-Kopplung auch selbst ein verteiltes System sein.
  193. </simpara>
  194. </listitem>
  195. <listitem>
  196. <simpara>
  197. Für die o.g. "höhere" Konfigurations- und Installationsmechanik sollte ein möglichst abstraktes Konfigurationsformat entwickelt werden, das mächtig genug ist, alle relevanten Schemata bedienen zu können. Eine gelungene Abstraktion erleichtert die Integration neuer Konfigurationen und die Portierung auf weitere Betriebssysteme. Um diese Abstraktheit zu erreichen wird vmtl. eine DSL (domain specific language) gebraucht.
  198. </simpara>
  199. </listitem>
  200. </itemizedlist>
  201. </para>
  202. </listitem>
  203. <listitem>
  204. <simpara>
  205. UI (Benutzerinterface) für die o.g. Konfigurationen. D.h. sowohl für Basiskonfigurationen als auch für "höhere" Konfigurationen, zunächst als Konsolentool, später zusätzlich als Webinterface. Das Konsolentool sollte im initialen Router-Image enthalten sein (Bordmittel). Im fortgeschrittenen Stadium sollte die UI selbst passend zu den Konfigurationen generierbar sein.
  206. </simpara>
  207. </listitem>
  208. <listitem>
  209. <simpara>
  210. Dokumentation der Konfigurationen und ihrer Bedeutungen, sowie des UI. Die Doku für die Basiskonfigurationen sollte im initialen Router-Image enthalten sein (Bordmittel:). Modulares und generierungsfreundliches Dokumentationsformat, zur leichteren Erweiterung (neue Konfigurationen) und Portierung.
  211. </simpara>
  212. </listitem>
  213. </itemizedlist>
  214. </entry>
  215. </row>
  216. </tbody>
  217. </tgroup>
  218. </table>
  219. </article>