Raspberry als Router/Switch mit DHCP-Server und 2. Netzwerkschnittstelle

  • Hallo zusammen,


    ich habe folgenden Bedarf: ich brauche für mein Audio-Rack einen Raspberry Pi als MP3-Player, außerdem noch einen Router samt externem WLAN-Access Point, um mit einem Tablet per WLAN sowohl RPi als auch meinen Mixer (hängt per Ethernet dran) zu steuern.

    Da ich im Rack nicht viel Platz und sowieso schon einen Raspberry im Einsatz habe, wollte ich diesen auch als DHCP-Server bzw. Switch/Router verwenden, indem ich ihn mittels USB-Ethernet-Adapter um eine 2. kabelgebundene Schnittstelle erweitere.

    Das Ganze sollte dann so aussehen:

    • Raspberry mit 2 Ethernet-Schnittstellen und aufgesetztem DHCP-Server
      • an eth0 (2.0.0.1) hängt mein Mixer
      • an eth1 (2.0.0.2) hängt ein Access Point (mit dem sich mein Tablet verbindet)

    Internetverbindung brauche ich keine.


    Bisher habe ich mittels webmin den isc-dhcp-server installiert und beide Schnittstellen so konfiguriert, dass sie auch IP-Adressen zuweisen.


    Den beiden Schnittstellen habe ich über die /etc/dhcpcd.conf die statischen IP-Adressen zugewiesen:

    Code
    interface eth0
    static ip_address=2.0.0.1/24
    static routers=2.0.0.1
    
    interface eth1
    static ip_address=2.0.0.2/24
    static routers=2.0.0.1

    Der DHCP-Server ist so konfiguriert, dass er Adressen zwischen 2.0.0.100 und 2.0.0.199 vergibt. Die entsprechenden Konfigurationsdateien dazu hab ich gerade nicht bei der Hand, aber ich denke, mein Problem liegt sowieso woanders.

    Es ist jetzt so: schließe ich ein Gerät an eth0 an, erhält es eine Adresse aus dem 2.0.0.x-Bereich, schließe ich es an eth1 an, ebenfalls. Das Problem ist aber, dass sich Geräte, die an eth0 befinden, und jene, die an eth1 hängen, nicht sehen können. Da gibt's wohl irgend ein Routing-Problem, aber welches?


    Die probeweise Aktivierung von IP-Forwarding über die /etc/sysctl.conf hat auch nichts geändert.

    Code
    net.ipv4.ip_forward = 1

    Ich hoffe, jemand hier kann mir den entscheidenden Hinweis geben, damit ich zumindest weiß, in welcher Richtung die Lösung zu suchen ist.


    Vielen Dank schon mal!!!

  • Eines vorweg: Du schreibst zwar Du brauchst kein Internet aber trotzdem würde ich ein Subnetz aus dem privaten Bereich nehmen. Man stellt schnell fest dass man doch Internet braucht.


    192.168.0.0/16, 172.16.0.0/12 oder 10.0.0.0/8 sind private IP Netzbereiche.


    Dann musst Du natürlich in Deinen Endgeräten noch eine statische Route ins jeweils andere Netz definieren.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :fies: Bei mir tut das raspiBackup automatisch :shy:

    Edited once, last by framp ().

  • Hi framp,


    die Route muss ich an den Endgeräten definieren? Eigentlich würde ich gerne den Raspberry so konfigurieren, dass er zwischen eth0 und eth1 routet. Eine Konfiguration an den Endgeräten ist mir zu umständlich und z.B. am Mixer gar nicht möglich.

  • Das kann man auch in /etc/dhcpcd.conf definieren. Siehe dazu hier

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :fies: Bei mir tut das raspiBackup automatisch :shy:

  • Danke, das Manual hatte ich mir schon angeschaut, so richtig schlau bin ich allerdings nicht geworden.

    Inzwischen habe ich Zweifel, ob ich auch bei eth1 einen Gateway angeben soll, hatte irgendwo gelesen, den Gateway sollte man nur bei einem Interface angeben. Hmm...

  • Das Gateway ist wichtig um in die grosse weite Welt zu kommen. Ich wuerde da die IP Deines Internetrouters angeben - auch wenn es momentan nicht benoetigt wird.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :fies: Bei mir tut das raspiBackup automatisch :shy:

  • die Route muss ich an den Endgeräten definieren?

    Die Route kannst du auch per DHCP konfigurieren, da du zwischen zwei Netzen hin und her willst, müssen entweder die Geräte in beiden Netze den Gateway kennen, über den sie das andere Netz erreichen, oder du nimmst zwar zwei Netze /24er, aber so, dass sie nur ein /23er Netz sind. Dann wäre dein PI zwar kein Router, sondern würde als Switch arbeiten, aber das wäre möglich (nur anders zu konfigurieren)

    eigentlich würde ich gerne den Raspberry so konfigurieren, dass er zwischen eth0 und eth1 routet

    Macht er doch, wenn du wirklich zwei Netze verwendest.

    ob ich auch bei eth1 einen Gateway angeben soll,

    Ähm, du willst zwei Netze verwenden, dann musst du in jedem Netz einen Gateway haben. Weil du nur jeweils einen Gateway verwendest, ist es in jedem Netz der Default-Gateway.


    Beispiel für einen Eintrag in der dhcpd.conf beim ISC-DHCP-Server:

    subnet 192.168.1.0 netmask 255.255.255.0 {

    range 192.168.1.90 192.168.1.99;

    option subnet-mask 255.255.255.0;

    option domain-search "dd";

    option netbios-name-servers 192.168.1.116;

    option broadcast-address 192.168.1.255;

    option routers 192.168.1.254;

    option time-servers 192.168.1.116;

    }

    host pulsmesser {

    hardware ethernet 12:34:56:78:9a:bc;

    fixed-address 192.168.1.14;

    option routers 192.168.1.127;

    }

    Das ist ein /24er Netz mit den entsprechenden vorgaben, das Gerät 'Pulsmesser bekommt einen anderen Gateway vorgesetzt


    Du könntest sogar einen einzigen DHCP-Server für beide Netze aufbauen, wenn du den so konfigurierst, dass er die Interface-Namen für die beiden Netze als Unterscheidung für die Zuordnung der netzspezifischen Daten nimmt.

    Computer ..... grrrrrr

  • Internetverbindung brauche ich keine.


    Den beiden Schnittstellen habe ich über die /etc/dhcpcd.conf die statischen IP-Adressen zugewiesen:

    Code
    interface eth0
    static routers=2.0.0.1
    
    interface eth1
    static routers=2.0.0.1

    Das Problem ist aber, dass sich Geräte, die an eth0 befinden, und jene, die an eth1 hängen, nicht sehen können. Da gibt's wohl irgend ein Routing-Problem, aber welches?

    Poste mal von deinem PI die Ausgaben von:

    Code
    arp -av
    ip a
    ip r
    ip r s 0/0
    ip r g <IP-Gerät-an eth0>
    ip r g <IP-Gerät-an eth1>
    sudo iptables -nvx -L -t nat

    (IP-Gerät-an eth0 bzw. IP-Gerät-an eth1 anpassen und ohne spitze Klammern).

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Guten Morgen,


    folgendes ist vorausgesetzt:

    • an eth0 hängt ein Gerät mit der IP 2.0.0.100
    • an eth1 hängt ein Gerät mit der IP 2.0.0.104


    Die Abfragen haben folgende Ergebnisse gebracht:


    arp -v

    Code
    ? (2.0.0.100) at 70:5a:0f:d8:26:79 [ether] on eth0
    ? (2.0.0.104) at 00:16:06:88:9f:4e [ether] on eth1
    ? (2.0.0.104) at <incomplete> on eth0
    Entries: 3      Skipped: 0      Found: 3


    ip a

    ip r

    Code
    default via 2.0.0.1 dev eth0 src 2.0.0.1 metric 202
    default via 2.0.0.1 dev eth1 src 2.0.0.2 metric 203
    2.0.0.0/24 dev eth0 proto dhcp scope link src 2.0.0.1 metric 202
    2.0.0.0/24 dev eth1 proto dhcp scope link src 2.0.0.2 metric 203

    ip r s 0/0

    Code
    default via 2.0.0.1 dev eth0 src 2.0.0.1 metric 202
    default via 2.0.0.1 dev eth1 src 2.0.0.2 metric 203

    ip r g 2.0.0.100

    Code
    2.0.0.100 dev eth0 src 2.0.0.1 uid 1000
    cache


    ip r g 2.0.0.104

    Code
    2.0.0.104 dev eth0 src 2.0.0.1 uid 1000
    cache


    iptables ist nicht installiert.


    Vielen Dank!

  • arp -v

    Code
    ? (2.0.0.100) at 70:5a:0f:d8:26:79 [ether] on eth0
    ? (2.0.0.104) at 00:16:06:88:9f:4e [ether] on eth1
    ? (2.0.0.104) at <incomplete> on eth0
    Entries: 3      Skipped: 0      Found: 3

    ip r

    Code
    2.0.0.0/24 dev eth0 proto dhcp scope link src 2.0.0.1 metric 202
    2.0.0.0/24 dev eth1 proto dhcp scope link src 2.0.0.2 metric 203

    ip r g 2.0.0.104

    Code
    2.0.0.104 dev eth0 src 2.0.0.1 uid 1000
    cache

    ...

    Poste mal vom PI die Ausgaben von:

    Code
    ping -c 3 -W 4 2.0.0.104
    ping -c 3 -W 4 -I 2.0.0.1 2.0.0.104

    und nach dem Du auf deinem PI:

    Code
    sudo apt install iputils-arping iptables

    installiert hast, auch die Ausgaben von:

    Code
    sudo arping -c 3 -I eth0 2.0.0.104
    arp -av

    Kannst Du vom Gerät mit der IP 2.0.0.104, die IP 2.0.0.1 per ping erreichen?


    EDIT:


    BTW: Gelegentlich solltest Du auch das Subnetz ändern (siehe oben) und das zuweisen der statischen IP-Adressen auf deinem PI, mit systemd-networkd machen (ohne gateway/Router, da Du keine default route brauchst). den dhcpcd5 kannst Du dann auf deinem PI deinstallieren.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • So, Subnetz ist geändert, d.h.

    • an eth0 hängt Gerät mit IP 10.0.0.100
    • an eth1 hängt Gerät mit IP 10.0.0.101


    ping -c 3 -W 4 10.0.0.101

    Code
    PING 10.0.0.101 (10.0.0.101) 56(84) bytes of data.
    From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
    From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
    From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
    
    
    --- 10.0.0.101 ping statistics ---
    3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2051ms
    pipe 3


    ping -c 3 -W 4 -I 10.0.0.1 10.0.0.101

    Code
    PING 10.0.0.101 (10.0.0.101) from 10.0.0.1 : 56(84) bytes of data.
    From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
    From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
    From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
    
    
    --- 10.0.0.101 ping statistics ---
    3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2027ms
    pipe 3


    sudo arping -c 3 -I eth0 10.0.0.101

    Code
    ARPING 10.0.0.101 from 10.0.0.1 eth0
    Sent 3 probes (3 broadcast(s))
    Received 0 response(s)


    arp -av

    Code
    ? (10.0.0.101) at <incomplete> on eth0
    ? (10.0.0.101) at b0:22:7a:ec:fe:51 [ether] on eth1
    ? (10.0.0.100) at 70:5a:0f:d8:26:79 [ether] on eth0
    Entries: 3      Skipped: 3      Found: 3
  • arp -av

    Code
    ? (10.0.0.101) at <incomplete> on eth0
    ? (10.0.0.101) at b0:22:7a:ec:fe:51 [ether] on eth1
    ? (10.0.0.100) at 70:5a:0f:d8:26:79 [ether] on eth0
    Entries: 3      Skipped: 3      Found: 3

    Teste mal was passiert, wenn Du einen statischen arp-cache-Eintrag für die IP 10.0.0.101, am eth0-Interface machst:

    Code
    sudo arp -i eth0 -d 10.0.0.101 && sudo arp -i eth0 10.0.0.101 b0:22:7a:ec:fe:51 pub

    und danach vom PI, die Ausgaben von:

    Code
    arp -av
    ping -c 3 -W 4 -I 10.0.0.1 10.0.0.101
    sudo arping -c 3 -I eth0 10.0.0.101

    posten. Wenn es nicht funktioniert, dann versuch zusätzlich mit:

    Code
    sudo sysctl -w net.ipv4.conf.eth0.rp_filter=2 net.ipv4.conf.eth1.rp_filter=2

    EDIT:


    Wenn das auch nicht funktioniert, dann konfiguriere source-NAT-Regeln für die Interfaces, auf dem PI:

    Code
    sudo iptables -t nat -I POSTROUTING 1 -o eth0 -j MASQUERADE
    sudo iptables -t nat -I POSTROUTING 2 -o eth1 -j MASQUERADE

    und teste erneut, mit:

    Code
    ping -c 3 -W 4 -I 10.0.0.1 10.0.0.101
    ping -c 3 -W 4 -I 10.0.0.2 10.0.0.100

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Edited once, last by rpi444 ().

  • Da hier beide Interfaces im selben Subnet hängen hätte ich einfach eine Bridge konfiguriert.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Hi,


    vielen Dank allen, die mir hier Beachtung geschenkt und versucht haben, mein Problem zu lösen. Am Ende war es wirklich die Bridge, die es gebraucht hat.


    Folgendes habe ich dazu gemacht:

    Code
    sudo apt install bridge-utils

    Sonst gibt's bei einem Neustart Fehlermeldungen, dass die Bridge nicht existiert.


    /etc/network/interfaces

    Code
    # 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


    /etc/network/interfaces.d/br0

    eth0 und eth1, die beiden Schnittstellen, werden selbst nicht mehr konfiguriert, nur br0 bekommt eine (in meinem Fall statische) IP-Adresse.

    Der DHCP-Server ist dann so eingestellt, dass er nur die Bridge br0 bedient.


    /etc/default/isc-dhcp-server

    Code
    INTERFACES="br0"


    Nach einem Neustart ist dann br0 aktiv und sämtliche Geräte an den beiden Schnittstellen haben Zugang zueinander. ^^


    Nochmals vielen Dank allen!!!!!!!

  • Folgendes habe ich dazu gemacht:

    Code
    sudo apt install bridge-utils

    Sonst gibt's bei einem Neustart Fehlermeldungen, dass die Bridge nicht existiert.

    BTW: Man könnte auch systemd-networkd (oder iproute2), zum herstellen der Bridge benutzen.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Aha, und das wäre die zeitgemäßere Vorgangsweise?

    Naja, die gute alte interfaces-Datei wird nach wie vor, noch benutzt. Wie Du geschrieben hast, musstest Du dafür, bridge-utils nachinstallieren. systemd-networkd hat alles schon an Bord und wenn man keinen Internetzugang gehabt hätte, wäre das auch eine Alternative gewesen.

    Siehe z. B. die Abschnitte "systemd" und "Static" in: https://wiki.gentoo.org/wiki/Network_bridge (oder gleichwertig) und/oder die manpages für systemd.netdev und systemd.network.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • So, Subnetz ist geändert, d.h.

    an eth0 hängt Gerät mit IP 10.0.0.100
    an eth1 hängt Gerät mit IP 10.0.0.101

    Du hast an zwei unterschiedlichen Interfaces, die nicht voneinander wissen, IP-Adressen aus dem gleichen Subnetz. Was natürlich überhaupt nicht funktionieren kann.


    Wenn du an den beiden Interfaces unterschiedliche Netze haben willst

    eth0: 10.0.0.0/24

    eth1: 10.0.1.0/24

    dann sagt du dem PI einfach, dass er Routen soll und sparst die den (Unsinn/)kram mit iptabels und Co.


    Für was eine Firewall einrichten, wenn das ganze überhaupt keine Verbidnung in irgend ein drittes Netz hat?

    Warum doch recht komplizierte Filter-Regeln verwenden, wenn man sie nicht versteht?


    und dann in die

    /etc/sysctl.conf die Zeile

    Code
    net.ipv4.ip_forward=1

    eintragen.

    (um diesen Eintrag, nämlich das Routing, sofort zu aktivieren, das passiert durch den Eintrag nämlich nicht, kann man

    Code
    echo "1" > /proc/sys/net/ipv4/ip_forward

    auf der Kommandozeile (als root) eingeben.

    (Die /etc/sysctl.conf kann man auch nur als root bearbeiten)

    Computer ..... grrrrrr

  • Du hast an zwei unterschiedlichen Interfaces, die nicht voneinander wissen, IP-Adressen aus dem gleichen Subnetz. Was natürlich überhaupt nicht funktionieren kann.

    Die Interfaces wissen schon voneinander und sie können sich auch per Ping erreichen. Es gibt Fälle so wie dieser hier, da kann man IP-Adressen aus dem gleichen Subnetz schon benutzen und das funktioniert auch. I. d. R. braucht man das aber nicht.

    Wir wissen nicht, ob der TE anfangs, beide Interfaces in der "/etc/default/isc-dhcp-server" eingetragen hatte. Z. B. so:

    Code
    INTERFACES="eth0 eth1"
    # oder so
    INTERFACES="eth0"

    ? Wir wissen auch nicht, wie arp_filter auf seinem PI konfiguriert war, denn:

    Quote

    1 - Allows you to have multiple network interfaces on the same subnet, and have the ARPs for each interface be answered based on whether or not the kernel would route a packet from the ARP’d IP out that interface (therefore you must use source based routing for this to work). In other words it allows control of which cards (usually 1) will respond to an arp request.

    Quelle: https://sysctl-explorer.net/net/ipv4/arp_filter/


    ... den (Unsinn/)kram mit iptabels und Co.


    Für was eine Firewall einrichten, wenn das ganze überhaupt keine Verbidnung in irgend ein drittes Netz hat?

    Warum doch recht komplizierte Filter-Regeln verwenden, wenn man sie nicht versteht?

    BTW: Eine source-NAT-Regel ist keine Filter-Regel. iptables wird nicht nur als Firewall benutzt. Siehe z. B. bei iptables die Tables: filter, nat, mangle, raw, security.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Edited once, last by rpi444 ().