#format wiki #language es = Compartir una red física por WiFi en sistemas con "systemd" = J.A.P. javier.debian.bb.ar@gmail.com [[https://es.wikipedia.org/wiki/Linux_Counter|GNU/Linux Registered User]] # 389414 == Abstract == Este documento describe cómo realizar un puente entre una red física conectado por cable a una red inalámbrica (WiFi), sin necesidad de configurar un enrutador. Arquitectura: Plataforma [[http:'''es.wikipedia.org/wiki/Debian|Debian]] [[http:'''es.wikipedia.org/wiki/GNU/Linux|GNU/Linux]] amd64 buster stable Fecha: 10/FEB/2020 '''Copyright (C) Javier A. Piendibene, 2020. This document are free software; you can redistribute them and/or modify them under the terms of the '''[[http:'''www.gnu.org/copyleft/gpl.html|GNU General Public License]]''' as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. For more details, on Debian GNU/Linux systems, see the file /usr/doc/copyright/GPL for the full license. ''' == 1. Introducción == Es probable que usted tenga un dispositivo inalámbrico, como ser un teléfono celular, que desee conectar a una red, ya sea la de su empresa o Internet, pero no posea una conexión WiFi inalámbrica (wireless), pero sí posee un ordenador que accede a esta red mediante una placa con cable (wired). También es posible que alguna vez haya leído el tutorial https://wiki.debian.org/es/Compartir_red_fisica_con_WiFi, el cual, luego de la implementación de systemd, quedó obsoleto. En lugar de instalar un enrutador con capacidad WiFi, puede realizar un puente entre la red cableada y una placa WiFi, ya sea esta última instalada dentro de la computadora (PCI) o extraíble (USB). == 2. Preparando los programas necesarios == Para trabajar sin inconvenientes, lea primero este artículo sobre [[http://linuxwireless.org/en/users/Documentation/hostapd|HostAP]]. Eliminando cosas que pueden generar problemas: {{{ # apt purge network-manager* }}} [[https://wiki.debian.org/NetworkManager|NetworkManager]] es una utilidad que ''intenta hacer la configuración de redes y su puesta en servicio menos penosa''. La realidad es que, como toda configuración "automágica", deja mucho que desear, tomando desiciones automáticas que no siempre convienen. Por lo que también conviene editar el archivo /etc/apt/preferences y agregar las líneas {{{ Package: network-manager* Pin: release * Pin-Priority: -1 }}} para evitar que Network-Manager se autoinstale. '''NOTA:''' lxqt tiene un programa llamado '''connman''', que es tan molesto como '''networkmanager'''. Es conveniente eliminarlo. {{{ # apt purge connman }}} Para instalar los programas necesarios, ejecute como root la siguiente instrucción: {{{ # apt install net-tools iw wireless-tools hostapd bridge-utils rfkill resolvconf }}} == 3. Configurando la red == Lo haremos en forma manual. === 3.1. Activar la placa inalámbrica === Puede ser que no tenga problemas, pero a veces las cosas se complican. Verificar que el sitema reconozca sus placas de red. Para placas PCI: {{{ # lspci (...) 01:00.0 Ethernet controller: Qualcomm Atheros AR8152 v2.0 Fast Ethernet (rev c1) 03:02.0 Network controller: Ralink corp. RT2561/RT61 802.11g PCI }}} Para placas USB: {{{ # lsusb (...) Bus 001 Device 005: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter }}} Asegúrese de tener instalados los controladores ("firmware") correspondientes. Los más comunes son: [[https://www.ath-drivers.eu/|Qualcomm/Atheros]] --> # apt install firmware-atheros [[https://www.mediatek.com.es/|MediaTek/Ralink]] --> # apt install firmware-ralink [[https://www.realtek.com/en/|Realtek]] --> # apt install firmware-realtek Identifique sus placas de red mediante {{{ # ifconfig -a lo: flags=73 mtu 65536 (...) enp1s0: flags=-28605 mtu 1500 (...) wlan0: flags=-28669 mtu 1500 (...) wlp3s2: flags=-28605 mtu 1500 (...) }}} Como se ve, figuran cuatro placas: lo: Es una placa virtual, llamadda '''loopback''', interna del sistema; no la vamos a usar. enp1s0: Placa de red. wlan0: Placa de red. wlp3s2: Placa de red. Las que vamos a usar son las dos últimas. Para ello, veremos cuál es cableada y cuál inalámbrica. {{{ # iwconfig lo no wireless extensions. enp1s0 no wireless extensions. wlp3s2 IEEE 802.11 Mode:Master Tx-Power=20 dBm Retry short limit:7 RTS thr:off Fragment thr:off Power Management:off wlan0 unassociated ESSID:"" Nickname:"" Mode:Managed Frequency=2.412 GHz Access Point: Not-Associated Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 }}} Con esto vemos que '''enp1s0''' es cableada, '''wlp3s2''' y '''wlan0''' son inalámbricas. Vamos a usar la primera en este ejemplo. Ejecutamos la instrucción '''iwlist wlp3s2 scan''', y veremos qué sucede. Puede haber un fallo: {{{ # iwlist wlp3s2 scan wlp3s2 Interface doesn't support scanning : Network is down }}} Esto puede significar que la placa esté bloqueada: {{{ # rfkill list all 0: phy0: Wireless LAN Soft blocked: yes Hard blocked: no }}} y vemos que efectivamente, lo está desde el sistema ("Soft blocked"). Puede haber placas que se bloqueen físicamente ("Hard blocked") con un interruptor ("switch"); si este último es el caso, actívelo ("Off --> On"). Desbloqueamos y verificamos nuevamente: {{{ # rfkill unblock all # rfkill list all 0: phy0: Wireless LAN Soft blocked: no Hard blocked: no }}} [[https://linux.die.net/man/1/rfkill|RFkill]] es un subsistema en el kernel de Linux que proporciona una interfaz a través de la cual las interfaces de radiofrecuenca (placas WiFi) se pueden solicitar, activar o desactivar. El sistema por defecto y seguridad, bloquea las placas de red inalámbricas. Verificamos si la placa ahora está en funcionamiento: {{{ # iwlist wlp3s2 scan wlp3s2 Scan completed : Cell 01 - Address: 90:F6:52:D7:17:A4 Channel:1 Frequency:2.412 GHz (Channel 1) Quality=36/70 Signal level=-74 dBm Encryption key:on ESSID:"USUARIO-PC_Network" (...) Authentication Suites (1) : PSK IE: Unknown: DD180050F2020101880003A4000027A4000042435E0062322F00 }}} Esto lista todas las redes WiFi al alcance de nuestra placa. Si como vimos más arriba, la placa estaba bloqueada, es conveniente desbloquear el servicio al inicio del sistem mediante el "script" '''/etc/rc.local'''. Si bien Debian 10 lo ha eliminado, podemos volver a crearlo: {{{ #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. /usr/sbin/rfkill unblock all exit 0 }}} Y le damos permiso de ejecución: {{{ # chmod +x /etc/rc.local }}} Para mayor información, [[https://www.troublenow.org/752/debian-10-add-rc-local/|Debian 10: How to add rc.local]]. === 3.2. Activar el punto de acceso (AP) === Lea el archivo ''/usr/share/doc/hostapd/README.Debian'' para la documentación más actualizada. Cree el archivo de configuración '''/etc/hostapd/hostapd.conf''' según este ejemplo. {{{ interface=wlp3s2 bridge=br0 driver=nl80211 auth_algs=1 ignore_broadcast_ssid=0 logger_syslog=-1 logger_syslog_level=0 hw_mode=g ssid=MiWiFi channel=11 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=MiClave1234 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP }}} * Donde dice '''MiWiFi''' coloque el nombre que quiera darle a su red. * Donde dice '''MiClave1234''' coloque una clave de por lo menos ocho caracteres. Para mayor información, lea el archivo ''/usr/share/doc/hostapd/examples/hostapd.conf''. Por defecto y seguridad, el servicio '''hostapd''' está enmascarado, razón por la cual el mismo no se inicia bajo systemd. {{{ # systemctl status hostapd.service ● hostapd.service Loaded: masked (Reason: Unit hostapd.service is masked.) Active: failed (Result: exit-code) since Mon 2020-02-17 10:13:11 -03; 9s ago feb 17 10:13:11 DESP2 systemd[1]: hostapd.service: Service RestartSec=100ms expired, scheduling restart. feb 17 10:13:11 DESP2 systemd[1]: hostapd.service: Failed to schedule restart job: Unit hostapd.service is masked. feb 17 10:13:11 DESP2 systemd[1]: hostapd.service: Failed with result 'exit-code'. }}} Procedemos a desenmascararlo y reiniciarlo: {{{ # systemctl unmask hostapd.service Removed /etc/systemd/system/hostapd.service. # systemctl restart hostapd.service }}} === 3.3. Configurar las interfaces === Asumo que su computadora está conectada a Internet por la '''enp1s0''' mientras está realizando esto. Por esta razón, tome nota de su enrutamiento acutal {{{ # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 172.16.150.1 0.0.0.0 UG 0 0 0 enp1s0 dns.google 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 10.3.0.201 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 10.100.233.205 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 172.16.150.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0 172.16.150.1 0.0.0.0 255.255.255.255 UH 0 0 0 enp1s0 resolver2.opend 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 resolver1.opend 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 }}} En mi caso, mi ISP es una red corporativa, por lo que hay varios segmentos habilitados en la red. Edite el archivo '''/etc/network/interfaces''' para tener acceso a una red de Internet y que quede similar al siguiente: {{{ # 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 ####################################################################### # Preparar el entorno pre-up ip addr flush dev wlp3s2 ####################################################################### # WiFi Access Point auto br0 iface br0 inet dhcp bridge-ports enp1s0 wlp3s2 ####################################################################### # Internet auto enp1s0 allow-hotplug enp1s0 iface enp1s0 inet dhcp ####################################################################### # Ajustar rutas post-up route del -net 0.0.0.0 gw 0.0.0.0 dev enp1s0 ### Ver NOTAS IMPORTANTES ### }}} === 3.4. Reiniciando la red === Ejecute el siguiente comando: {{{ # systemctl restart networking.service }}} == 4. NOTAS IMPORTANTES == El orden de las interfaces, a veces suele alterar el funcionamiento del manjo de redes; es conveniente definir el puente antes que las demás interfaces. Preste atención a la carpeta '''/etc/network/interfaces.d/''', puede tener alguna placa de red configurada allí en forma particular; lo normal es que esté vacía. En algunas redes, dependiendo de cómo la haya configurado su ISP, puede haber problemas de enrutamiento. Para ello, nuevamente listamos la tabla de enrutamiento. {{{ # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 172.16.150.1 0.0.0.0 UG 0 0 0 enp1s0 default 0.0.0.0 0.0.0.0 UG 0 0 0 enp1s0 dns.google 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 10.3.0.201 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 10.100.233.205 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 172.16.150.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0 172.16.150.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 172.16.150.1 0.0.0.0 255.255.255.255 UH 0 0 0 enp1s0 resolver2.opend 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 resolver1.opend 172.16.150.1 255.255.255.255 UGH 0 0 0 enp1s0 }}} Como puede observarse, se creó una nueva ruta por defecto ("default"). SÓLO PUEDE HABER UNA RUTA "DEFAULT". Por esa razón, agregué al final la línea '''post-up route del -net 0.0.0.0 gw 0.0.0.0 dev enp1s0'''. Si usted no tiene ese problema, no la agregue. Esto no suele pasar si instala el paquete '''resolvconf''', que evita estos problemas; pero a veces, sucede. Con estos pasos, usted debería tener una red WiFi funcionando disponible para la mayoría de los dispositivos inalámbricos. == 5. Acerca de las placas de red == No todas las placas red inalámbricas soportan la posibilidad de volverse un punto de acceso WiFi (AP) '''en forma nativa'''; es decir, no pueden ponerse en modo "Master". (Ver man iwconfig). Pero el controlador (driver) '''nl80211''' de hostap soluciona este inconveniente '''en la mayoría de los casos'''. tags: compartir share wireless wired hostapd wifi bridge systemd ---- CategoryWireless CategoryNetwork CategoryWifi