Frankfurt:IP Konzept

Aus wiki.freifunk.net
(Weitergeleitet von Frankfurt-ip-Konzept)
Zur Navigation springenZur Suche springen

Allgemeines

Sowohl IPv4 als auch IPv6 werden im Freifunk Frankfurt genutzt. Alle Clients sind in einem IPv4-Netz. Alle physischen Server sind direkt über Batman miteinander verbunden. Sofern auf einer physischen MAschine LXC-Container ausgeführt werden, wird das im host liegende batman-Interface über eine batbridge auch allen Containern zur Verfügung gestellt.

Innerhalb des Freifunk gibt es eine eigene Namensauflösung mit der domain .ffffm

Ressourcen:

IPv4-Aufbau

  • Frankfurt hat den IPv4 Bereich 10.126.0.0/16
  • Jeder Supernode erhält eine statische IPv4-Adresse.
  • Clients und Server befinden sich in der selben Broadcast-Domäne.
  • Der in der Tabelle angegebene IP Adressbereich wird je fastd-Server an clients vergeben (mit Ausnahme der ersten 9 IP-Adressen je /21er Bereich. Diese sind reserviert für in diesem Netzsegment genutzte Infrastruktur
  • Auf jedem Supernode läuft ein Dhcp-Server, der die IPv4-Adressen an die Clients vergibt. Der Dhcp auf Supernode a (a ist Element N+, a kleiner 8) arbeitet für das Netz 10.126.(8*(a-1).0/16. Daraus ergibt sich folgende Adressbereichzuordnung:
  • statischer Bereich für clients: 10.126.254.0/24. Die Verwaltung erfolgt per

wiki in der Tabelle unten.

  • Serverbereich: 10.126.255.0/24


Supernode eigene IP Start DHCP-Pool Ende DHCP-Pool
fastd1 10.126.0.3 10.126.0.10 10.126.7.255
fastd2 10.126.8.1 10.126.8.10 10.126.15.255
fastd3 10.126.16.1 10.126.16.10 10.126.23.255
fastd4 10.126.24.1 10.126.24.10 10.126.31.255
fastd5 10.126.32.1 10.126.32.10 10.126.39.255
fastd6 10.126.40.1 10.126.40.10 10.126.47.255
fastd7 10.126.48.1 10.126.48.10 10.126.55.255
fastd8 10.126.56.1 10.126.56.10 10.126.63.255
fastd9 10.126.64.1 10.126.64.10 10.126.71.255
fastd10 10.126.72.1 10.126.72.10 10.126.75.255
fastd11 10.126.76.1 10.126.76.10 10.126.80.255
fastd12 10.126.81.1 10.126.81.10 10.126.84.255
fastd13 10.126.85.1 10.126.85.10 10.126.88.255
proxy.bb.ffm.freifunk.net 10.126.255.6
datalxc.ffm.freifunk.net 10.126.255.12
Igors neuer DL-Server 10.126.255.20
hopglass.ffm.freifunk.net 10.126.255.30
host statische IP(s)
Magnus' Testhost 10.126.254.254
Thomas' Testhost 10.126.254.253
Jürgen 10.126.254.222
Benjamin (WBS) 10.126.254.150-165
Igors Streaming Server 10.126.254.122
Igors Lap 10.126.254.102
Igors Webserver 10.126.254.101
Igors Server Gateway 10.126.254.100
Thomas W. 10.126.254.42


  • Server werden per fastd ebenfalls an Supernodes angebunden und mit festen Ip-Adressen Absteigend in 10.126.255.0/24 angelegt
  • Für diese Server werden die Ip-Adressen statisch vergeben. Namensauflösung wird über die beiden Dns-Server eingerichtet.
  • Die Namensauflösung für die Domain .ffm.freifunk.net liegt bei Hurricane Electric

Dokumentation Serveraufbau

allgemeine Mechanismen

Alle Server sind nach folgendem Schema aufgebaut:

  • Debian Wheezy
  • Security Updates werden automatisch eingespielt
  • Alle Server sind im backbone-Netz 10.126.255.0/24 und werden innerhalb des Freifunk adressiert
  • automatische Überwachungsmails, werden an root von mail.ffm.freifunk.net

verschickt (Steuerung des entgültigen Empfängers über aliases-file).

  • Als Smarthost wird mail.ffm.freifunk.net genutzt.
  • Die Grundlage zum Setup aller Server wird durch Puppet-Scripte gelegt. Es gibt zwei Ausprägungen: Supernode.pp und lxchost.pp
  • Security updates von debian security per cron-apt werden automatisch installiert.
  • Postfix wird als MTA genutzt (weil exim nicht automatisch mails an user@[IP-Adresse] weitergibt).
  • Alle Server werden über ein per fwbuilder konfigurierte Firewall gesichert. Die Quelldaten dazu liegen in der Technikecke im Seafile-Share. Dort werden auch Portweiterleitungen konfiguriert
  • Zugang zu den Servern ist ausschließlich per ssh-key möglich
  • Daten liegen immer unter /var/data/

LXC

LXC-Hosts exportieren zwei Netzwerkinterfaces in jeden Container:

  1. eine host-only Schnittstelle im Netz 192.168.100.*/24
  2. ein in die batbridge gebridgetes Netzwerkinterface über das die Container und einer IP in 10.126.255.0/24 direkt mit dem Freifunk verbunden werden

LXC-Container lassen sich mit lxc-create -t freifunk -n "SERVERNAME.ffm.freifunk.net" anlegen und danach mit lxc-start -d -n "SERVERNAME.ffm.freifunk.net" starten. Das freifunk-template erstellt eine debian-wheezy-Maschine. Danach sind folgende manuellen Schritte erforderlich:

  1. Die Netzwerkkonfiguration des Containers für die beiden interfaces
    1. Zuweisung einer unique MAC-Adresse für beide interfaces
    2. Zuweisung einer freien IP-Adresse im Serverbereich des Freifunknetzes und im lokalen Klasse-C-Netz
  2. Einrichtung des DNS A-Records in .ffffm
  3. Eintragung des hostname.bb.ffm.freifunk.net-A-Records in http://dns.he.net
  4. Anpassung der Firewall mit fwbuilder (seafile-Technikgruppe) für Port-Weiterileitung des ssh-Ports und Ports der benötigten Dienste.
  5. cp /root/.ssh/authorized_keys NEUER-PUPPET-CONTAINER/roots/root/.ssh
  6. Installation von puppet und git im Container und Einrichtung der grundlegenden Dienste
    1. apt-get install puppet git
    2. cd /etc/puppet/; rm -rf modules ;git clone http://github.com/freifunk-ffm/supernode_puppet modules; cd modules
    3. puppet apply lxchost.pp
    4. In der Ausgabe das mail-Passwort heraussuchen und auf dem Mailserver anmelden. Dort doveadm -sssha ausühren und das Ergebnis in /etc/dovecot/passwd eintragen

DataFabrik

  • Hostname datalxc.ffm.freifunk.net, fastd2.ffm.freifunk.net
  • Nutzung: enthält die oben genannten 3 VMs für Freifunk
  • Zugang: Jan

LXC-Host

hostname: datalxc.ffm.freifunk.net Zugang: Jan, Markus, Christof

Hosting von:

  • register - abgeschaltet
  • seafile
  • radicale
  • backup (bacula)
  • proxy2
  • otrs
  • oc - deaktiviert

register.ffm.freifunk.net

Container für den Registrierungsserver. Der Container ist unter register.bb.ffm.freifunk.net im Backbone erreichbar. Hier läuft Apache mit einer Ruby-Anwendung, welche die Webseite des Registrierungsportals erzeugt. -- abgeschaltet --

seafile.ffm.freifunk.net

Dateiablage für Vereinsarbeit und Vorstand.

radicale.ffm.freifunk.net

Das ist eine radicale-Instanz. Rechteverwaltung gibt es in /etc/radicale/rights, Userzugriff per htpasswd in /etc/radicale/radicale.passwd. Die Collections liegen in /var/lib/radicale/collections

oc.ffm.freifunk.net

Das ist eine Owncloud-Installation um die Projektkoordination zu vereinfachen und Todo-Listen, Daten und Kalender zu teilen. -- abgeschaltet --

yacy Suchmaschine

Hostname: yacy.ffm.freifunk.net, search.ffffm yacy.bb.ffm.freifunk.net Zugang: Jan, Markus, Michael, Christof -- abgeschaltet --

Supernode

Hostname: fastd2.ffm.freifunk.net Zugang: Jan, Markus, Christof

Die VM ist vollständig mittels Puppet-Script aufgebaut.

Uberspace

Hostname: uber.ffm.freifunk.net - 95.143.172.233, uber.bb.ffm.freifunk.net Ausstattung: 1GB Ram, 2 CPUs, 20GB HDD Zugang haben: Markus, Magnus, Jan und Christof. Kontakt: hallo at uberspace. de

Es ist vereinbart, dass der Durchsatz am Tag (10 Uhr Morgens bis 2 Uhr Nachts) auf 5 Mbit/s beschränkt ist. Nachts wird die Beschränkung auf 50mbit/s gelockert. Diese Anforderung ist durch ein entsprechendes Trafficshapingscript umgesetzt.

Der Server ist mit Hilfe von LXC weiter partitioniert. Die Container liegen im 192.168.1.0/24 Netz und sind lokal über die in diesem Netz oder im Backbone-Netz liegenden Adressen erreichbar.

Direkt auf dem Server läuft alfred.

  • Hier läuft das backend der ffmap. Das fertige nodes-file wird per scp zum mapserver kopiert. Der Batman abzug wird alle 5 Minuten per Cron erzeugt, das Nodes-File ebenfalls per cron. Die Applikation liegt in /srv/ffmap-backend. Zum betrieb ist alfred-json, batadv-vis und alfred erforderlich. alfred und batadv-vis werden im on-up-script von fastd nach batman gestartet.


Die Maschine führt folgende lxc-Container aus

  • database.ffm.freifunk.net - abgeschaltet
  • dns.ffm.freifunk.net
  • inetgw.ffm.freifunk.net
  • mail.ffm.freifunk.net
  • map.ffm.freifunk.net
  • proxy.ffm.freifunk.net
  • stats.ffm.freifunk.net

mail.ffm.freifunk.net

Das ist der Mailserver. Den haben wir, damit wir an einer Stelle Mailregeln und Empfänger aller systemgenerierten Mails steuern können. Der Container ist unter mail.bb.ffm.freifunk.net im Backbone erreichbar.

build.ffm.freifunk.net

In diesem Container sind Build-Tools installiert. Gegebenenfalls kann diese später als Buildserver für Firmwares oä genutzt werden. Bislang geht es um den Bau von Paketen, die für andere Container kompiliert werden müssen und darum, eine Sandbox zu haben. Der Container ist unter build.bb.ffm.freifunk.net im Backbone erreichbar. -- abgeschaltet zur Lastreduktion

database.ffm.freifunk.net

In diesem Container läuft eine postgresql-Instanz, die für den Registrierungsserver genutzt wird. Der Container ist unter database.bb.ffm.freifunk.net im Backbone erreichbar. -- abgeschaltet --

proxy.ffm.freifunk.net

Hostname: proxy.ffm.freifunk.net proxy.bb.ffm.freifunk.net

  • Hier läuft ein Apache, der die ssl-Verbindung für *.ffm.freifunk.net terminiert und die Weiterleitung auf den richtigen Server durchführt. Der Apache enthält mehrere vhosts, unter Anderem für dl.ffm.freifunk.net.
  • /var/www/files/ffm/firmware wird per rsync exportiert.
  • Ein seafile-Client synchronsisiert die Daten aus /var/www/files/public /var/www/files unter dl.ffm.freifunk.net exportiert
  • Auf dem Proxy wird gemeinsam mit dem anderen statischen Content die inetgw-Infopage gehostet:
mkdir -p /srv/map.ffm.freifunk.net/infopage
cat >>/srv/map.ffm.freifunk.net/infopage/index.txt<<EOF
#-------------------
#bgp-server Frankfurt1
#-------------------

#ping ip to check if the network behind IC-VPN server is reachable. IP should be one from network and
#not from the transfer net (10.207.x.y), because this is already known to each IC-VPN Server
ping_ip=10.126.255.1

#topology url to retrieve the network dot-topology from (seen from same node). Allows to
#create a global freifunk graph.
topo_url=http://10.207.0.35/infopage/icvpn-graph.dot

#to build a global network graphic from each dot-file (defined by topo_url), a "port" must be specified.
#"port" is the server or node that represents the network gateway (router).
#The string that is specified here is the name of the node in the dot-file that is the router that routes the
#traffic in to the city network. 
# ... DD_Node ---- BGB_Router ----- IC_VPN ---- BGB_Router --- Augsburg_Node ....
topo_dot_port="10.207.0.35" 

#internal web portal that may be different to the public city freifunk internet presence.
#it is only reachable from within the city networks.
portal_ip=10.207.0.35

#public web portal host. This is reachable from internet.
public_portal_url=http://ffm.freifunk.net/
EOF
cat >>/etc/apache2/conf.d/infopage <<EOF
 <Location /infopage >
 Options +Indexes
 DirectoryIndex index.txt
 </Location>
EOF
/etc/init.d/apache2 reload

map.ffm.freifunk.net

Auf diesem Server läuft das Frontend und das Backend der ffmap in einem Apache. Der Container ist unter map.bb.ffm.freifunk.net im Backbone erreichbar.

apt-get install apache2
mkdir -p /srv/map.ffm.freifunk.net
cd /srv/map.ffm.freifunk.net
git clone https://github.com/freifunk-ffm/ffmap-d3.git

Der Apache muss zusätzlich konfiguriert werden:

cat >>/etc/apache/sites-enabled/000-default<<EOF
<VirtualHost *:80>
 ServerAdmin webmaster@localhost

 DocumentRoot /srv/map.ffm.freifunk.net
 <Directory />
   Options FollowSymLinks
   AllowOverride None
 </Directory>

 RedirectMatch /$ http://map.ffm.freifunk.net/ffmap-d3/geomap.html
 ErrorLog ${APACHE_LOG_DIR}/error.log

 # Possible values include: debug, info, notice, warn, error, crit,
 # alert, emerg.
 LogLevel warn
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF
/etc/init.d/apache2 restart


Das Setup des Backends auf uber.bb.ffm.freifunk.net ist wie folgt:

apt-get install python3 rrdtool
echo /usr/sbin/batctl vm server >> /etc/fastd/mesh-vpn/fastd-up

cat >>/etc/cron.d/map-backend<<EOf
10 0/2 * * *	root /usr/bin/wget -q -nv -O /srv/ffmap-backend/registerNodes.json http://10.126.255.7/nodes.json 
* * * * *	root /srv/ffmap-backend/mkmap.sh /tmp
EOF

inetgw.ffm.freifunk.net

Container für das Routing des Traffic ins ICVPN. Der Container ist unter inetgw.bb.ffm.freifunk.net im Backbone erreichbar. Routing ins Internet findet nicht statt.

stats.ffm.freifunk.net

Alle Server im Backbone werden per collectd überwacht. Der Container ist unter stats.bb.ffm.freifunk.net im Backbone erreichbar. Die Erzeugung der Graphen wird durch CGP übernommen. <rev> apt-get install libapache2-mod-php5 </rev> Munin ist für Installationen dieser Größe nicht geeignet.

cat >>/etc/apache/sites-enabled/001-stat<<EOF

<VirtualHost *:80>

 ServerAdmin webmaster@localhost

ServerName sstats.ffm.freifunk.net ServerAlias sstats.ffm.freifunk.net

 DocumentRoot /var/www/sstats.ffm.freifunk.net
 <Directory /var/www/sstats.ffm.freifunk.net>
     Allow from all
     Options -MultiViews
 </Directory>
 ErrorLog ${APACHE_LOG_DIR}/error.log
 # Possible values include: debug, info, notice, warn, error, crit,
 # alert, emerg.
 LogLevel warn
 CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

EOF

mon_serv

auf stats.bb.ffm.freifunk.net:

apt-get install libsqlite3-dev rake sqlite3 build-essential libapache2-mod-passenger apache2 
apt-get install ruby rdoc ruby-dev libpq-dev libopenssl-ruby rubygems
gem install fastthread
gem install rails
gem install activerecord-postgresql-adapter
mkdir -p /srv/stats.ffm.freifunk.net
cd /srv/stats.ffm.freifunk.net
git clone https://github.com/freifunk-ffm/mon_serv.git
cd mon_serv
export RAILS_ENV=production
cat >> /srv/stats.ffm.freifunk.net/mon_serv/config/database.yml <<EOF
development:
 adapter: sqlite3
 database: db/development.sqlite3
 pool: 5
 timeout: 5000

test:
 adapter: sqlite3
 database: db/test.sqlite3
 pool: 5
 timeout: 5000

production:
   adapter: postgresql
   encoding: utf8
   reconnect: false
   database: monserv
   pool: 5
   username: USER
   password: PASSWORD
   host: db.bb.ffm.freifunk.net
EOF

editiere Nutzer und Passwort für Datenbank, danach Installation

vim config/database.yml
bundle install
bundle exec rake db:setup # Nur ausführen, wenn die DB auch WIRKLICH leer ist!

Der Dienst wird durch den register aufgerufen, sobald ein Node angelegt wird (unabhängig vom registrieren!) Nach dem Setup der Datenbank muss der Datentyp der id-Spalte für die Tabelle nodes und users auf bigint geändert werden!

su - postgres
psql -U monserv -W -d monserv -h db.bb.ffm.freifunk.net
alter table nodes alter column id set data type bigint ;
alter table users alter column id set data type bigint ;

Hinterher noch ein:

bundle exec rake assets:precompile
/etc/init.d/apache2 stop
/etc/init.d/apache2 start

Collectd

Wir arbeiten in Version 5 mit folgender Konfiguration: cat >>/etc/collectd/collectd.con <<EOF

FQDNLookup true
LoadPlugin syslog
<Plugin syslog>
 LogLevel "info"
</Plugin>
LoadPlugin interface
LoadPlugin network
LoadPlugin ping
LoadPlugin rrdtool
LoadPlugin users
<Plugin network>
Listen "fddd:5d16:b5dd:2::1" "25827"
Listen "10.126.255.8" "25826"
Listen "192.168.100.116" "25827"
</Plugin>
<Plugin rrdtool> 
 DataDir "/var/lib/collectd/rrd"
</Plugin>
Include "/etc/collectd/filters.conf"
Include "/etc/collectd/thresholds.conf"
Include "/etc/collectd/mesh-conf/ping.conf"
EOF


Es gibt zwei Custom-Plugins, die in diesem collectd-Server ausgeührt werden.

  • Das NEtzgrößenplugin arbeitet ermittelt per exec-Mechanismus die Netzgröße und Anzahl der verbundenen vpn-hosts über die json-files aus der map
  • Das Batman-Plugin ist in C geschrieben, verwendet eigene collectd-Datentypen und eigenen Code. Der Checkout aus dem git liegt in /root

DNS

Hier läuft ein bind für die Domain .ffffm

IPv6-Aufbau

Auf dem fastd-Server läuft ein radvd, der das Netz fddd:5d16:b5dd/64 und 2001:1A50:11:4::1/64 announced. Die ping-Statistiken vom stats.ffm.freiunk.net werden über die link-local adressen erzeugt. Inbound-IPv6 über den Uberspace-Host möglich. Outbound IPv6 wird nicht zugelassen, weil wir dafür keine VPN-Tunnel haben.