Como hacer un switch en linux.

1

tengo esto clearfog pro tablero del router con una imagen de armbian. Lo que quiero hacer es tener 6 frambuesas conectadas a Internet a través del programa Clearfog Pro. Al final, quiero que las 7 computadoras tengan una dirección IP para poder decirles a cada una de ellas. Después de leer en Internet, vi que necesitaba configurar un puente de red para que esto sucediera.

En primer lugar probé estas configuraciones aquí . Pero no trabajaron para mí.

esta es la configuración actual en mi archivo / etc / network / interfaces

auto lo br0 eth1 lan1
iface lo inet loopback

iface br0 inet dhcp
  bridge_ports eth0 lan1

esta es la salida de ip 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

y ip route

    192.168.178.0/24 dev br0  proto kernel  scope link  src 192.168.178.44 

así que traté de ssh en 192.168.178.44 pensando que me llevaría a la computadora en lan1 pero no lo hizo. Me conecté al Clearfog de nuevo.

También intenté unir eth1 y eth0 pero volvió. can't add eth1 to bridge br0: Invalid argument

así que mi pregunta es: ¿cuál es la configuración correcta del puente?

EDITAR: de acuerdo a lo pedido mi brctl 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)

y ip 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 
Maarten de Klerk
fuente
¿Me puede mostrar el resultado de los siguientes comandos: ifconfig, brctl show, ip route show
Gregory Wolf
No desea conectar su interfaz wan a su lan, para eso está el enrutamiento. Quieres que estén separados. Un puente actúa de manera muy similar a un interruptor de hardware.
Gregory Wolf
@GregoryWolf Entonces, ¿cómo debo lograr mi objetivo? También lo siento si a veces uso los términos incorrectos. Soy un principiante en redes.
Maarten de Klerk

Respuestas:

1

Solo para que lo entienda correctamente, tiene 6 RPi conectados a un conmutador que también está conectado a Clearfrog. Simplemente desea que los RPi puedan comunicarse entre sí, así como acceder a Internet a través de Clearfrog. Me referiré a Clearfrog como CF de ahora en adelante.

Ahora echemos un vistazo a sus enlaces ip:

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

Lo que no me queda claro es si su enrutador recibirá una dirección IP pública en el lado de la WAN o si permanecerá detrás de otra puerta de enlace. En el caso de que esté detrás de otra puerta de enlace, debe tener sus RPi en una subred separada y dar instrucciones a CF para que enrute el tráfico por usted.

Así por ejemplo:

*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

He asignado a su red principal la subred 192.168.178.0/25 que tendrá un rango de uso de .1-.126; He asignado la subred 192.168.178.128/25 a su red Pi, que tendrá un rango de uso de .129-.254

Creo que lo que intentabas hacer antes era unir los dos adaptadores. Cuando tiene varios hosts detrás de dos adaptadores que también tienen direcciones mac, entonces necesita hacer enrutamiento , no puenteando.

Después de todo, este es un enrutador ¿no? La pregunta fue "cómo hacer un cambio", pero ¿no estás usando este dispositivo para controlar el tráfico entre las dos redes? De lo contrario, podría eliminar el CF y lanzar un interruptor tonto, no se requiere linux incorporado.

Para eliminar 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

A continuación, vamos a preparar el enrutador para hacer cosas enrutador.

Editar / 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   

Luego edite /etc/sysctl.conf y habilite el reenvío. Realmente solo necesitar la primera línea, pero esto es lo que generalmente uso para los enrutadores:

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         

A continuación, ejecute: sysctl -p

Ahora vamos a añadir las rutas. Voy a sugerir que realices una ruta IP para vaciar todo, sin embargo, querrás estar en la consola cuando hagas esto porque te desconectará de inmediato de ssh.

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

Ahora desea ir a su enrutador de red principal y agregar una ruta estática: 192.168.178.128/25 a través de 192.168.178.129 Esto le dice a su puerta de enlace / enrutador principal que cuando un host en la red interna desea conectarse a su red RPi, debe reenviar las solicitudes a CF (que actúa como la puerta de enlace) para que se enrute más.

De vuelta a CF, lo último que haría es agregar reglas de reenvío en iptables:

#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

Querrá guardar estas reglas con iptables-save & gt; /etc/iptables/rules.v4

Ahora necesitará un servidor dhcp en CF para asignar IP a los Pi o deberá asignarles direcciones estáticas. En cualquier caso, querrá establecer su puerta de enlace predeterminada a la IP 192.168.178.129 de CF

Eso deberia ser todo lo que necesitas. Si tiene algún problema, no dude en comentar y le ayudaré lo mejor que pueda.

Gregory Wolf
fuente
Usted dice que la puerta de enlace para la ruta estática en mi enrutador principal debe ser 192.168.178.129. Pero el enrutador principal no es parte de esa subred ¿verdad? ¿No debería ser 192.168.178.126?
Maarten de Klerk
0

en su red / archivo de interfaces:

auto lo br0 eth1 lan1
iface lo inet loopback

iface br0 inet dhcp
bridge_ports eth0 lan1

Ayuda a separar algunas cosas

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

Espero que esto ayude

archae0pteryx
fuente
Intenté agregar eth1 al puente, pero me devolvió este error: can't add eth1 to br0: invalid argument
Maarten de Klerk
@MaartendeKlerk lo arreglé. sry
archae0pteryx
Estoy bastante seguro de que lan1 es una etiqueta vlan.
Gregory Wolf