- 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> |
||
|---|---|---|
| scripts | ||
| .gitignore | ||
| README.md | ||
| bashrc-snippet.sh | ||
| install.sh | ||
| smb.conf | ||
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:
- Instala
sambaypython-zeroconf - Crea directorios de config
- Copia
smb.confy los 4 scripts de red a~/.local/bin/ - Crea usuario Samba (pide usuario y contrasena)
- Agrega autostart y aliases a
.bashrc - 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
.bashrcal 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:
- Construye query DNS tipo A para el hostname
- Envia al grupo multicast 224.0.0.251:5353
- Parsea la respuesta y extrae la IP
- 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:
- mDNS (via
mdns-resolve) — red local - Tailscale DNS (
*.tailb0bb74.ts.net) — fuera de LAN - Cache local (
~/.ssh/mdns-cache) — si todo falla
Aliases soportados:
dell→dell-latitude3400lenovo→lenovo-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:
- Ping al host Tailscale (1s timeout)
- Si falla, ping a IP LAN (1s timeout)
- 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
- Verificar que smbd corre:
smb-status - Verificar puerto:
ss -tlnp | grep 4450 - Verificar firewall Android: Ajustes WiFi, sin restricciones
No aparece en Dolphin (Red)
- Verificar mDNS:
mdns-status - Desde Kubuntu:
avahi-browse -rt _smb._tcp - Si no aparece:
mdns-restart - 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