termux-samba/README.md

230 lines
6.1 KiB
Markdown

# 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]`.