El artículo que lo explica todo es este: WiFi to ethernet adapter for an ethernet-ready TV, yo estoy en una situación similar aunque no lo hice todo exactamente igual.
primero: configurar el fichero /etc/network/interfaces para que la interface eth0 (el puerto ethernet) tenga una ip fija, que será la que nos sirva para crear una mini-red interna con los dispositivos que queramos. En mi caso quedó así:
allow-hotplug eth0 iface eth0 inet static address 192.168.2.1 network 192.168.2.0 netmask 255.255.255.0 broadcast 192.168.2.255 gateway 192.168.2.1
[update 2017-08-24] en las nuevas versiones de raspbian para especificar una ip fija ya no se modifica el fichero /etc/network/interfaces sino que se modifica el fichero /etc/dhcpcd.conf
interface eth0 static ip_address=192.168.2.1/24 static routers=192.168.2.1 static domain_name_servers=192.168.2.1
También hay que deshabilitar los "Predictable Network Interface Names" metiendo net.ifnames=0 en el el /boot/cmdline.txt
Como todo es tan diferente, finalmente optamos por deshabilitar todo este sistema nuevo haciendo
sudo systemctl disable dhcpcd sudo systemctl enable networking
segundo: conectarse a la wifi. En mi caso es una wifi empresarial, así que hay que configurar el fichero /etc/wpa_supplicant/wpa_supplicant.conf de forma similar a esto:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=ES eapol_version=1 ap_scan=1 fast_reauth=1 network={ ssid="unaRRedCualquieRa" scan_ssid=1 key_mgmt=WPA-EAP proto=WPA eap=TTLS pairwise=CCMP identity="usuario" password="password" priority=1 phase2="auth=PAP" }
tercero: reiniciar (o usar ifdown e ifup en cada interface) y comprobar que las dos redes están correctamente conectadas usando, por ejemplo, el comando ifconfig. Yo aquí lo que hago es conectarme por el puerto ethernet con una ip fija y demás.
cuarto: conectar una red con otra utilizando "iptables". Primero reseteamos las iptables con este script:
#!/bin/sh IPTABLES="$(which iptables)" # RESET DEFAULT POLICIES $IPTABLES -P INPUT ACCEPT $IPTABLES -P FORWARD ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -t nat -P PREROUTING ACCEPT $IPTABLES -t nat -P POSTROUTING ACCEPT $IPTABLES -t nat -P OUTPUT ACCEPT $IPTABLES -t mangle -P PREROUTING ACCEPT $IPTABLES -t mangle -P OUTPUT ACCEPT # FLUSH ALL RULES, ERASE NON-DEFAULT CHAINS $IPTABLES -F $IPTABLES -X $IPTABLES -t nat -F $IPTABLES -t nat -X $IPTABLES -t mangle -F $IPTABLES -t mangle -X
quinto: creamos las reglas necesarias para hacer forwarding y NAT desde la red ethernet a la red wifi. En mi caso esto consiste en ejecutar estos dos comandos:
sudo iptables -A FORWARD --in-interface eth0 -j ACCEPT sudo iptables --table nat -A POSTROUTING --out-interface wlan0 -j MASQUERADE
Ahora nos guardamos las reglas en un fichero llamado "iptables":
sudo iptables-save > /etc/network/iptables
y metemos esto al final del /etc/network/interfaces :
pre-up iptables-restore < /etc/network/iptables
sexto: habilitar el ip forwarding en el kernel descomentando en el fichero /etc/sysctl.conf esta línea:
#net.ipv4.ip_forward=1luego ejecutamos sudo sysctl --system para que el cambio sea efectivo.
septimo: arreglar la tabla de enrutado del kernel, con este script:
#/etc/init.d/setuproutes # ### BEGIN INIT INFO # Provides: default routes for wlan0 # Required-Start: $syslog $network # Required-Stop: $syslog # Should-Start: # Should-Stop: # X-Start-Before: # X-Stop-After: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: false # Short-Description: adjust default routes # Description: removes default route 192.168.2.1 adds default route 192.168.1.1 ### END INIT INFO sudo route del default gw 192.168.2.1 eth0 # sudo route add default gw 192.168.1.1 wlan0 exit 0 #!/bin/sh
que deberemos copiar en /etc/init.d y activar con este comando:
sudo update-rc.d setuproutes defaults
octavo: añadir un servicio de DHCP para la nueva minired 192.168.2.0
$ sudo apt-get install isc-dhcp-server $ sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig $ sudo vim /etc/dhcp/dhcpd.confy le metemos este contenido
# # Configuration file for ISC dhcpd for Debian # # ddns-update-style none; option domain-name "rbn.local"; option domain-name-servers 192.168.1.1; default-lease-time 600; max-lease-time 7200; authoritative; log-facility local7; #configure service for network 192.168.2.0 (the ethernet port) subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.10 192.168.2.50; option routers 192.168.2.1; }y ejecutamos
$ sudo service isc-dhcp-server restart