From efc0e2f47f4a7e54736ae1538cf322009c74a459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Eduardo=20Garc=C3=ADa=20M=C3=A1rquez?= Date: Wed, 25 Mar 2026 17:22:40 -0500 Subject: [PATCH] feat: config Samba + mDNS para Termux Android - smb.conf: SMB2/SMB3, cifrado, signing, 6 shares, puerto 4450 - mdns-publish.py: publica SSH + SMB via Zeroconf (movil.local) - README.md: documentacion completa de uso y troubleshooting - Compatible con Windows 11, Kubuntu 24 y macOS Co-Authored-By: Claude Opus 4.6 --- README.md | 229 ++++++++++++++++++++++++++++++++++++++++++++++++ mdns-publish.py | 73 +++++++++++++++ smb.conf | 111 +++++++++++++++++++++++ 3 files changed, 413 insertions(+) create mode 100644 README.md create mode 100755 mdns-publish.py create mode 100644 smb.conf diff --git a/README.md b/README.md new file mode 100644 index 0000000..69c9103 --- /dev/null +++ b/README.md @@ -0,0 +1,229 @@ +# Samba en Termux - Documentacion + +> Actualizado: 2026-03-24 + +## Resumen + +Samba 4.20.8 corriendo en Termux (Android) con descubrimiento automatico en red local via mDNS. Compatible con Windows 11, Kubuntu 24 y macOS. + +- **Nombre en red:** MOVIL +- **Puerto:** 4450 (445 requiere root, no disponible en Termux) +- **Protocolo:** SMB2/SMB3 con cifrado y signing +- **Usuario:** andres +- **Autostart:** Via `.bashrc` al abrir Termux + +--- + +## Archivos de configuracion + +| Archivo | Proposito | +|---------|-----------| +| `~/.config/samba/smb.conf` | Config principal de Samba | +| `~/.config/samba/private/` | Base de datos de usuarios (tdbsam) | +| `~/.config/samba/samba.log` | Log de actividad | +| `~/.config/samba/lock/` | Lock files para browsing | +| `~/.config/samba/state/` | Estado interno | +| `~/.config/samba/cache/` | Cache | +| `~/.local/bin/mdns-publish.py` | Script que publica SSH + SMB via mDNS | + +--- + +## Shares disponibles + +| Share | Ruta Android | Contenido | +|-------|-------------|-----------| +| Archivos | `/storage/emulated/0/Archivos` | Desarrollo, documentos de trabajo | +| Home | `$HOME` | Home de Termux (configs, scripts) | +| Downloads | `/storage/emulated/0/Download` | Descargas del navegador/apps | +| Documents | `/storage/emulated/0/Documents` | Documentos Android | +| DCIM | `/storage/emulated/0/DCIM` | Fotos y videos de camara | +| Movies | `/storage/emulated/0/Movies` | Peliculas | + +--- + +## Conexion desde otros equipos + +### Kubuntu 24 / KDE Dolphin + +El dispositivo aparece automaticamente en **Red** del panel lateral como **"movil"** gracias al servicio mDNS `_smb._tcp`. + +Tambien se puede acceder manualmente: + +``` +smb://movil.local:4450/ +smb://movil.local:4450/Archivos +``` + +Credenciales: `andres` / `asde71.4` + +### Kubuntu 24 / Terminal + +```bash +# Descubrir el servicio +avahi-browse -rt _smb._tcp + +# Listar shares +smbclient -L movil.local -p 4450 -U andres + +# Acceder a un share +smbclient //movil.local/Archivos -p 4450 -U andres + +# Montar como filesystem +sudo mount -t cifs //movil.local/Archivos /mnt/movil \ + -o port=4450,username=andres,password=asde71.4,vers=3.0 +``` + +### Windows 11 + +Windows no soporta puertos SMB alternativos de forma nativa. Opciones: + +**Opcion A - Mapear con netsh (requiere admin):** +```cmd +netsh interface portproxy add v4tov4 listenport=445 listenaddress=127.0.0.1 connectport=4450 connectaddress=192.168.1.108 +net use Z: \\127.0.0.1\Archivos /user:andres asde71.4 +``` + +**Opcion B - Usar la IP directa desde Explorador:** +``` +\\192.168.1.108:4450\Archivos +``` +(Nota: no todos los builds de Win11 soportan esta sintaxis) + +--- + +## Descubrimiento en red (mDNS / DNS-SD) + +### Como funciona + +El script `~/.local/bin/mdns-publish.py` publica dos servicios via Zeroconf (mDNS): + +| Servicio | Tipo DNS-SD | Puerto | Proposito | +|----------|------------|--------|-----------| +| SSH | `_ssh._tcp.local.` | 8022 | Acceso remoto por SSH | +| Samba | `_smb._tcp.local.` | 4450 | Compartir archivos SMB | + +Ambos se publican bajo el hostname **movil.local**. + +### Script: mdns-publish.py + +**Ubicacion:** `~/.local/bin/mdns-publish.py` +**Dependencia:** `pip install zeroconf` +**Autostart:** Via `.bashrc` (lineas 34-37) + +El script: +1. Detecta la IP local del dispositivo +2. Registra los servicios SSH y SMB en la red multicast mDNS +3. Se mantiene corriendo en background (daemon) +4. Limpia los registros al recibir SIGINT/SIGTERM + +### Verificar que esta publicando + +Desde Termux: +```bash +python3 -c " +from zeroconf import Zeroconf, ServiceBrowser +import time +class L: + def add_service(self, zc, t, n): + info = zc.get_service_info(t, n) + if info: + a = '.'.join(str(b) for b in info.addresses[0]) + print(f'{n} -> {a}:{info.port}') + def remove_service(self, *a): pass + def update_service(self, *a): pass +zc = Zeroconf() +ServiceBrowser(zc, '_smb._tcp.local.', L()) +ServiceBrowser(zc, '_ssh._tcp.local.', L()) +time.sleep(3) +zc.close() +" +``` + +Desde Kubuntu: +```bash +avahi-browse -rt _smb._tcp +``` + +Resultado esperado: +``` +movil → movil.local → 192.168.1.x:4450 +``` + +--- + +## Autostart en .bashrc + +Samba y mDNS se inician automaticamente al abrir Termux. Extracto relevante de `~/.bashrc`: + +```bash +# Iniciar Samba si no esta corriendo +if ! pgrep -x smbd > /dev/null; then + smbd -D -s ~/.config/samba/smb.conf 2>/dev/null +fi + +# Iniciar mDNS (movil.local) si no esta corriendo +if ! pgrep -f mdns-publish.py > /dev/null; then + nohup python ~/.local/bin/mdns-publish.py > /dev/null 2>&1 & + disown +fi +``` + +No se usa Termux:Boot (no funciona). Se inicia al abrir la primera sesion de Termux. + +--- + +## Aliases de gestion + +| Alias | Accion | +|-------|--------| +| `smb-start` | Iniciar Samba | +| `smb-stop` | Detener Samba | +| `smb-restart` | Reiniciar Samba | +| `smb-status` | Ver si esta corriendo | +| `smb-log` | Ver ultimas 50 lineas del log | +| `mdns-status` | Ver si mDNS esta corriendo | +| `mdns-restart` | Reiniciar mDNS | +| `mdns-stop` | Detener mDNS | + +--- + +## Parametros de compatibilidad + +| Parametro | Valor | Motivo | +|-----------|-------|--------| +| `server min protocol` | SMB2 | Win11 y Kubuntu 24 ya no usan SMB1 | +| `server max protocol` | SMB3 | Maximo rendimiento y cifrado | +| `smb encrypt` | desired | Win11 lo prefiere, negocia automaticamente | +| `server signing` | desired | Win11 lo exige desde 2024 | +| `unix charset` | UTF-8 | Acentos en nombres de archivo | +| `dos charset` | CP850 | Compatibilidad Windows | +| `use sendfile` | yes | Rendimiento en transferencias | +| `aio read/write size` | 16384 | I/O asincrono para archivos grandes | + +--- + +## Troubleshooting + +### "Connection refused" desde otro equipo + +1. Verificar que smbd corre: `smb-status` +2. Verificar puerto: `ss -tlnp | grep 4450` +3. Verificar firewall Android: Abrir ajustes WiFi, verificar que no hay restricciones + +### No aparece en Dolphin (Red) + +1. Verificar mDNS: `mdns-status` +2. Desde Kubuntu: `avahi-browse -rt _smb._tcp` (debe mostrar "movil") +3. Si no aparece, reiniciar: `mdns-restart` +4. Acceso manual: `smb://movil.local:4450/` en barra de Dolphin + +### "NT_STATUS_LOGON_FAILURE" + +Resetear password: +```bash +printf 'asde71.4\nasde71.4\n' | smbpasswd -L -s -c ~/.config/samba/smb.conf andres +``` + +### Acentos se ven mal + +Verificar que `unix charset = UTF-8` esta en `smb.conf` seccion `[global]`. diff --git a/mdns-publish.py b/mdns-publish.py new file mode 100755 index 0000000..189c946 --- /dev/null +++ b/mdns-publish.py @@ -0,0 +1,73 @@ +#!/data/data/com.termux/files/usr/bin/python +"""Publica servicios via mDNS/Zeroconf: SSH + Samba""" +import socket +import signal +import sys +from zeroconf import ServiceInfo, Zeroconf, IPVersion + +HOSTNAME = 'movil' + +SERVICES = [ + { + 'type': '_ssh._tcp.local.', + 'port': 8022, + 'props': {'description': 'Termux SSH'}, + }, + { + 'type': '_smb._tcp.local.', + 'port': 4450, + 'props': {'description': 'Termux Samba', 'path': '/'}, + }, +] + + +def get_local_ip(): + try: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(('8.8.8.8', 80)) + ip = s.getsockname()[0] + s.close() + return ip + except Exception: + return '127.0.0.1' + + +def main(): + ip = get_local_ip() + addr = socket.inet_aton(ip) + zc = Zeroconf(ip_version=IPVersion.V4Only) + infos = [] + + for svc in SERVICES: + info = ServiceInfo( + svc['type'], + f'{HOSTNAME}.{svc["type"]}', + addresses=[addr], + port=svc['port'], + properties=svc['props'], + server=f'{HOSTNAME}.local.', + ) + zc.register_service(info) + infos.append(info) + print(f'Publicando {HOSTNAME}.local {svc["type"]} -> {ip}:{svc["port"]}') + + def cleanup(sig, frame): + print('Deteniendo mDNS...') + for info in infos: + zc.unregister_service(info) + zc.close() + sys.exit(0) + + signal.signal(signal.SIGINT, cleanup) + signal.signal(signal.SIGTERM, cleanup) + + try: + signal.pause() + except AttributeError: + import time + while True: + time.sleep(3600) + + +if __name__ == '__main__': + main() diff --git a/smb.conf b/smb.conf new file mode 100644 index 0000000..3c23e9d --- /dev/null +++ b/smb.conf @@ -0,0 +1,111 @@ +# Samba config para Termux +# Compatible: Windows 11 + Kubuntu 24 + macOS +# Puerto: 4450 (445 requiere root) +# Windows: \\IP:4450\ o net use Z: \\IP\Archivos /user:andres +# Linux: smb://IP:4450/Archivos + +[global] + workgroup = WORKGROUP + server string = Termux Mobile + netbios name = MOVIL + + # Puerto alternativo (445 requiere root) + smb ports = 4450 + + # Seguridad + security = user + map to guest = never + passdb backend = tdbsam + + # Protocolos - Max compatibilidad Win11 + Kubuntu 24 + client min protocol = SMB2 + server min protocol = SMB2 + server max protocol = SMB3 + client max protocol = SMB3 + + # Cifrado (Win11 lo prefiere, Kubuntu 24 lo soporta) + smb encrypt = desired + + # Signing (Win11 lo exige por defecto desde 2024) + server signing = desired + client signing = desired + + # Rutas Termux + private dir = /data/data/com.termux/files/home/.config/samba/private + lock directory = /data/data/com.termux/files/home/.config/samba/lock + state directory = /data/data/com.termux/files/home/.config/samba/state + cache directory = /data/data/com.termux/files/home/.config/samba/cache + pid directory = /data/data/com.termux/files/home/.config/samba + + # Logs + log file = /data/data/com.termux/files/home/.config/samba/samba.log + max log size = 500 + log level = 1 + + # Rendimiento + socket options = TCP_NODELAY IPTOS_LOWDELAY + use sendfile = yes + aio read size = 16384 + aio write size = 16384 + + # Charset (acentos y caracteres especiales) + unix charset = UTF-8 + dos charset = CP850 + + # Descubrimiento de red + server multi channel support = yes + mdns name = mdns + +[Archivos] + comment = Archivos de trabajo + path = /storage/emulated/0/Archivos + browseable = yes + writable = yes + valid users = andres + create mask = 0644 + directory mask = 0755 + +[Home] + comment = Home Termux + path = /data/data/com.termux/files/home + browseable = yes + writable = yes + valid users = andres + create mask = 0644 + directory mask = 0755 + +[Downloads] + comment = Descargas Android + path = /storage/emulated/0/Download + browseable = yes + writable = yes + valid users = andres + create mask = 0644 + directory mask = 0755 + +[Documents] + comment = Documentos Android + path = /storage/emulated/0/Documents + browseable = yes + writable = yes + valid users = andres + create mask = 0644 + directory mask = 0755 + +[DCIM] + comment = Fotos y Videos + path = /storage/emulated/0/DCIM + browseable = yes + writable = yes + valid users = andres + create mask = 0644 + directory mask = 0755 + +[Movies] + comment = Peliculas + path = /storage/emulated/0/Movies + browseable = yes + writable = yes + valid users = andres + create mask = 0644 + directory mask = 0755