Config Samba mDNS Termux
Go to file
Andrés Eduardo García Márquez 66a9b4afbf feat: agregar scripts DNS/SSH y reorganizar repo
- scripts/mdns-resolve: resolver .local via multicast UDP puro
- scripts/ssh-mdns-proxy: ProxyCommand con mDNS + Tailscale + cache
- scripts/ssh-fallback: ProxyCommand Tailscale + LAN
- scripts/mdns-publish.py: movido a scripts/
- smb.conf: actualizado shares (Almacenamiento + Termux)
- install.sh: instala los 4 scripts de red
- README.md: documentacion completa de todos los scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 07:01:52 -05:00
scripts feat: agregar scripts DNS/SSH y reorganizar repo 2026-03-26 07:01:52 -05:00
.gitignore feat: agregar instalador, bashrc-snippet y gitignore 2026-03-26 06:49:26 -05:00
README.md feat: agregar scripts DNS/SSH y reorganizar repo 2026-03-26 07:01:52 -05:00
bashrc-snippet.sh feat: agregar instalador, bashrc-snippet y gitignore 2026-03-26 06:49:26 -05:00
install.sh feat: agregar scripts DNS/SSH y reorganizar repo 2026-03-26 07:01:52 -05:00
smb.conf feat: agregar scripts DNS/SSH y reorganizar repo 2026-03-26 07:01:52 -05:00

README.md

Termux Network Toolkit: Samba + mDNS + SSH

Actualizado: 2026-03-25

Samba + descubrimiento mDNS + scripts de resolucion DNS para Termux (Android). Compatible con Windows 11, Kubuntu 24 y macOS.

Instalacion rapida

git clone https://devops.ingeniumcodex.com/andresgarcia0313/termux-samba.git
cd termux-samba
bash install.sh

El instalador:

  1. Instala samba y python-zeroconf
  2. Crea directorios de config
  3. Copia smb.conf y los 4 scripts de red a ~/.local/bin/
  4. Crea usuario Samba (pide usuario y contrasena)
  5. Agrega autostart y aliases a .bashrc
  6. Inicia Samba + mDNS

Estructura del repo

termux-samba/
├── smb.conf              # Config Samba (SMB3, puerto 4450)
├── install.sh            # Instalador automatico
├── bashrc-snippet.sh     # Autostart + aliases para .bashrc
├── .gitignore            # Excluye datos runtime
└── scripts/
    ├── mdns-publish.py   # Publica SSH + SMB via mDNS (Zeroconf)
    ├── mdns-resolve      # Resuelve hostnames .local (multicast UDP)
    ├── ssh-mdns-proxy    # ProxyCommand SSH: mDNS → Tailscale → cache
    └── ssh-fallback      # ProxyCommand SSH: Tailscale → LAN

Samba

Resumen

  • Nombre en red: MOVIL
  • Puerto: 4450 (445 requiere root, no disponible en Termux)
  • Protocolo: SMB2/SMB3 con cifrado y signing
  • Autostart: Via .bashrc al abrir Termux

Shares

Share Ruta Contenido
Almacenamiento /storage/emulated/0 Toda la memoria interna Android
Termux $HOME Home de Termux (configs, scripts, desarrollo)

Archivos en disco

Archivo Proposito
~/.config/samba/smb.conf Config principal
~/.config/samba/private/ Base de datos de usuarios (tdbsam)
~/.config/samba/samba.log Log de actividad

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

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.

Acceso manual en barra de direcciones:

smb://movil.local:4450/
smb://movil.local:4450/Almacenamiento

Kubuntu 24 / Terminal

# 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/Almacenamiento -p 4450 -U andres

# Montar como filesystem
sudo mount -t cifs //movil.local/Almacenamiento /mnt/movil \
  -o port=4450,username=andres,password=PASS,vers=3.0

Windows 11

Windows no soporta puertos SMB alternativos de forma nativa. Opciones:

Opcion A - Port proxy (requiere admin):

netsh interface portproxy add v4tov4 listenport=445 listenaddress=127.0.0.1 connectport=4450 connectaddress=IP_MOVIL
net use Z: \\127.0.0.1\Almacenamiento /user:andres

Opcion B - Desde Explorador (algunos builds):

\\IP_MOVIL:4450\Almacenamiento

Android (mismo dispositivo)

Instalar SambaLite (open source, sin ads). Conectar a 127.0.0.1:4450 con usuario y contrasena.


Scripts de red (mDNS / DNS)

Todos se instalan en ~/.local/bin/. Requieren PATH="$HOME/.local/bin:$PATH".

mdns-publish.py — Publicar servicios en la red

Publica el dispositivo como movil.local via mDNS multicast (Zeroconf).

Servicios publicados:

Servicio Tipo DNS-SD Puerto
SSH _ssh._tcp.local. 8022
Samba _smb._tcp.local. 4450

Dependencia: pip install zeroconf

Uso: Se ejecuta como daemon en background (autostart via .bashrc).

Verificar desde Kubuntu:

avahi-browse -rt _smb._tcp
# Debe mostrar: movil → movil.local → IP:4450

Verificar desde Termux:

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()
"

mdns-resolve — Resolver hostnames .local

Resuelve hostnames .local via multicast UDP puro (sin Avahi, sin dependencias externas).

Por que existe: Termux no puede resolver .local nativamente (usa su propia libc, no la de Android).

Uso:

# Resolver un hostname
mdns-resolve lenovo-ideapad.local
# Output: 192.168.1.112

# Con timeout personalizado (segundos)
mdns-resolve hp62a.local 5

Como funciona:

  1. Construye query DNS tipo A para el hostname
  2. Envia al grupo multicast 224.0.0.251:5353
  3. Parsea la respuesta y extrae la IP
  4. Exit 0 con IP en stdout, o exit 1 si no resuelve

Sin dependencias externas — usa solo stdlib de Python (socket, struct, select).

ssh-mdns-proxy — ProxyCommand SSH inteligente

ProxyCommand para ~/.ssh/config que resuelve hostnames con fallback en cascada.

Cadena de resolucion:

  1. mDNS (via mdns-resolve) — red local
  2. Tailscale DNS (*.tailb0bb74.ts.net) — fuera de LAN
  3. Cache local (~/.ssh/mdns-cache) — si todo falla

Aliases soportados:

  • delldell-latitude3400
  • lenovolenovo-ideapad

Uso en ~/.ssh/config:

Host lenovo-ideapad
    User andres
    ProxyCommand ~/.local/bin/ssh-mdns-proxy %h %p

Host dell
    User andres
    ProxyCommand ~/.local/bin/ssh-mdns-proxy %h %p

Host hp62a
    User andres
    ProxyCommand ~/.local/bin/ssh-mdns-proxy %h %p

Cache: Guarda la ultima IP resuelta en ~/.ssh/mdns-cache para reconexion rapida si mDNS y Tailscale fallan.

ssh-fallback — ProxyCommand Tailscale + LAN

ProxyCommand simple con fallback de Tailscale a IP LAN.

Cadena de resolucion:

  1. Ping al host Tailscale (1s timeout)
  2. Si falla, ping a IP LAN (1s timeout)
  3. Si ambos fallan, intenta Tailscale sin verificar

Uso en ~/.ssh/config:

Host hp62a
    ProxyCommand ~/.local/bin/ssh-fallback hp62a.tailb0bb74.ts.net 192.168.1.16 %p

Nota: ssh-mdns-proxy es mas completo (mDNS + Tailscale + cache). ssh-fallback es mas simple (solo Tailscale + LAN con IPs fijas).


Autostart en .bashrc

Samba y mDNS se inician al abrir Termux. Ver bashrc-snippet.sh para el codigo exacto.

No se usa Termux:Boot (no funciona en este dispositivo).

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

Troubleshooting

"Connection refused" desde otro equipo

  1. Verificar que smbd corre: smb-status
  2. Verificar puerto: ss -tlnp | grep 4450
  3. Verificar firewall Android: Ajustes WiFi, sin restricciones

No aparece en Dolphin (Red)

  1. Verificar mDNS: mdns-status
  2. Desde Kubuntu: avahi-browse -rt _smb._tcp
  3. Si no aparece: mdns-restart
  4. Acceso manual: smb://movil.local:4450/

"NT_STATUS_LOGON_FAILURE"

printf 'PASS\nPASS\n' | smbpasswd -L -s -c ~/.config/samba/smb.conf USUARIO

mDNS no resuelve .local en Termux

Termux usa su propia libc, no la de Android. Por eso .local no resuelve con ping o getent. Usar mdns-resolve en su lugar:

mdns-resolve hostname.local

SSH no conecta por nombre

Verificar que ~/.ssh/config usa ProxyCommand con ssh-mdns-proxy:

ssh -v hostname  # Ver que proxy se usa