So nehmen Sie einen Wechsel unter Linux vor

So nehmen Sie einen Wechsel unter Linux vor

ich habe dasClearfog ProRouter-Board mit einem Armbian-Image. Ich möchte 6 RaspberryPis über Clearfog Pro mit dem Internet verbinden. Am Ende möchte ich, dass alle 7 Computer eine IP-Adresse haben, damit ich mich bei jedem anmelden kann. Nachdem ich im Internet gelesen hatte, sah ich, dass ich eine Netzwerkbrücke einrichten musste, um dies zu erreichen.

Ich habe zunächst diese Konfigurationen ausprobiertHier. Aber bei mir haben sie nicht funktioniert.

Dies ist die aktuelle Konfiguration in meiner Datei /etc/network/interfaces

auto lo br0 eth1 lan1
iface lo inet loopback

iface br0 inet dhcp
  bridge_ports eth0 lan1

Dies ist die Ausgabe vonip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether fe:cc:39:e2:0e:81 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP mode DEFAULT group default qlen 532 link/ether 00:50:43:25:fb:84 brd ff:ff:ff:ff:ff:ff
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 532 link/ether 00:50:43:84:25:2f brd ff:ff:ff:ff:ff:ff
5: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 532 link/ether 00:50:43:0d:19:18 brd ff:ff:ff:ff:ff:ff
6: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1 link/ipip 0.0.0.0 brd 0.0.0.0
7: lan1@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000 link/ether 00:50:43:84:25:2f brd ff:ff:ff:ff:ff:ff
13: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 00:50:43:25:fb:84 brd ff:ff:ff:ff:ff:ff

Undip route

    192.168.178.0/24 dev br0  proto kernel  scope link  src 192.168.178.44 

also versuchte ich, per SSH zu kommunizieren, 192.168.178.44weil ich dachte, es würde mich zum Computer auf LAN1 führen, aber das tat es nicht. Ich stellte erneut eine Verbindung zu Clearfog her.

Ich habe auch versucht, eth1 und eth0 zu überbrücken, aber es kam zurückcan't add eth1 to bridge br0: Invalid argument

Meine Frage lautet also: Was ist die richtige Brückenkonfiguration?

EDIT: wie gewünscht meinbrctl show

bridge name bridge id       STP enabled interfaces
br0         8000.00504325fb84   no      eth0
                                        lan1

ifconfig

br0    Link encap:Ethernet  HWaddr 00:50:43:25:fb:84  
      inet addr:192.168.178.44  Bcast:192.168.178.255  Mask:255.255.255.0
      inet6 addr: fe80::250:43ff:fe25:fb84/64 Scope:Link
      inet6 addr: 2001:984:6433:1:250:43ff:fe25:fb84/64 Scope:Global
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:572 errors:0 dropped:0 overruns:0 frame:0
      TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:147582 (144.1 KiB)  TX bytes:11762 (11.4 KiB)

 eth0      Link encap:Ethernet  HWaddr 00:50:43:25:fb:84  
      inet addr:192.168.178.44  Bcast:192.168.178.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:1225 errors:0 dropped:0 overruns:0 frame:0
      TX packets:118 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:532 
      RX bytes:318910 (311.4 KiB)  TX bytes:15514 (15.1 KiB)
      Interrupt:38 

 eth1      Link encap:Ethernet  HWaddr 00:50:43:84:25:2f  
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:532 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      Interrupt:39 

lan1      Link encap:Ethernet  HWaddr 00:50:43:84:25:2f  
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Undip route show

default via 192.168.178.1 dev br0 
192.168.178.0/24 dev br0  proto kernel  scope link  src 192.168.178.44 
192.168.178.0/24 dev eth0  proto kernel  scope link  src 192.168.178.44 

Antwort1

Nur damit ich es richtig verstehe: Sie haben 6 RPis an einen Switch angeschlossen, der wiederum mit dem Clearfrog verbunden ist. Sie möchten einfach, dass die RPis miteinander kommunizieren und über den Clearfrog auf das Internet zugreifen können. Ich werde Clearfrog ab jetzt als CF bezeichnen.

Schauen wir uns nun Ihre IP-Links an:

1: lo <- loopback
2: bond0 <- special interface for traffic aggregation/bonding
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> <- Assuming this is your uplink
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> <- Assuming this is physically connected to your switch
5: eth2: <BROADCAST,MULTICAST>  <- Assuming this is inactive
6: tunl0@NONE: <NOARP> <- Tunnel interface for vpn
7: lan1@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> <- Lan1 isn't physical, it's a VLAN inteface.
13: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> <- bridge interface you created

Mir ist nicht klar, ob Ihr Router auf der WAN-Seite eine öffentliche IP-Adresse erhält oder ob er hinter einem anderen Gateway bleibt. Falls er sich hinter einem anderen Gateway befindet, müssen Sie Ihre RPis in einem separaten Subnetz haben und CF anweisen, den Datenverkehr für Sie zu routen.

Also zum Beispiel:

*internets*
   ^
|modem| -> |gateway| -> |    switch    |
                        ^    ^    ^    ^         
   192.168.178.0/25     PC1  PC2  PC3  CF           Primary Network
                                       ^
                                  |   switch    |
                                  ^  ^  ^  ^  ^  ^
   192.168.178.128/25             Pi Pi Pi Pi Pi Pi    Pi Network

Ich habe Ihrem primären Netzwerk das Subnetz 192.168.178.0/25 zugewiesen, das einen nutzbaren Bereich von .1-.126 hat; ich habe Ihrem Pi-Netzwerk das Subnetz 192.168.178.128/25 zugewiesen, das einen nutzbaren Bereich von .129-.254 hat

Ich denke, was Sie zuvor versucht haben, war, die beiden Adapter miteinander zu verbinden. Wenn Sie mehrere Hosts hinter zwei Adaptern haben, die auch Mac-Adressen haben, müssen Sie Folgendes tun:Routenplanung, nicht überbrückend.

Schließlich ist das ein Router, oder? Die Frage war „Wie baue ich einen Switch ein?“, aber verwenden Sie dieses Gerät nicht, um den Verkehr zwischen den beiden Netzwerken zu steuern? Andernfalls könnten Sie CF entfernen und einen einfachen Switch einsetzen, kein eingebettetes Linux erforderlich.

So entfernen Sie br0:

    brctl show | awk '{if(NR>1)print}' | awk '{print $NF}' | while read line ; do brctl delif br0 $line ; done

ifconfig br0 down

brctl delbr br0

Als Nächstes bereiten wir den Router für die Ausführung typischer Routerfunktionen vor.

Bearbeiten Sie /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
       address 192.168.178.126
       network 192.168.178.0
       netmask 255.255.255.128
       gateway 192.168.178.1
       broadcast 192.168.178.127

auto eth1
iface eth1 inet static
       address 192.168.178.129
       network 192.168.178.128
       netmask 255.255.255.128
       broadcast 192.168.178.255   

Dann editiere /etc/sysctl.conf und aktiviere die Weiterleitung. Du musst nurbrauchendie erste Zeile, aber das ist, was ich im Allgemeinen für Router verwende:

net.ipv4.conf.all.forwading=1
net.ipv4.conf.default.accept_source_route = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.all.send_redirects = 1                                                                                                                                                                                                         
net.ipv4.conf.default.send_redirects = 1                                                                                                                                                                                                                                                                                                                                                                                                            
net.ipv4.conf.all.accept_source_route = 1                                                                                                                                                                                                                                                                                                                                                                                                     
net.ipv4.conf.all.accept_redirects = 1                                                                                                                                                                                                       
net.ipv4.conf.all.secure_redirects = 1         

Führen Sie dann Folgendes aus: sysctl -p

Jetzt fügen wir die Routen hinzu. Ich schlage vor, einen IP-Route-Flush-All durchzuführen. Sie sollten dabei jedoch an der Konsole sein, da Sie dadurch sofort von SSH getrennt werden.

ip route flush all
ip rule flush
ip route add 192.168.178.0/25 via 192.168.178.1 dev eth0
ip route add 192.168.178.128/25 src 192.168.178.129
ip route add default via 192.168.178.1 dev eth0

Jetzt möchten Sie zu Ihrem primären Netzwerkrouter gehen und eine statische Route hinzufügen: 192.168.178.128/25 über 192.168.178.129. Dadurch wird Ihrem Haupt-Gateway/Router mitgeteilt, dass, wenn ein Host im internen Netzwerk eine Verbindung zu Ihrem RPi-Netzwerk herstellen möchte, die Anforderungen zur Weiterleitung an CF (das als Gateway fungiert) weitergeleitet werden sollen.

Zurück zu CF. Als letztes würde ich Weiterleitungsregeln in iptables hinzufügen:

#Allow rpi's to connect to the outside world but not initiate new connections to hosts on your primary network
iptables -I FORWARD -i eth1 -o eth0 -s 192.168.178.128/25 ! -d 192.168.178.0/25  -m conntrack --ctstate NEW -j ACCEPT
# Allow forwarding for established connections
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow hosts on your primary network to initiate new connections to pi's
iptables -I FORWARD -i eth0 -o eth1 -s 192.168.178.0/25 -d 192.168.178.128/25  -m conntrack --ctstate NEW -j ACCEPT

Sie sollten diese Regeln mit iptables-save > /etc/iptables/rules.v4 speichern.

Jetzt benötigen Sie entweder einen DHCP-Server auf CF, um den Pis IPs zuzuweisen, oder Sie müssen ihnen statische Adressen zuweisen. In beiden Fällen sollten Sie ihr Standard-Gateway auf die CF-IP 192.168.178.129 einstellen.

Das sollte alles sein, was Sie brauchen. Wenn Sie Probleme haben, können Sie gerne einen Kommentar hinterlassen und ich werde Ihnen so gut wie möglich helfen.

Antwort2

in Ihrer Netzwerk-/Schnittstellendatei:

auto lo br0 eth1 lan1
iface lo inet loopback

iface br0 inet dhcp
bridge_ports eth0 lan1

Es hilft, die Dinge etwas zu trennen

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet manual
auto br0
iface br0 inet static #or dhcp
address <your address>
netmask  255.255.255.0
gateway  <your gateway>
bridge_ports eth1
bridge_stp off
bridge_fd 0

Hoffe das hilft

verwandte Informationen