Hallo nochmals,
nachdem smutbert mir per PM gezeigt hat wie ich meinem Banana-Pi auf die Spruenge helfen kann, melde ich mich hier nochmals mit der fertigen Loesung, die mich an das "Ziel meiner Traeume" brachte.
Ich Danke hier nochmal ausdruecklich smutbert fuer seine Zeit, seine Geduld und seine professionelle Hilfe.
Und auch an habakug nochmal Danke fuer den Link zu diesem sehr "schicken" und schlanken Armbian-Image.
Ziel der ganzen "Sache" war/ist, einen Rechner (bei mir ein Banana-Pi) zwischen dem eigenen Netz (mehrere Rechner ueber Kabel (eth0)) und dem Internet (ueber Wlan (wlan0)) zu haben.
Banana-Pi aus == Internet weg aber alles andere geht noch.
Netterweise ist durch diese Konfiguration auch noch ein interner DHCP-Service in meinem Netz "gelandet" der mir bei meinem kleinen "Rechnerzoo" sicher gute Dienste leisten wird.
---------------------------------------------------
Loesung: (von smutbert)
Vorneweg:
Für das lokale Netzwerk wurde einfach 192.168.0.0/255.255.255.0 (also mit den IP-Adressen 192.168.0.1 bis 192.168.0.254) genommen.
Zwischen Banana Pi und Router existiert ja allerdings gewissermaßen am Ende ein eigenes Netzwerk und wenn das ebenfalls 192.168.0.0 wäre, wird es mit der beschriebenen Konfiguration kaum laufen.
Wenn man nach dieser Beschreibung vorgeht, stellt man also am besten vorher sicher, dass der Internetrouter stattdessen zB. 192.168.1.0 verwendet.
Vorbereitung:
Pakete (de)installieren:
Als erstes sorgen wir dafür, dass alle notwendigen Pakete installiert sind und damit einige Pakete, die wir nicht verwenden wollen, keine unerwünschten Nebeneffekte verursachen und auch nicht sinnlos den Systemstart verlangsamen.
Installiert und/oder als manuell installiert markiert wird wpasupplicant für die WLAN-Verbindung, nftables, das für die Paket-/Firewallregeln zuständig sein wird und dnsmasq als DHCP- und DNS-Server.
Deinstalliert werden dagegen Dienste zur Netzwerkkonfiguration, die wir nicht wollten.
Code: Alles auswählen
# apt install wpasupplicant nftables dnsmasq
# apt purge resolvconf ifupdown network-manager hostapd avahi-autoipd isc-dhcp-client bridge-utils isc-dhcp-server networkd-dispatcher
Dienste (de)aktivieren:
Hier ganz ähnlich – systemd-resolved können wir ganz und gar nicht brauchen und müssen dafür
systemd-network aktivieren:
Code: Alles auswählen
# systemctl disable systemd-resolved
# systemctl enable systemd-networkd
Netzwerkverbindung zum Router:
Zuerst einmal werden die Daten des vom Router aufgespannten WLAN in einer Konfigurationsdatei für wpasupplicant (Name und Passphrase des WLAN) in der Form:
in der >
/etc/wpa_supplicant/wpa_supplicant-wlan0.conf< verewigt.
Aktiviert wird wpasupplicant dann mit:
Für die eigentliche Netzwerkkonfiguration mit systemd-network legen wir eine
>
/etc/systemd/network/wlan0.network< an mit dem Inhalt:
Code: Alles auswählen
[Match]
Name=wlan0
[Network]
DHCP=yes
LinkLocalAddressing=no
Netzwerkverbindung in das lokale Netzwerk:
Hier brauchen wir eine statische IP-Adresse – ich habe weil es wohl durchaus üblich ist 192.168.0.1 verwendet.
Hier müssen wir dann auch das IP Forwarding aktivieren.
Das ganze sieht dann zB. so aus;
>
/etc/systemd/network/eth0.network<
Code: Alles auswählen
[Match]
Name=eth0
[Network]
Address=192.168.0.1/24
LinkLocalAddressing=no
IPForward=ipv4
Firewall-/Paketregeln:
Damit das ganze mit NAT läuft brauchen wir ohnehin ein paar Regeln und sorgen auch gleich dafür, dass aus Richtung des Internet keine Verbindungen hergestellt werden können, sondern nur in der anderen Richtung.
Dazu legen wir eine >
/etc/nftables.conf< an, wenn sie noch nicht existiert, mit dem Inhalt:
Code: Alles auswählen
#!/usr/sbin/nft -f
flush ruleset
define internal_nic = eth0
define external_nic = wlan0
table inet filter {
chain input {
type filter hook input priority 0;
# allow established/related connections
ct state { established, related } accept
# early drop of invalid connections
ct state invalid drop
# allow from loopback and internal nic
iifname { lo, $internal_nic } accept
reject with icmp type port-unreachable
}
chain forward {
type filter hook forward priority 0;
# allow from loopback and internal nic
iifname { lo, $internal_nic } accept
# allow established/related connections
oifname $internal_nic ct state { established, related } accept
# Drop everything else
drop
}
chain output {
type filter hook output priority 0;
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority 0
}
chain postrouting {
type nat hook postrouting priority 0
oifname $external_nic masquerade
}
}
Ausführbar muss diese Datei ebenfalls sein, also
DHCP- und DNS-Server:
Wie angekündigt verwenden wir dnsmasq, das mit der >
/etc/dnsmasq.conf< konfiguriert wird.
Code: Alles auswählen
domain-needed
bogus-priv
no-resolv
no-negcache
interface=eth0
address=/banana.pi/192.168.0.1
domain=pi
server=/pi/
local=/pi/
server=8.8.8.8
dhcp-range=set:pi,192.168.0.100,192.168.0.249,255.255.255.0,12h
dhcp-host=XX:XX:XX:XX:XX:XX,drucker,192.168.0.105
Die Optionen zu Beginn besagen:
domain-needed:
DNS-Anfragen zu hostnamen ohne domain werden nicht weitergeleitet (an den/die DNS-Server, der/die im folgenden noch eingetragen werden)
bogus-priv:
Anfragen zu IP-Adressen aus dem lokalen Netzwerk werden nicht an weitere DNS-Server weitergeleitet.
no-resolv:
Die >/etc/resolv.conf< wird nicht herangezogen um weitere DNS-Server auszumachen.
no-negcache:
Negative Ergebnisse von DNS-Abfragen werden nicht zwischengespeichert (es wird noch einmal nachgefragt).
Das interface dürfte klar sein, wir wollen, dass dnsmasq nur auf dem Interface zum lokalen Netzwerk lauscht.
Die nächste Zeile zeigt wie man Namen und IP-Adresse des Banana Pi (bzw. eines beliebigen Systems)
selbst dnsmasq bekannt macht. banana.pi sollte man durch Host- und Domainnamen des Banana Pi ersetzen.
So kann man auch beliebige andere Systeme, die ihre IP-Adresse nicht über DHCP bekommen, dnsmasq mitteilen,
damit der die Namen auflösen kann.
dnsmasq löst in der Konfiguration übrigens auch in >/etc/hosts< eingetragene Namen auf.
Auch in den folgenden Zeilen sollte man das pi durch die lokale Domain (zB. lan) ersetzen.
Als externen DNS-Server habe ich einmal 8.8.8.8, also den DNS-Server von Googleeingetragen
– hier könnte man zB. die IP-Adresse des Routers eintragen.
Bei dhcp-range wird eingetragen welche IP-Adressen dnsmasq vergeben darf.
Hier könnte man statt von 192.168.0.100 bis 192.168.0.249 vielleicht zB. der Einfachheit halber den größten
zusammenhängen und momentan nicht vergebenen IP-Adressbereich in seinem Netzwerk angeben.
Man kann mit mehreren solchen Zeilen aber auch mehrere Bereiche angeben.
Zuletzt noch ein Beispiel wie man Systeme eintragen kann, die immer dieselbe IP-Adresse bekommen sollen.
Statt drucker trägt man einfach den Hostnamen ein und statt den XX die Mac-Adresse des Systems.
Namensauflösung auf dem Banana Pi selbst:
Für den Banana Pi selbst fehlt noch eine brauchbare >
/etc/resolv.conf< und damit er sowohl Namen aus dem lokalen Netzwerk wie auch Internet auflösen kann, wird einfach er selbst als Nameserver eingetragen:
(pi wäre wieder durch den Domainnamen zu ersetzen)
Nach einem reboot des Banana-Pi sollte dann alles wie gewünscht laufen.
--------------------------------------------------------------
Viele Gruesse,
heinz