Puenteando wlan0 a eth0

Puenteando wlan0 a eth0

En Arch Linux, me gustaría que eth0 (conectado a un enrutador en puente) comparta la conexión recibida de wlan0. He leído tutoriales pero no tengo conocimientos de comandos como otros usuarios y no los entiendo completamente.

Respuesta1

ACTUALIZAR

No es posible establecer un puente entre interfaces inalámbricas (cliente también conocido como modo estación) y cableadassegún este hilo en linux-ath5k-devel.

Configurar NAT

En su lugar, se debería configurar NAT:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Asignando una IP

Luego tienes que asignarte direcciones IP a ti mismo:

ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up

Instalar el demonio dhcp

Instale un servidor dhcp y agregue el siguiente texto a su archivo de configuración (en /etc/dhcpd.conf o algo similar)

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.100 10.0.0.120;
    option routers 10.0.0.1;
    option domain-name-servers the-ip-address-you-have-in-etc-resolv.conf;
}

Iniciar dhcpd

Luego inícialo /etc/init.d/dhcpd start

¡Y eso es!

Lea solo a continuación si está interesado en la configuración del puente que no funciona


brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0

Primero creas una interfaz puente. Elijo un nombre arbitrario.mipuenteluego agréguele interfaces.

Debe solicitar una nueva dirección IP (esto solo es necesario si desea obtener una IP válida para el dispositivo puente):

dhclient -d mybridge

Respuesta2

Apuente wifiinterfaz que puede utilizar iwla herramienta parahabilitar 4adrasimismo:

# iw dev <wifiInterface> set 4addr on

es decir:

# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported

# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>

Ahora debería funcionar. Puedes mostrar puentes usando:

# brctl show

Respuesta3

Puente wlan y 4addr:

Conectar wlan0 es una molestia. Normalmente no puede agregarlo a una interfaz puente (brctl devuelve "Operación no permitida"), y el uso del filtro "puenteado" de VirtualBox genera un gran lío de conflictos ARP y DHCP. La causa de esto es que las tramas 802.11 contienen sólo tres direcciones por defecto: las direcciones MAC tanto de los dispositivos inalámbricos (portátil y AP) como del destinatario final (como en Ethernet). Siempre se supone que sólo hay un posible originador.

802.11 puede transportar la cuarta dirección MAC del originador, y los repetidores la utilizan en modo WDS. Esta característica también se puede habilitar en Linux, usando iw, y habilitar este modo permitirá que wlan0 se use en interfaces puente, así como con redes puenteadas de VirtualBox:

iw dev wlan0 set 4addr on

Sin embargo, con 4addr habilitado, es probable que el AP lo ignore por completo: la asociación se realiza correctamente pero todos los marcos de datos desaparecen en el éter. Esto podría deberse a razones de seguridad (porque es muy difícil falsificar la dirección MAC de origen. Sí). En mi enrutador (que ejecuta OpenRG), es necesario habilitar el modo "WDS" para la interfaz AP inalámbrica, agregar un dispositivo WDS restringido a mi dirección MAC de la computadora portátil y agréguela al puente LAN. Los paquetes de 4 direcciones ahora funcionan.

Sin embargo, hay otro problema con esto: el enrutador ahora rechaza paquetes de tres direcciones de la computadora portátil, lo que puede ser bastante inconveniente (tener que alternar 4addr cada vez que se cambia la red WLAN). La solución es agregar, en la computadora portátil, una segunda interfaz inalámbrica vinculada al mismo dispositivo, pero con una dirección MAC diferente. Primero deshaga la configuración anterior:

iw dev wlan0 set 4addr off

Luego, agregue una segunda interfaz (el nombre fue elegido arbitrariamente) con una dirección MAC diferente:

iw dev wlan0 interface add wds.wlan0 type managed 4addr on
ip link set dev wds.wlan0 addr <addr>
ip link set dev wds.wlan0 up

Aquí debe coincidir con la dirección del dispositivo WDS configurada en el enrutador; aparte de eso, puede ser cualquier dirección MAC válida. La MAC original de wlan0 permanece para uso "normal".

Es posible utilizar wlan0 y wds.wlan0 al mismo tiempo, aunque solo he probado la asociación al mismo AP dos veces, no a AP diferentes. Supongo que al menos deberían estar en el mismo canal.

Algunas personas han preguntado por qué usar esto cuando VirtualBox puede conectar WiFi "muy bien". La respuesta es que VirtualBox no envía las direcciones MAC de las máquinas virtuales; más bien, también realiza NAT en la capa MAC. – 2014-08-22

Puente WLAN directo

En determinadas circunstancias, también puedes utilizar wlan_kabel. Utiliza sockets de paquetes para conectar directamente dispositivos WLAN* con dispositivos Ethernet. Sin embargo, sólo puede conectar un único MAC a la vez con wlan_kabel. No tiene el inconveniente de estar bloqueado por puntos de acceso, porque sólo se utiliza la MAC original del dispositivo WLAN. En su caso, esto significaría que wlan0 solo podría ser utilizado por una VM y ni siquiera por el host. Puedes obtenerwlan_kabel aquí. Esto es similar almacvlanssolución.

Puente con ipvlan

IP Vlan no tiene la limitación de un puente, podría usarse para conectar una red, detalles sobre cómo usarlose puede encontrar aquí

alternativa de mascarada

En su lugar, se puede usar el enrutamiento de Linux con iptables-masquerade e ip_forward para lograr un puente, pero como se mencionó, esto requiere habilitar ip_forward y hará que Linux actúe como un enrutador; esto debe configurarse con cuidado porque podría introducir algún problema de seguridad.

# bridge setup
brctl addbr br0
ifconfig br0 10.10.20.1/24 up
 
# enable ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
 
# netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
 
# netfilter network address translation
iptables -t nat -A POSTROUTING -o wlan0 -s 10.10.20.0/24  -j MASQUERADE

La interfaz br0 tendrá entonces acceso a la red wlan0.

Importante y relacionado

Además, y muy importante, no debes utilizar comandos obsoletos y obsoletos comoifconfig, brctl, etcétera. La suite iproute2 contiene comandos para todo esto, incluida la configuración de interfaces virtuales (algo para lo que alguna vez tuvimos que usar openvpn) y la creación de puentes. Si no sabes cómo configurar un puente con ip, allá vamos

  ip tuntap add tap0 mode tap user root 
  ip link set tap0 up
  ip link add br0 type bridge
  ip link set tap0 master br0
  ip link set eth0 master br0
  ip addr add 10.173.10.1/24  dev br0
  ip link set br0 up

Con este conjunto de comandos, creamos una interfaz virtual llamada tap0, luego un puente llamado br0, luego esclavizamos a eth0 y tap0 al puente, al que asignamos una dirección IP de 10.173.10.1, luego lo activamos todo. Se requieren tres instancias separadas para activar las interfaces (para tap0, eth0 y br0).

El truco para que esto funcione es usar proxy.arp, que permite que su PC (no su VM/contenedor Linux/espacio de nombres de red) responda consultas ARP en su lugar.

En otras palabras, al utilizar el reenvío IPv4 entre su interfaz de hardware y su interfaz virtual, cree que puede conectar su VM/LXC/NNS a su LAN como si fuera una interfaz física, pero esto no es cierto: se está olvidando absolutamente tráfico ARP fundamental, que es lo que realmente permite que LAN funcione. Entonces, el problema es: si reenvío correctamente el tráfico IPv4, ¿cómo puedo reenviar también el tráfico ARP para que mi VM/LXC/NNS funcione? El truco consiste en utilizar proxy-arp.

La respuesta completa a eso está enBlog de Bohdi Zazen, con el revelador título: Tarjetas inalámbricas puente. Utiliza un paquete obsoleto, uml-utilities, para crear una interfaz virtual mediante el comando tunctl: este es el único comando para el que utiliza uml-utilities, por lo que puedes descuidar la descarga del paquete y utilizar el comando I. Escribí arriba para crear una interfaz tap o tun, lo que quieras, simplemente modifica el comando en consecuencia. luego cree un par veth para su LXC y ahora cree un puente entre tap0 y veth0. Este puente, llamado br0, es para lo que debes usar proxy-arp, en lugar de la simple interfaz tap0 descrita por Bohdi Zazen.


Fuentes:Askubuntu.com,nullroute.eu.org,firejail.wordpress.com,superusuario.com

Respuesta4

4addr, como se describe en otras respuestas, es sin duda la mejor manera cuando lo admite el adaptador/controlador, pero no todas lo hacen. NAT puede funcionar para algunas cosas, pero obtener una comunicación adecuada en ambos sentidos en la LAN será problemático (por ejemplo, conectar una impresora o acceder a otros dispositivos IoT en el otro lado de la NAT). Cualquier cosa que dependa de transmisión/multidifusión (por ejemplo, descubrimiento automático, bonjour) fallará a través de NAT.

La alternativa es utilizar un proxy ARP (parprouted) como se describe enhttps://wiki.debian.org/BridgeNetworkConnectionsProxyArp. Configuré esto en una Raspberry Pi para una impresora y funciona de maravilla (agregué una suspensión de 10 segundos en los post-upcomandos para permitirle obtener una dirección IP primero, puede que tenga que ver con la lentitud de mi antiguo RPi...)

información relacionada