Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ffbs/ffbs-website
  • darkbit/ffbs-website
2 results
Show changes
Commits on Source (205)
Showing
with 266 additions and 454 deletions
testbed:
stage: deploy
only:
- /^testbed*$/i
build:
stage: build
image: python:3.9
tags:
- docker
script:
- cd flamingo
- make env
- echo $CI_COMMIT_REF_SLUG > REF_SLUG
- make html
- touch /var/www/testbed/htdocs/foo
- rm -r /var/www/testbed/htdocs/*
- cp -r output/* /var/www/testbed/htdocs/
- chmod go+r -R /var/www/testbed/htdocs/*
artifacts:
paths:
- flamingo/output
- contact
expire_in: 1 week
deployment:
stage: deploy
tags:
- ffbs-deploy-frido
only:
refs:
- master
- /^testbed/i
variables:
- $CI_PROJECT_PATH == "ffbs/ffbs-website"
script:
- rm -r /var/www/website/$CI_COMMIT_REF_SLUG/*
- cp -r flamingo/output /var/www/website/$CI_COMMIT_REF_SLUG/htdocs
- cp -r contact /var/www/website/$CI_COMMIT_REF_SLUG/contact
- chmod go+r -R /var/www/website/$CI_COMMIT_REF_SLUG/*
This website is licensed unter CC0:
https://creativecommons.org/publicdomain/zero/1.0/deed.de
By contributing to this repository you agree to license your
work the same license.
File deleted
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import re
import subprocess
cgitb.enable()
NAME_PATTERN = '^[a-zA-Z0-9-_\. äÄöÖüÜß]+$'
CODE_PATTERN = '^[a-zA-Z0-9]{64}$'
KEY_DIR='/home/kasalehlia/keys/'
KEY_SCRIPT = '/home/kasalehlia/bin/ffbs_keys'
GIT_DIR = '/home/kasalehlia/peers'
print "Content-Type: text/html;charset=utf-8"
print ""
form = cgi.FieldStorage()
try:
name = form['name'].value
code = form['code'].value
if re.match(NAME_PATTERN, name) and re.match(CODE_PATTERN, code) and name not in ['.','..']:
with open(KEY_DIR+'codes/'+code, 'r') as f:
validate = f.read()
if validate == name:
try:
print subprocess.check_output([KEY_SCRIPT, 'approve', name])
_ = subprocess.check_output(['/usr/bin/git', 'pull'], cwd=GIT_DIR)
_ = subprocess.check_output(['/usr/bin/git', 'add', 'peers/'+name], cwd=GIT_DIR)
_ = subprocess.check_output(['/usr/bin/git', 'commit', '-m', 'automated commit'], cwd=GIT_DIR)
_ = subprocess.check_output(['/usr/bin/git', 'push'], cwd=GIT_DIR)
except subprocess.CalledProcessError as e:
print e.output
else:
print "invalid request"
else:
print "invalid request"
except Exception as e:
print "Die Anfrage ist ungültig"
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import re
import smtplib
import uuid
import datetime
from email.mime.text import MIMEText
from subprocess import Popen, PIPE
cgitb.enable()
CONTACT_EMAIL_TO = 'kontakt@freifunk-bs.de'
EMAIL_REGEX = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
print "Content-Type: text/html"
print ""
template = """<meta charset="utf-8">\n%s<br>\n<a href="/kontakt.html">zurück</a>"""
form = cgi.FieldStorage()
try:
email = form['email'].value
if not re.match(EMAIL_REGEX, email):
raise ValueError()
message = form['message'].value
captcha = form['captcha'].value
captcha = captcha.replace("'", "")
captcha = captcha.replace('"', "")
captcha = captcha.strip()
today = str(datetime.datetime.now().day)
if today == captcha:
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = "kontakt@freifunk-bs.de"
msg['To'] = CONTACT_EMAIL_TO
msg['Subject'] = 'Kontaktanfrage von %s' % email
msg['Reply-To'] = ','.join([email,CONTACT_EMAIL_TO])
uuid = str(uuid.uuid4()) #get a random uuid
msg['Message-ID'] = '<'+uuid+'@freifunk-bs.de>'
p = Popen(["/usr/sbin/sendmail", "-t", "-oi", "-FKontaktformular"], stdin=PIPE)
p.communicate(msg.as_string())
print template % "Ihre Nachricht wurde entgegengenommen"
else:
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = "kontakt@freifunk-bs.de"
msg['To'] = CONTACT_EMAIL_TO
msg['Subject'] = '[CAPTCHA]Kontaktanfrage von %s' % email
msg['Reply-To'] = ','.join([email,CONTACT_EMAIL_TO])
uuid = str(uuid.uuid4()) #get a random uuid
msg['Message-ID'] = '<'+uuid+'@freifunk-bs.de>'
msg['X-FFBS-CAPTCHA'] = "Failed: User tried: {}; I expected: {}".format(captcha, today)
p = Popen(["/usr/sbin/sendmail", "-t", "-oi", "-FKontaktformular"], stdin=PIPE)
p.communicate(msg.as_string())
print template % "Der Spamschutz wurde nicht erfolgreich ausgefüllt. Bitte versuchen Sie es erneut."
except Exception as e:
print template % "Die Anfrage ist ungültig"
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import re
import subprocess
cgitb.enable()
NAME_PATTERN = '^[a-zA-Z0-9-_\. äÄöÖüÜß]+$'
CODE_PATTERN = '^[a-zA-Z0-9]{64}$'
KEY_DIR='/home/kasalehlia/keys/'
KEY_SCRIPT = '/home/kasalehlia/bin/ffbs_keys'
print "Content-Type: text/html"
print ""
form = cgi.FieldStorage()
try:
name = form['name'].value
code = form['code'].value
if re.match(NAME_PATTERN, name) and re.match(CODE_PATTERN, code) and name not in ['.','..']:
with open(KEY_DIR+'codes/'+code, 'r') as f:
validate = f.read()
if validate == name:
try:
print subprocess.check_output([KEY_SCRIPT, 'deny', name])
except subprocess.CalledProcessError as e:
print e.output
else:
print "invalid request"
else:
print "invalid request"
except Exception as e:
print template % "Die Anfrage ist ungültig"
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import datetime
import json
SECRET = "ahqu2Choshi7sahDme8aePh4iegh8Wee"
print "Content-Type: text/html"
print ""
params = cgi.FieldStorage()
if 'secret' in params and params['secret'].value == SECRET:
info = dict()
info['updated'] = datetime.datetime.now().isoformat()
for i in xrange(100): # be prepared for many gateways
key = "gw"+str(i).zfill(2)
if key in params:
try:
info[key] = int(params[key].value)
except ValueError: # value is not a number
pass
print "accepted status for "+str(len(info))+" gateways"
with open('/home/kasalehlia/ffbs-website/gatewaystatus.json','w') as f:
json.dump(info, f)
else:
print "nothing to see here"
#!/usr/bin/env python2
# coding=utf-8
import cgi
import cgitb
import os
import random
import re
import smtplib
import string
import time
from email.mime.text import MIMEText
from subprocess import Popen, PIPE, check_output, CalledProcessError
cgitb.enable()
KEY_DIR='/home/kasalehlia/keys/'
CONTACT_FILE='/home/kasalehlia/contacts.txt'
KEY_PATTERN = r'# ([a-zA-Z0-9-_\. äÄöÖüÜß]+) ?#? ?([\S ]+)?\r?\n([0-9a-f]{64})$';
#KEY_PATTERN = r'# ([\w.- ]+) ?#? ?([\S ]+)?\r?\n([0-9a-f]{64})$';
EMAIL_FROM = 'keys@freifunk-bs.de'
EMAIL_TO = 'ffbs-admin@stratum0.org'
#EMAIL_TO = 'kasa@shakik.de'
EMAIL_TEXT = """Key approval request: {name} with key {key}.\n
To approve: http://www.freifunk-bs.de/approve_key?name={name}&code={code}\n
To deny: http://www.freifunk-bs.de/deny_key?name={name}&code={code}\n
\n`{quote}`"""
QUOTES = list(open('/home/kasalehlia/portal.quotes'))
print "Content-Type: application/json; charset=utf-8"
print ""
form = cgi.FieldStorage()
try:
inp = form['key'].value.strip()
contact = form.getfirst('contact','').strip()
match = re.match(KEY_PATTERN, inp)
if match:
name,_contact,key = match.groups()
name = name.strip()
if not contact:
contact = _contact
code = ''.join(random.choice(string.letters + string.digits) for _ in xrange(64))
if os.path.isfile(KEY_DIR+name):
print '{"success":false, "message":"Dieser Name oder dieser Schlüssel ist bereits eingetragen"}'
else:
try:
res = check_output(['/bin/grep','-r','--exclude-dir=codes',key,KEY_DIR])
except CalledProcessError as e:
res = e.output
if len(res):
print '{"success":false, "message":"Dieser Name oder dieser Schlüssel ist bereits eingetragen"}'
else:
with open(KEY_DIR+name,'w') as f:
f.write('key "%s";\n' % key)
with open(KEY_DIR+'/codes/'+code,'w') as f:
f.write(name)
with open(CONTACT_FILE, 'a') as f:
f.write('{},{},{},{}\n'.format(time.time(),key,name,contact))
#s = smtplib.SMTP('localhost')
if 'NOMAIL' not in name:
msg = MIMEText(EMAIL_TEXT.format(name=name.replace(' ', '%20'), key=key, code=code, quote=random.choice(QUOTES)[:-1]),'plain','utf-8')
msg['From'] = EMAIL_FROM
msg['To'] = EMAIL_TO
msg['Subject'] = 'Key approval request for %s' % name
#s.sendmail(EMAIL_FROM, [EMAIL_TO], msg.as_string())
#s.quit()
p = Popen(["/usr/sbin/sendmail", "-t", "-oi"], stdin=PIPE)
p.communicate(msg.as_string())
print '{"success":true, "message":"Dein Schlüssel wurde eingetragen, muss aber noch von einem Administrator bestätigt werden"}'
else:
print '{"success":true, "message":"debug input accepted"}'
else:
print '{"success":false, "message":"Die Eingabe ist fehlerhaft"}'
except Exception as e:
print '{"success":false, "message":"Die Eingabe ist fehlerhaft", "err":"'+repr(e)+'"}'
#raise e
aiohttp
#!/usr/bin/env python3
# coding=utf-8
from aiohttp import web
import asyncio
import re
import smtplib
import uuid
import datetime
from email.mime.text import MIMEText
from subprocess import Popen, PIPE
import logging
logging.basicConfig(level=logging.INFO)
CONTACT_EMAIL_TO = 'kontakt@freifunk-bs.de'
EMAIL_REGEX = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
template = """
<html>
<head>
<meta charset="utf-8">
</head>
<body>
%s<br>
<a href="/kontakt.html">zurück</a>
</body>
</html>
"""
async def handle(req):
logging.debug('Got a new request:')
form = await req.post()
logging.debug(f'Form data: {form}')
try:
email = form['email']
if not re.match(EMAIL_REGEX, email):
raise ValueError()
message = form['message']
captcha = form['captcha']
captcha = captcha.replace("'", "")
captcha = captcha.replace('"', "")
captcha = captcha.strip()
today = str(datetime.datetime.now().day)
if today == captcha:
logging.info('CAPTCHA successfull')
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = "kontakt@freifunk-bs.de"
msg['To'] = CONTACT_EMAIL_TO
msg['Subject'] = 'Kontaktanfrage von %s' % email
msg['Reply-To'] = ','.join([email,CONTACT_EMAIL_TO])
ruuid = str(uuid.uuid4()) #get a random uuid
msg['Message-ID'] = '<'+ruuid+'@freifunk-bs.de>'
p = Popen(["/usr/sbin/sendmail", "-t", "-oi", "-FKontaktformular"], stdin=PIPE)
p.communicate(msg.as_string().encode())
logging.info('Mail sent')
return web.Response(body = template % "Ihre Nachricht wurde entgegengenommen", content_type='text/html')
else:
logging.info('CAPTCHA NOT successfull')
return web.Response(body = template % "Der Spamschutz wurde nicht erfolgreich ausgefüllt. Bitte versuchen Sie es erneut.", content_type='text/html')
except Exception as e:
logging.exception('Request failed! Exception:')
return web.Response(body = template % "Die Anfrage ist ungültig", content_type='text/html')
app = web.Application()
app.add_routes([web.post('/contact', handle)])
if __name__ == '__main__':
web.run_app(app, host='0.0.0.0', port=7392)
# vim: expandtab:shiftwidth=4:softtabstop=4
[Unit]
Description=Provide our contact form backend
[Service]
Type=simple
Environment="PYTHONUNBUFFERED=1"
ExecStart=/var/www/website/venv/bin/python3 /var/www/website/master/contact/contact.py
Restart=always
RestartSec=60
StartLimitInterval=0
User=gitlab-runner
[Install]
WantedBy=multi-user.target
~
......@@ -3,25 +3,33 @@ PYTHON_VENV=env
PROJECT_ROOT=.
WEBSERVER_PORT=8080
WEBSERVER_HOST=localhost
WEBSERVER_HOST=0.0.0.0
FLAMINGO_OUTPUT=output
FLAMINGO_ARGS=-p $(PROJECT_ROOT)
FLAMINGO_ARGS=-s settings.py
FLAMINGO_SERVER_ARGS=$(FLAMINGO_ARGS) --port=$(WEBSERVER_PORT) --host=$(WEBSERVER_HOST)
all: server
# setup / clean ###############################################################
$(PYTHON_VENV)/.created:
$(PYTHON_VENV)/.created.deploy:
rm -rf $(PYTHON_VENV) && \
$(PYTHON) -m venv $(PYTHON_VENV) && \
. $(PYTHON_VENV)/bin/activate && \
pip install -r ./REQUIREMENTS.txt > $(PYTHON_VENV)/build.log 2>&1 && \
(date > $(PYTHON_VENV)/.created) || \
pip install --upgrade -r ./REQUIREMENTS-deploy.txt > $(PYTHON_VENV)/build.log 2>&1 && \
(date > $(PYTHON_VENV)/.created.deploy) || \
(echo "\e[31m"; cat $(PYTHON_VENV)/build.log; echo "\e[0m"; exit 1)
env: $(PYTHON_VENV)/.created
deployenv: $(PYTHON_VENV)/.created.deploy
$(PYTHON_VENV)/.created.full:
. $(PYTHON_VENV)/bin/activate && \
pip install --upgrade -r ./REQUIREMENTS-full.txt > $(PYTHON_VENV)/build.log 2>&1 && \
(date > $(PYTHON_VENV)/.created.full) || \
(echo "\e[31m"; cat $(PYTHON_VENV)/build.log; echo "\e[0m"; exit 1)
env: deployenv $(PYTHON_VENV)/.created.full
clean:
rm -rf $(FLAMINGO_OUTPUT)
......@@ -31,7 +39,8 @@ distclean:
# build #######################################################################
html: env
html: deployenv
. $(PYTHON_VENV)/bin/activate && \
flamingo build $(FLAMINGO_ARGS)
......
flamingo[full]
beautifulsoup4
Pillow
ipython==6
coloredlogs
flamingo[full]
beautifulsoup4
Pillow
ipython==6
coloredlogs
git+git://github.com/pengutronix/flamingo@master#egg=flamingo
beautifulsoup4==4.5.3
Pillow==4.3.0
ipython==6
coloredlogs
disabled: true
title: Mesh via Ethernet
Normalerweise verbinden sich Freifunkrouter über ein WiFi-adhoc-Netzwerk miteinander. In bestimmten Situationen können Ethernetverbindungen die Performanz und Verfügbarkeit des Freifunknetzwerks lokal verbessern.
Einige Anwendungsfälle, bei denen eine Vernetzung über ein Ethernetkabel sinnvoll sein kann:
* Über Kabel verbindbare Knoten meshen nicht oder nur unzureichend über WLAN.
* Die Situation vor Ort erlaubt es, eine Vernetzung über Kabel mit geringem Aufwand einzurichten.
* Ein Router mit einer leistungsstarken CPU soll die VPN-Verbindung zum Gateway für mehrere nahegelegene Freifunkrouter bereit stellen.
Für die Verkabelung bieten sich die Varianten [[#Mesh-on-WAN|Mesh-on-WAN]] und [[#Mesh-on-LAN|Mesh-on-LAN]] an. Im folgenden werden [[Hardware|Router]] mit aktueller [http://firmware.freifunk-bs.de/ Freifunk-Firmware] vorausgesetzt.
== Mesh-on-WAN ==
Mit dieser Methode werden Freifunkknoten über deren WAN-Buchsen vernetzt. WLAN und Kabel werden hierbei zumeist parallel zum Meshen verwendet. Welches Medium tatsächlich zur Datenübertragung genutzt wird, entscheidet der Routing-Algorithmus. Mesh-on-WAN und VPN-Uplink können gleichzeitig aktiviert werden.
Pros und Cons dieser Methode:
* Vergleichsweise einfache Konfiguration.
* Ein externer Switch ist notwendig. Eventuell vorhandende LAN-Buchsen am Freifunk-Router ersetzen nicht einen externen Switch.
* Ein DHCP-Server muss mit dem Switch verbunden sein.
Zunächst müssen die Router entsprechend konfiguriert werden. Das kann entweder mit dem Webbrowser im Konfigurationsmodus oder über SSH im Betriebsmodus geschehen.
=== Mesh-on-WAN im Konfigurationsmodus einrichten ===
Auf der Konfigurationsseite zur [[Einrichtung]] des Routers ist im Expertenmodus der Haken bei "Mesh auf dem WAN-Port aktivieren" zu setzen.
=== Mesh-on-WAN im Betriebsmodus einrichten ===
Nachdem eine [[SSH-Zugang|Verbindung über SSH]] hergestellt ist, sind auf folgende Zeilen einzugeben:
uci set network.mesh_wan.auto=1
uci commit network
Mesh-on-WAN kann mit folgenden Befehlen wieder deaktiviert werden.
uci set network.mesh_wan.auto=0
uci commit network
=== Mesh-on-WAN-Verkabelung ===
[[File:Mesh_on_wan.png|right|660px|Mesh-on-WAN]]
Die WAN-Buchsen der entsprechend konfigurierten Freifunkrouter werden über einen Switch miteinander verbunden. Vom Switch führt ein Kabel zu dem Heimrouter, der auch als DHCP-Server dient und eine Verbindung zum Internet zur Verfügung stellt. Ein Setup mit zwei Freifunkroutern (TL-WR1043NDv2, Nanostation M2) soll die Vernetzung exemplarisch veranschaulichen:
Die Freifunkouter meshen hier über Kabel (blau) und über adhoc-WLAN (gelb). Freifunk-Clients verbinden sich über WLAN (magenta). Die LAN-Buchsen am Freifunkrouter können ebenfalls als Client-Verbindung über Kabel (magenta) dienen. Der Heimrouter stellt einen Zugang zum Internet (schwarz) und jeweils einen DHCP-Server für das Heimnetz (grün) und das Gastnetz (blau) zur Verfügung.
<br clear=all/>
Sollte ein VLAN-fähiger Smart-Switch in der Vernetzung involviert sein, sind die vom Switch und Router verwendenten VLAN-ID zu überprüfen, damit es nicht zu ungewollten Überschneidungen kommt. So wird vom Smart-Switch die VLAN-ID 1 oft als Default- oder Management-VLAN verwendet, welches möglicherweise auch im Router konfiguriert ist.
Beispielsweise werden 1 (LAN) und 2 (WAN) als [http://wiki.openwrt.org/toh/tp-link/tl-wr1043nd#switch_ports_for_vlans VLAN-ID im TL-WR1043NDv2] verwendet.
=== Mesh-on-WAN überprüfen ===
<strike>In der [http://map.freifunk-bs.de/list.html Knotenliste] sollte der Wert in der Spalte "WLAN Links" für den Knoten (Anzahl der Wireless-Verbindungen)+(Anzahl der Mesh-on-WAN-Router am Switch)-1 betragen.</strike> ''(Anmerkung: Es scheint so, als ob die Knotenliste gelegentlich auch Verbindungen zu einem Gateway als Wireless-Verbindung zählt, so dass die Überprüfung anhand der Knotenliste nicht mehr eindeutig ist.)''
Nachdem eine [[SSH-Zugang|Verbindung über SSH]] hergestellt ist, sollte
batctl if
u.A. folgende Zeile zeigen:
br-wan: active
== Mesh-on-LAN ==
Mit dieser Methode werden Freifunkrouter über '''umkonfigurierte''' LAN-Anschlüsse verbunden.
Allerdings dürfen Freifunkrouter bislang nicht so ohne weiteres mit den LAN-Ports miteinander verbunden werden (siehe [https://github.com/freifunk-gluon/gluon/issues/173 Kommentar NeoRaider vom 7.9.2014]).
(TODO: Anleitung)
Pros und Cons dieser Methode:
* Dedizierte Buchsen am Freifunkrouter für Uplink (WAN), Meshing (umkonfigurierte/r LAN-Port/s) und eventuelle Clients (LAN).
* Unter Umständen kann auf einen externen Switch verzichtet werden, wenn mehrere LAN-Buchsen am Freifunkrouter zum Meshing genutzt werden können.
* Bislang keine Konfiguration über das Web-Interface.
* Aufwendiger in der Konfiguration, von der ohne spezielle Kenntnisse abzuraten ist.
== Weblinks ==
https://gluon.readthedocs.io/en/v2018.2.x/features/wired-mesh.html?highlight=mesh-on-wan Mesh on WAN @ Read the Docs, Gluon
disabled: true
title: SSH-Zugang
Man kann sich aus dem Freifunk-Netz per ssh auf dem eigenen Router einloggen.
=== Windows ===
In Config Menu des Routers muß hierzu entweder ein SSH Key oder ein Passwort hinterlegt werden - bevorzugt sollte ein SSH Key aufgrund der höheren Sicherheit Verwendung finden.
Unter Windows ist hierzu bspw. die Open Source SW [http://www.putty.org/ Putty] notwendig, welche [http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe hier] heruntergeladen werden kann.
=== Linux ===
Dazu muss im Konfigurationsinterface dein public key hinterlegt sein.
Die IP-Adresse deines Routers findest du heraus, indem du z. B. im Freifunk-Netz an alle Geräte via multicast pingst:
ping6 -c2 -i4 ff02::1%wlan0 #wenn du per wlan verbunden bist
ping6 -c2 -i4 ff02::1%eth0 #wenn du per ethernet verbunden bist
Dein Netzwerkinterface kann einen anderen Namen als ''wlan0'', oder ''eth0'' haben, den kannst du mit ''iwconfig'' herausfinden.
Du erhälst dann eine (schnell wachsende) Liste, das Gerät, was am schnellsten Antwortet (nicht unbedingt der erste Eintrag) – üblicherweise im niedrigen, einstelligen ms-Bereich – ist der Router, mit dem du gerade verbunden bist.
Die Link-Local-Adresse wird von der MAC des APs abgeleitet.
fe80::26a4:3cff:fe9e:2e99
gehoert also zum AP mit der MAC
24:a4:3c:9e:2e:99
Kopiere die IPv6-Adresse und logge dich ein:
ssh -6 root@ff80::xxxx:xx%wlan0
disabled: true
title: Statusseite
Knoten Statusseite
Ist dein Freifunkknoten einmal eingerichtet, gibt es nichts weiter zu konfigurieren oder zu tun. Ein Webinterface wie du es vielleicht von deinem Heimrouter kennst, gibt es bei einem Knoten nicht. Stattdessen gibt es eine Statusseite mit vielen interessanten Informationen:
http://node.ffbs
Für eine fehlerfreie Darstellung von der Seite bitte Cookies nicht von deinem Browser blockieren.
Die Statusseite:
Sie kann hilfreich sein, z.B. um deinen Router bessser zu positionieren und ein besseres Signal zu deinen anderen Nachbarknoten herstellen zu können.
Die Angabe in db gibt die Signalstärke an. Kleiner ist besser. -70 db ist besser als -80 db.
Das Signal ist von der Umwelt bedingt. D.h., das zu unterschiedlichen Zeiten, unterschiedliche Werte möglich sind. Typischerweise sind die Schwankungen nicht so groß.
TQ: Angabe in Prozent. Ist ein Indikator wie lange die Verbindung zu einem anderen Knoten problemlos möglich war ohne, dass Pakete verloren wurden. Nicht besonders gut geeignet um daraus einen besseren Standort für deinen Router zu bestimmen.
template: page_html.html
<div class="container">
<div class="page-header">
<h1>Router eintragen</h1>
</div>
<div class="row">
<div class="col-lg-6">
<div id="alert" class="alert" style="display:none"></div>
<form class="form" id="keyform" method="POST" action="/newkey">
<p>Du bist der <a href="https://wiki.freifunk-bs.de/index.php?title=Einrichtung">Anleitung</a> gefolgt und
hast einen Schlüssel von deinem Router bekommen? Dann trage hier deinen Schlüssel ein:</p>
<fieldset>
<textarea id="key" name="key" cols="50" rows="2" class="span6"></textarea><br><br>
</fieldset>
<p>Hier hast du die Möglichkeit einen Kontaktweg zu Dir einzutragen. Diese Information werden wir nicht
weitergeben, sondern nur auf unseren Servern speichern. Wir werden die Information nur im Falle technischer
Probleme mit deinem Router verwenden um Dich zu kontaktieren. Um diese Information löschen zu lassen
<a href="/kontakt.html">kontaktiere uns.</a></p>
<fieldset>
<input type="text" name="contact" id="contact" size="50">
</fieldset>
<fieldset>
<input type="submit" value="Absenden" class="btn btn-primary pull-right">
</fieldset>
</form>
</div>
<div class="col-lg-6">
<p>Die Schlüsselinformationen sollten so eingetragen werden:</p>
<!-- totally a random key... -->
<pre># Beispiel <br>70e9157d98c9780c27ea17e95e27885997cf321225050f397f0fa82ac1733639</pre>
</div>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#keyform').submit(function () {
$.post('/newkey', {'key':$('#key').val(),'contact':$('#contact').val()}, function (ans) {
$('#alert').hide(500, function() {
if (ans.success) {
$('#alert').removeClass('alert-danger').addClass('alert-success').text(ans.message)
} else {
$('#alert').removeClass('alert-success').addClass('alert-danger').text(ans.message)
}
$('#alert').show(500)
});
}, 'json')
return false
});
if (document.location.hash !== '') {
$('#key').val(decodeURIComponent(document.location.hash));
}
});
</script>
sort: 50
title: Router einrichten
Router einrichten
=================
Diese Anleitung ist für unterstützte Geräte von TP-Link und Netgear.
Bei Geräten von Ubiquity oder AVM Fritz!Box funktioniert das Installieren
der Firmware anders als hier beschrieben.
Router anschließen
------------------
1. Lade das passende Erstinstallations-Firmware-Image für Deinen Router von `unserer Seite <https://firmware.freifunk-bs.de/#stable>`__ herunter.
2. Verbinde Deinen Computer mit einem der gelben LAN-Anschlüsse des Routers.
3. Dein Computer erhält nun automatisch via DHCP eine IP-Adresse.
Installation
------------
Mit Hersteller-Firmware
_______________________
Ist auf Deinem Router noch die Firmware des Herstellers installiert, sind die genauen Schritte abhängig vom Hersteller Deines Gerätes.
#. Öffne das Webinterface Deines Routers in deinem Browser.
#. Folge den Anweisungen im Handbuch Deines Routers um die Firmware zu aktualisieren.
#. Nutze nun das von der zuvor heruntergeladene Firmware-Image.
#. Warte bis der Router wieder gestartet ist.
Mit Freifunk-Firmware
_____________________
Ist auf Deinem Router bereits eine Freifunk-Firmware installiert, ist diese Anleitung für Dich relevant.
#. Starte den Router im Konfigurationsmodus neu. \
Wie dies funktioniert ist in unserer `FAQ </faq/faq.html>`__ erklärt.
#. Gehe in den *Expertenmodus*.
#. Gehe auf den Reiter *Firmware aktualisieren*.
#. Wähle die Firmware-Datei aus und lade diese hoch.
#. Bei Bedarf können die Einstellungen des Gerätes zurückgesetzt oder beibehalten werden.
#. Werden die Einstellungen beibehalten, startet das Gerät anschließend in den Betriebsmodus neu.
#. Werden die Einstellungen nicht beibehalten, startet das Gerät in den Konfigurationsmodus neu.
Konfigurationsmodus
-------------------
Dein Router sollte nun in den Konfigurationsmodus starten. Du erhälst erneut eine IP-Adresse per DHCP, dein Freifunk-Router ist nun unter http://192.168.1.1 in Deinem Browser erreichbar.
Den Router konfigurieren
------------------------
#. Wähle einen Namen oder verwende den bereits eingetragenen Namen.
#. Aktiviere das Mesh-VPN, um eine Verbindung mit dem Freifunk-Netz über das Internet herzustellen.
#. Füge GPS-Koordinaten des Router-Standorts ein. Diese kannst du auf unterschiedliche Weisen erhalten:
- Ist Dein Rechner gleichzeitig mit dem Router und dem Internet verbunden kannst
Du die Koordinaten direkt auf der Seite des Konfigurationsmodus auswählen.
- Alternativ kannst Du die Koordinaten bei einem Kartendienst wie
`Openstreetmap <https://openstreetmap.org>`__ ermitteln.
#. Du hast die Option, eine Kontaktmöglichkeit anzugeben. Diese ist entweder nur für Administratoren, \
oder öffentlich für alle sichtbar, je nachdem wie du möchtest.
#. Nach einem Klick auf Speichern und Neustarten wird die Konfiguration beendet. Seit einer Änderung \
Ende 2021 wird an dieser Stelle kein Key mehr angezeigt, um ihn auf unserer Webseite einzutragen.
Dies geschieht nun automatisch.
Danach startet der Router neu, sendet das WLAN 'Freifunk' aus und versucht sich per Mesh
mit anderen Nachbarn, sowie sich über seinen Uplink direkt selbst mit unserem Netz zu verbinden.
Der Router ist jetzt im Normalbetrieb und nicht mehr unter http://192.168.1.1 erreichbar.
Für spätere Änderungen kann der Router wieder in den Konfigurationsmodus versetzt werden.
Den Router aufstellen
---------------------
Als Standort empfehlen sich Fenster, Balkone oder Dächer.
Je näher er der Außenwelt ist, desto wahrscheinlicher ist es, dass er für Passanten erreichbar
ist und sich mit anderen Routern verbindet um eine Meshverbindung zu bilden.
Verbinde den Router mit dem Netzwerk
------------------------------------
Wenn Du Deinen Internetzugang zur Verfügung stellen möchtest, verbinde jetzt den WAN-Anschluss
Deines Freifunk-Router mit deinem vorhandenen Internetrouter. Möchtest oder kannst Du das nicht,
bist Du auf andere Freifunker in deiner Nähe angewiesen um eine Verbindung zum Freifunk-Netzwerk
und ins Internet herzustellen.
Fertig
------
Super, Du hast es geschafft.
Dein Freifunk-Knoten funktioniert jetzt und sollte, wenn Du GPS Koordinaten angegeben hast,
in Kürze auf der `Karte <https://freifunk-bs.de/map/#!v:m>`__ erscheinen.
.. raw:: html
<i>
Diese Anleitung wurde erstellt mit Inhalten unter
`CC-BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0/>`__
des
`Freifunk Darmstadt <https://darmstadt.freifunk.net/mitmachen/router-einrichten/>`__.
.. raw:: html
</i>