Compartir una red física por WiFi en sistemas con "systemd"

J.A.P. javier.debian.bb.ar@gmail.com 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 Debian 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 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 HostAP.

Eliminando cosas que pueden generar problemas:

# apt purge network-manager*

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:

Qualcomm/Atheros --> # apt install firmware-atheros

MediaTek/Ralink --> # apt install firmware-ralink

Realtek --> # apt install firmware-realtek

Identifique sus placas de red mediante

# ifconfig -a
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        (...)

enp1s0: flags=-28605<UP,BROADCAST,RUNNING,MULTICAST,DYNAMIC>  mtu 1500
        (...)

wlan0: flags=-28669<UP,BROADCAST,MULTICAST,DYNAMIC>  mtu 1500
        (...)

wlp3s2: flags=-28605<UP,BROADCAST,RUNNING,MULTICAST,DYNAMIC>  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:"<WIFI@REALTEK>"
          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

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:

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