Jesús Leganés-Combarro 'piranna'
To do what anyone can do, leave it to anyone else
Conexión a Internet PAN
Conexión a Internet PAN
User: Jesús Leganés-Combarro (jesus.leganes.combarro@gmail.com) Created: 2025/11/24 19:49:02 Updated: 2025/11/24 20:02:10 Exported: 2025/11/25 1:01:36 Link: https://chatgpt.com/c/6924a7fb-0dd0-832b-a244-7ce4eb23e41d
Prompt
he conectado mi movil y mi portatil usango bluetooth PAN. He activado el modo avion en mi movil y he quitado la tarjeta SIM, la unica red que tiene mi movil es a traves del bluetooth. Puedo conectarme desde mi movil a un servidor web en mi portatil a traves de esta conexion, ahora necesito que pueda salir a internet a traves de dicha conexion. ¿Como puedo hacerlo? He mirado como configurar la route por defecto de Android, pero no encuentro ninguna opcion valida, ping 8.8.8.8 me dice que la red no esta disponible, y no tengo permisos para ver cual es la tabla de rutas, parece que necesito rootear mi movil. ¿Alguna alternativa o aplicacion para poder configurarlo?
Response
En Android sin root es muy difícil (casi imposible) convertir una conexión PAN cliente → portátil en una salida completa a Internet, porque:
- Android no permite establecer rutas por defecto manuales para interfaces Bluetooth PAN.
- Sólo considera como “válidas para Internet” las interfaces Wi-Fi y datos móviles.
- Aunque Android se conecte a tu portátil por PAN, no usará esa interfaz para tráfico hacia Internet, salvo que el portátil se anuncie como tethering reverse (lo que Android llama “USB/Wi-Fi tethering” pero al revés).
- Android bloquea modificar tablas de rutas o activar DHCP sobre PAN para WAN sin root.
Pero hay alternativas funcionales sin root, usando túneles o proxys. Te las dejo ordenadas por facilidad:
✅ Opción 1 (mejor): Usar un proxy HTTP/HTTPS en tu portátil y configurarlo en Android
Android sí permite usar un proxy manual aunque la ruta por defecto no sea buena.
Pasos
-
En tu portátil (Linux/Windows/Mac), instala un proxy sencillo:
-
tinyproxy
-
squid
-
mitmproxy
-
o incluso Python:
python3 -m http.server --bind 0.0.0.0 --cgi(mejor tinyproxy)
-
-
Arranca el proxy, por ejemplo con tinyproxy:
sudo apt install tinyproxy sudo systemctl start tinyproxy -
Mira la IP del portátil en la red PAN (por ejemplo
172.20.10.1). -
En el móvil, en Opciones de la conexión Bluetooth PAN → Ajustes → Proxy manual, configura:
- Host proxy:
IP_del_portátil - Puerto:
8888(tinyproxy)
- Host proxy:
-
Ya tendrás navegación web desde el móvil (HTTP/HTTPS) a través del portátil, aunque no funcionarán apps que no respeten proxy.
Pros: no requiere root, funciona bien para navegar. Contras: no sirve para pings, VPN, juegos, etc.
✅ Opción 2: VPN inversa (OpenVPN / WireGuard)
Funciona incluso si Android no usa el PAN como “default route”, porque la app VPN se convierte ella misma en la default route interna del sistema.
Pasos
-
En el portátil, levanta un servidor WireGuard u OpenVPN.
-
En el móvil, instala la app oficial (WireGuard es lo más fácil).
-
Conéctalos a través de la IP del portátil en la interfaz PAN.
-
Configura el túnel para:
AllowedIPs = 0.0.0.0/0→ la VPN se convierte en la salida a Internet.
Resultado: TODO el tráfico usa la VPN, que sale por el portátil, sin root, sin modificar rutas del sistema.
Pros: mejor opción técnica, todo el tráfico funciona (incluyendo ping). Contras: necesitas configurar la VPN en ambos lados.
✅ Opción 3: Convertir el portátil en un punto Wi-Fi (reverse tethering via Wi-Fi)
Si no te importa usar Wi-Fi en vez de PAN:
- En el portátil, crea una red Wi-Fi en modo hotspot.
- Android la detectará como una interfaz válida para Internet.
- Configura NAT en tu portátil.
Funciona porque Android sí permite rutear Internet a través de Wi-Fi.
❌ Lo que NO funciona sin root
- Cambiar la ruta por defecto en Android para PAN.
- Modificar tabla de rutas (
ip route,iptables, etc.). - Usar “developer options” para forzar rutas.
- Apps tipo “tethering reverse” sin root: funcionan sólo con USB, no con Bluetooth.
🔥 Conclusión
Sin root, la única manera fiable de que Android use tu portátil como puerta de salida a Internet vía Bluetooth PAN es:
- Usar un proxy (solo web)
- Usar una VPN entre móvil ↔ portátil (todo el tráfico)
La opción de WireGuard es la más limpia y completa.
Si quieres, te preparo:
- Script de configuración WireGuard para Linux + Android
- Configuración tinyproxy lista para copiar-pegar
- Alternativa por USB reverse tethering (funciona mejor que Bluetooth)
¿Qué método prefieres?
Prompt
tengo que hacerlo obligatoriamente por Bluetooth
Response
Perfecto: por Bluetooth obligatoriamente y sin root… entonces sólo tienes dos caminos reales que funcionan en Android hoy:
✅ SOLUCIÓN FUNCIONAL 1 (la mejor): VPN entre móvil ↔ portátil a través del enlace PAN
Esto sí funciona aunque Android no acepte el PAN como interfaz “válida” para Internet, porque:
- Android NO usará el PAN como ruta por defecto
- PERO una VPN sí puede convertirse en la ruta por defecto interna
- Y el tráfico de la VPN sí circula por Bluetooth PAN
Es decir: 👉 Android usa la VPN como salida a Internet 👉 El transporte físico de la VPN es Bluetooth PAN 👉 Funciona TODO: ping, apps, DNS, etc.
Cómo hacerlo (resumen realista)
1. Crear servidor WireGuard en tu portátil
Linux (ejemplo):
sudo apt install wireguard
wg genkey | tee server.key | wg pubkey > server.pub
Configura /etc/wireguard/wg0.conf:
[Interface]
Address = 10.9.0.1/24
ListenPort = 51820
PrivateKey = <server.key>
PostUp = iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o <tu_if_salida> -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.9.0.0/24 -o <tu_if_salida> -j MASQUERADE
Levántalo:
sudo wg-quick up wg0
2. En Android, instala la app WireGuard
Crea un peer (el móvil):
[Interface]
Address = 10.9.0.2/24
PrivateKey = <mobile.key>
[Peer]
PublicKey = <server.pub>
Endpoint = <IP_del_portátil_en_el_PAN>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
3. Conecta el móvil al portátil por Bluetooth PAN
Ya lo tienes hecho.
4. En la app WireGuard → activar túnel
💥 BOOM Android sale a Internet a través del portátil usando Bluetooth.
✅ SOLUCIÓN FUNCIONAL 2: Proxy + (opcional) VPN para apps que respeten proxy
Esto también funciona independientemente de rutas, pero:
- Android SÍ deja usar proxy por Bluetooth PAN
- Las apps que usan proxy (Chrome, Firefox, etc.) navegarán sin root
- Las que no lo usen → no funcionarán
En tu portátil levantas tinyproxy o mitmproxy y en Android configuras el proxy en la conexión Bluetooth PAN.
Pero esto NO te dará Internet completo.
❌ SOLUCIONES QUE NO EXISTEN (sin root)
Para ser claro: lo que quieres sin usar VPN o Proxy NO es posible hoy:
- No puedes cambiar la default route de Android hacia el PAN
- No puedes activar NAT completo sobre Bluetooth desde Android
- No puedes usar “reverse tethering” por Bluetooth; sólo existe por USB
- No puedes ver o modificar las rutas sin root
- No existen apps en Play Store que modifiquen rutas del kernel por PAN sin root (Android lo bloquea por seguridad)
✅ CONCLUSIÓN DIRECTA
Si tiene que ser por Bluetooth y sin root, la única forma con tráfico completo (ping 8.8.8.8 incluido) es:
👉 Montar una VPN entre el móvil y tu portátil 👉 El tráfico de la VPN viaja por el enlace Bluetooth PAN 👉 Android usa la VPN como default route → Internet funciona
Todo lo demás o no funciona, o es sólo parcial (proxy web), o requiere root.
Si quieres te preparo:
- los archivos completos
wg0.confpara Linux y Android - el script para activar NAT y comprobar que el tráfico fluye
- comandos para ver si el tráfico WireGuard va realmente por Bluetooth
¿Quieres la configuración completa lista para copiar/pegar?
User: Jesús Leganés-Combarro (jesus.leganes.combarro@gmail.com) Created: 2025/11/20 22:39:50 Updated: 2025/11/24 22:07:06 Exported: 2025/11/25 1:02:34 Link: https://chatgpt.com/g/g-p-68dcf3c7c9a481918faca4dbaf69b3c3-jlc-blog-ideas/c/691f88a6-9bcc-8322-8d60-52b09a73eced
Prompt
te paso las capturas de pantalla del portatil y del movil en distintos pasos del proceso, por si hubiera mas informacion que te fuera util.
Generame un informe para mi jefe y mis compañeros, para que vean los pasos que he seguido y los problemas que he tenido, y sobretodo los pasos para que otro compañero pueda replicar el proceso y validarlo, ya que lo necesitaremos para nuestro trabajo
Response
Perfecto, con toda la información técnica, los pasos, las capturas y el contexto, puedo prepararte un informe profesional para tu jefe y tus compañeros, estructurado como un documento técnico reproducible.
👉 Este informe está pensado para:
- dejar claro el problema original,
- documentar cada intento fallido,
- explicar la solución final,
- describir cómo replicarla paso a paso,
- y mostrar evidencias (capturas) del funcionamiento.
Si quieres, puedo añadir los diagramas, anexos técnicos o una versión en PDF.
📄 INFORME TÉCNICO – Conectividad Android → Portátil vía Bluetooth PAN + VPN Tailscale
Autor: [tu nombre] Fecha: 24/11/2025 Destinatarios: Equipo de Ingeniería, Jefatura Técnica
1. Objetivo del trabajo
El propósito era permitir que un teléfono Android pudiera:
- conectarse a un portátil por Bluetooth PAN, y
- salir a Internet utilizando la conexión del portátil,
- sin usar Wi-Fi, sin usar datos móviles, sin SIM y sin root.
Este escenario es necesario en nuestro proyecto para:
- trabajar en entornos aislados sin Wi-Fi accesible,
- simular latencias y pérdidas de red controladas,
- realizar pruebas con dispositivos móviles sin redes tradicionales,
- validar comunicaciones en túneles VPN bajo rutas no estándar.
2. Resumen de la Solución Final
La solución que funciona de forma completa y estable es:
Android → Bluetooth PAN → Portátil Linux → Exit Node Tailscale → Internet
Se basa en:
- Usar Bluetooth PAN como enlace IP entre Android y el portátil.
- Activar Tailscale VPN en el móvil.
- El móvil enruta TODO el tráfico por la VPN (Android siempre lo hace).
- El portátil actúa como Exit Node de Tailscale y redirige el tráfico a Internet.
- El móvil queda completamente aislado excepto por PAN y VPN.
El resultado: ✔ Internet completo en Android ✔ Ping ICMP saliente ✔ DNS funcional ✔ Navegación web (HTTPS) ✔ Comunicación bidireccional PAN y VPN ✔ Sin riesgo de fugas de tráfico móvil/Wi-Fi
3. Intentos fallidos y motivos
3.1. Intento 1 — Manipular rutas desde Android vía Termux (fallido)
-
ip routefunciona con restricciones. - No hay permisos root.
- No se puede usar
sudoni instalar paquetes sin red. - Android bloquea cambios en la “default route”.
Motivo del fallo: Android impide cambiar rutas por defecto sin root.
3.2. Intento 2 — Usar un proxy en el portátil (fallido)
- Python HTTP Server funcionando en el portátil.
- El móvil NO permite configurar proxy en conexiones Bluetooth PAN.
Motivo del fallo: Android solo permite proxy en Wi-Fi y Datos móviles.
3.3. Intento 3 — Crear un servidor OpenVPN manual (descartado)
Técnicamente viable, pero requiere:
- claves,
- certificados,
- configuración manual,
- exportación a Android.
Motivo del descarte: demasiado complejo para el objetivo actual.
4. Solución Final – Funcionamiento Interno
La clave fue aprovechar cómo funciona Tailscale en Android:
✔ Android usa siempre la VPN como gateway por defecto
Cuando Tailscale está activo:
- todo el tráfico va al túnel,
- incluso si NO hay Internet en el móvil,
- incluso si la única red física es Bluetooth PAN.
✔ Tailscale detecta al portátil mediante LAN peer discovery
Bluetooth PAN es una red local válida. Los peers Tailscale se descubren sin necesitar Internet.
✔ El portátil actúa como exit node
- Encapsula tráfico desde Android.
- Lo desencripta.
- Lo NATea y lo envía a Internet.
✔ El móvil sale a Internet exclusivamente a través del portátil
5. Medidas de Seguridad Aplicadas
Para garantizar que NADA salía por rutas indeseadas:
✔ 5.1. Retirada de la tarjeta SIM
Bloquea completamente los datos móviles.
✔ 5.2. Activación del modo avión
Desactiva todas las radios.
✔ 5.3. Reactivación selectiva
- Solo Bluetooth
- Wi-Fi únicamente si hacía falta para configurar Tailscale
Resultado: El móvil tenía solo 3 interfaces:
lo-
bt-pan(Bluetooth con IP 192.168.44.x) -
tun0(Tailscale)
No había ninguna otra ruta activa.
6. Evidencias de funcionamiento
✔ 6.1. Ping desde Android a Internet
Ping exitoso a 8.8.8.8 (ver captura correspondiente).
✔ 6.2. Ping desde el portátil al móvil por PAN
ping 192.168.44.1 funciona correctamente.
✔ 6.3. Ping desde el portátil al móvil por Tailscale
ping 100.X.X.X → funcionando.
✔ 6.4. Navegación web desde Android
Captura accediendo a https://example.com.
✔ 6.5. Acceso a servidores HTTP en el portátil
Pantalla del servidor Python con peticiones recibidas desde Android.
7. Procedimiento Reproducible para Compañeros
Este es el procedimiento que otro compañero puede seguir para replicarlo:
7.1. Requisitos
- Un teléfono Android (sin root).
- Un portátil con Linux.
- Tailscale instalado en ambos.
- Un usuario autenticado en Tailscale en ambos dispositivos.
7.2. Configuración del Portátil (Linux)
-
Activar Exit Node:
tailscale up --advertise-exit-node --accept-dns -
Autorizarlo en la consola de Tailscale:
- Enable “Use as Exit Node”
- Enable “Allow LAN Connections”
-
Confirmar que el portátil tiene salida a Internet (normal).
7.3. Configuración del Móvil (Android)
- Apagar todas las radios (modo avión).
- Quitar la SIM (opcional pero recomendado).
- Activar Bluetooth.
- Activar:
Ajustes → Conexiones → Modem Bluetooth (Bluetooth tethering)
- Vincular el móvil con el portátil.
- Activar Tailscale.
- En Tailscale:
- seleccionar el portátil como Exit Node.
Si ya estaba configurado una vez, Tailscale puede conectar directamente por LAN sin Internet.
7.4. Verificación
-
En Android, ejecutar en Termux:
ifconfigDeben aparecer:
bt-panlotun0
-
Probar conectividad:
ping 8.8.8.8 -
Desde el portátil:
ping 192.168.44.1 ping 100.x.x.x -
Probar navegación web en el móvil.
8. Conclusión
La solución implementada:
✔ Permite navegación completa en Android sin Wi-Fi ni datos móviles ✔ Utiliza únicamente Bluetooth PAN como enlace físico ✔ Encapsula todo en VPN Tailscale ✔ Redirige tráfico por el portátil como Exit Node ✔ No requiere root ✔ No requiere modificar rutas ✔ Es estable y totalmente reproducible
Esta configuración es adecuada para experimentos de red, entornos restringidos y simulaciones de conectividad.
9. Anexo: Capturas de pantalla
Las capturas que has proporcionado se incluirán como anexos en el informe final en PDF/Markdown si lo deseas. Puedo incrustarlas automáticamente con sus rutas correspondientes.
❓ ¿Quieres que lo convierta en PDF?
Puedo generarlo formateado y embellecido.
O si prefieres un README.md para GitHub, también te lo preparo.
Prompt
ok, ahora necesitaria un articulo para mi blog, en ingles. El tono que has empleado me parece correcto, quizas porque es algo parecido a mi propio tono al explicartelo, solo corregiria algunos aspectos relativos a la transicion entre cada una de las partes.
Lo que si, antes de hacerlo, tengo curiosidad sobre lo del “formato cientifico”, ¿podrias explicarme como seria, y con que proposito?
Response
Claro — te explico exactamente qué es un “formato científico” en el contexto de escribir un artículo o informe técnico, cuándo se usa, cómo se estructura y qué ventajas tiene. Esto te permitirá decidir si quieres que prepare tu artículo sobre la conexión PAN + Tailscale también en ese estilo.
🧪 Qué es el “formato científico”
Un artículo en formato científico sigue las convenciones típicas de las publicaciones académicas y científicas (IEEE, ACM, Springer, arXiv…). Su estructura, su estilo y su tono están diseñados para:
- ser muy formal,
- demostrar evidencia,
- ser reproducible,
- explicar claramente el método,
- separar objetivamente resultados y conclusiones,
- y permitir comparaciones con otros trabajos.
No se escribe “como un blog”, sino como un estudio.
📐 Estructura típica del formato científico
Aunque hay variaciones, el estándar casi universal es algo como:
1. Abstract (Resumen ejecutivo de 150–250 palabras)
Una descripción muy condensada que explique:
- el problema abordado,
- el enfoque,
- la metodología,
- los resultados,
- y la conclusión principal.
Es lo primero del artículo, pero suele redactarse al final.
2. Introduction
Aquí se explica:
- el contexto del problema,
- por qué es relevante,
- cuál es la limitación del enfoque tradicional,
- cuál es la contribución del artículo.
El tono es formal y fundamentado.
3. Related Work (Opcional, si hay comparaciones)
Se explica cómo otras soluciones intentan resolver el mismo problema:
- soluciones existentes,
- investigaciones previas,
- enfoques alternativos.
Es un punto muy académico que no siempre se usa en blog posts.
4. Methods / Methodology
Es la parte más importante en ingeniería:
- Cómo se realizó el experimento
- Qué herramientas se usaron
- Cómo se configuraron
- Qué condiciones había
- Qué pasos pueden seguir otros para replicarlo
Este apartado suele ser el más largo.
5. Results
Presenta los resultados obtenidos:
- tablas,
- gráficas,
- capturas,
- resultados numéricos (como ping, RTT, etc.).
El tono es puramente descriptivo: no se interprestan aquí, eso va en “Discussion”.
6. Discussion
Aquí se explica:
- por qué los resultados importan,
- qué implicaciones tienen,
- qué limitaciones existen,
- qué comportamiento emergente apareció.
Es donde “se piensa sobre lo que pasó”.
7. Conclusion
Resume las conclusiones clave del trabajo, normalmente:
- qué se ha demostrado,
- qué aporta,
- qué se puede mejorar,
- cuál es el siguiente paso.
8. References (si corresponde)
Citas a:
- documentación técnica,
- papers,
- estándares,
- RFCs,
- repositorios relevantes.
🧠 ¿Por qué usar formato científico?
Ventajas:
✔ Para presentar resultados serios
Si lo que necesitas es documentar un experimento, un método de red, o una técnica reproducible, este formato da credibilidad técnica.
✔ Para compartirlo con colegas de ingeniería
Es excelente para que otro ingeniero pueda:
- entender tus pasos,
- seguirlos,
- replicarlos,
- validarlos.
✔ Para crear documentación formal del equipo o del proyecto
Mucho más sólido que un blog post.
✔ Para comparar técnicas
Si en el futuro queréis evaluar otras soluciones, tener este documento en formato científico facilita:
- benchmark,
- reproducibilidad,
- análisis comparativo.
✖ ¿Cuándo NO usar formato científico?
- Cuando lo que buscas es un artículo divulgativo.
- Si quieres un texto más personal, narrado en primera persona.
- Si quieres un tono más cercano, como un blog técnico.
- Si no hay interés en reproducibilidad exacta.
🤝 Podemos hacer ambos:
- Un artículo de blog en inglés, más narrativo, atractivo y con mejor fluidez (como tú pides).
- Un artículo científico estructurado para ingeniería/redes, que podéis enviar internamente o usar como documentación oficial.
❓ ¿Quieres que prepare ahora el artículo del blog?
Puedo generarlo ya mismo en inglés, con el estilo agradable y técnico que te gusta, mejorando todas las transiciones entre secciones.
O si prefieres que primero te genere la versión científica, puedo hacerlo también.
¿Qué opción prefieres?
- Blog Post
- Scientific Article
- Both
Prompt
aunque me gustaria publicar un articulo cientifico (tengo complejo de no haber publicado ninguno), creo que no seria lo adecuado para este caso, aunque me haya costado encontrar la solucion y haya tenido que publicar alternativas.
Escribe el articulo para el blog en ingles, sin saltarte NINGUN detalle del proceso tanto de ideas como busquedas de soluciones como solucion final, y respetando el orden cronologico. O sea, basicamente las clarificaciones que has hecho de mi explicacion de voz, dando un formato uniforme a las conexiones este textos. No obstante, aunque se mantenga el tono, estilo y estructura, si quizas darle un tono mas formal y asertivo, que se vea que ha sido un trabajo serio con resultados y no un experimento friki, pero sin entrar en ser demasiado serio y aseptico, quizas algo que se pudiera presentar en un meetup, o que un tecnico pudiera encontrar interesante y entretenido de leer
Response
Perfecto. Voy a generar un artículo completo para tu blog, en inglés, siguiendo EXACTAMENTE estas condiciones:
✔ Incluye absolutamente todos los detalles del proceso ✔ Respeta el orden cronológico real de cómo descubriste y descartaste soluciones ✔ Tono técnico, serio pero cercano, adecuado para un meetup o blog de ingeniería ✔ Narración clara, con transiciones suaves y secciones limpias ✔ No pierde ninguna información técnica ✔ No es ni demasiado científico ni demasiado informal ✔ Lo puede leer un ingeniero y pensar: “Interesante, útil y bien explicado”
Voy a escribirlo como si fuera un post de ingeniería profesional, con un tono tipo:
- Slack Engineering Blog,
- Cloudflare Blog,
- Tailscale Engineering Blog,
- o Hackaday.io.
Aquí va el artículo completo:
Routing an Android Device Through a Laptop Using Bluetooth PAN and Tailscale
A Practical Walkthrough of a Surprisingly Hard Problem
For a task that sounded trivial at first, this experiment turned into a surprisingly deep dive into Android networking limitations, routing constraints, VPN behavior, and how Bluetooth Personal Area Networking (PAN) actually works under the hood.
My goal sounded simple:
Connect an Android phone to my Linux laptop over Bluetooth PAN and route ALL traffic from the phone to the Internet through the laptop — without Wi-Fi, without mobile data, without USB tethering, and without root.
What follows is a detailed, chronological walkthrough of everything I tried — from the obvious approaches to the ones that Android outright refuses — and the final solution that actually worked: using Tailscale as a VPN running on top of a Bluetooth PAN link.
This post is meant to be:
- technically accurate
- highly detailed
- fully reproducible
- and still enjoyable to read for other engineers who appreciate weird networking challenges.
Let’s begin.
1. The Setup and Initial Observations
The first step was straightforward: I enabled Bluetooth tethering (Bluetooth PAN) on my Android phone, connected it to my Linux laptop, and verified that the connection worked.
This part was surprisingly smooth:
- The laptop received a
bnep0interface with an IP like192.168.44.34. - The phone received the counterpart (
192.168.44.1). - I could ping from the laptop to the phone.
- And from the phone (using Termux) I could access a local HTTP server running on the laptop, confirming bidirectional connectivity.
So far so good. Bluetooth PAN was working perfectly as a local network interface.
But then came the real challenge.
2. The Real Goal: Routing the Phone Through the Laptop
The normal use-case of Bluetooth tethering is:
Laptop → Phone → Internet
But what I needed was the opposite:
Phone → Laptop → Internet
This breaks the default assumptions of Android:
- The phone wants to provide Internet via Bluetooth, not consume it.
- Android networking is extremely locked down.
- You cannot modify routing tables without root.
- Bluetooth PAN cannot have a proxy configured.
- And Android prioritizes Wi-Fi and mobile data interfaces aggressively.
So even though the PAN connection existed, Android had no idea it should use it as a gateway.
3. Attempt 1 — Modifying Android Routes via Termux (Fail)
My first idea was classic Linux networking:
ip route list
ip route add default via 192.168.44.34 dev bt-pan
…except Android does not allow this.
Inside Termux:
-
ip rule list→ Permission denied -
ip route→ read-only - Installing
sudo→ impossible - Installing
tsu→ impossible (Termux could not access the Internet)
And of course:
Android prevents changing the default route without root.
This approach was dead on arrival.
4. Attempt 2 — Using a Local Proxy on the Laptop (Fail)
The next idea was to expose a proxy on the laptop using Python:
python3 -m http.server
Simple, quick, and familiar.
The plan was:
- Phone uses laptop as an HTTP proxy
- Laptop forwards traffic to the real Internet
But here came another Android limitation:
Android does NOT allow setting a proxy for Bluetooth PAN connections.
Proxy configuration is only available for:
- Wi-Fi networks
- Mobile data (in some OEMs)
- VPNs
But not Bluetooth.
So even though I could serve files to the phone using the laptop, I could not tell the phone to use the laptop as a gateway via a proxy.
Another dead end.
5. Attempt 3 — Setting Up a Custom OpenVPN Server (Rejected)
The next logical idea was:
“What if I run a VPN server on the laptop and make Android send everything through it?”
Totally possible in theory:
- Run OpenVPN/WireGuard on the laptop
- Import config on Android
- Force all traffic through the tunnel
However:
- I would need to generate certificates
- Copy them to Android
- Prepare
.ovpnfiles - Configure firewall routes
- Enable forwarding
- And troubleshoot everything by hand
Given the time constraints and operational complexity, this was too heavy.
I needed something cleaner.
6. The Breakthrough — Leveraging Tailscale
At this point I remembered that:
- I already had Tailscale installed on both the laptop and the phone
- Tailscale supports Exit Nodes
- And more importantly… Android routes all traffic through the VPN by default
That last point is critical.
When a VPN is active, Android does:
default route → VPN interface
regardless of the physical interface underneath.
And suddenly everything clicked.
If I activate Tailscale on the phone, it will prefer the VPN endpoint as its default gateway. If the laptop is configured as an Exit Node, it will become the phone’s route to the Internet. The only remaining question is: will Tailscale connect over Bluetooth PAN?
Spoiler: yes. Perfectly.
7. How Tailscale Behaves in This Scenario
I activated airplane mode, removed the SIM card, and only re-enabled Bluetooth.
The phone now had exactly three network interfaces:
lo-
bt-pan(192.168.44.1) -
tun0(Tailscale, something like100.x.y.z)
No Wi-Fi. No mobile data. No cellular modem. No other paths.
I activated Tailscale and selected my laptop as the Exit Node.
Tailscale did something beautiful:
It detected the laptop as a LAN peer (Bluetooth PAN counts as LAN!) and established a direct tunnel entirely through the PAN link.
Now Tailscale traffic flowed like this:
Phone → bt-pan → Laptop → Tailscale Exit Node (Laptop itself) → Internet
And because the VPN is the default route on Android:
Everything → Tailscale → Laptop → Internet
8. Verification and Testing
To ensure absolutely no traffic leakage, I removed the SIM and stayed in airplane mode.
Then:
✔ Ping from Android → 8.8.8.8
Working perfectly.
✔ Ping from laptop → Android (via PAN)
Working (192.168.44.1).
✔ Ping from laptop → Android (via Tailscale IP)
Working (100.x.y.z).
✔ Browsing the Internet on the phone
Successful request to example.com.
✔ Accessing laptop-hosted HTTP servers
Android could browse:
http://192.168.44.34:8000/
with Python serving on the laptop.
Everything was working exactly as intended:
- Local access via PAN
- VPN routing via Tailscale
- Internet access routed through the laptop
- Completely isolated, no Wi-Fi or mobile data involved
9. Why This Works (Short Version)
This solution works because:
- Bluetooth PAN provides a functional IPv4 LAN interface.
- Tailscale uses whatever network link is available, including PAN.
- Android automatically sends all traffic through VPNs.
- The laptop advertises itself as a Tailscale Exit Node.
- The laptop has real Internet access and NATs packets for the phone.
It is effectively:
A full VPN tunnel running over a Bluetooth PAN connection, with the laptop acting as a router.
No root. No route hacks. No USB. No Wi-Fi. No SIM card.
10. Final Thoughts
This turned out to be a much more interesting experiment than expected. What started as a simple “reverse Bluetooth tethering” problem became a practical demonstration of:
- Android network constraints
- Tailscale’s smart peer discovery
- How VPN default routing works on Android
- The flexibility of Bluetooth PAN as an IP transport
- How creative layering of tools can solve non-standard networking needs
The final result is solid, reproducible, and useful for engineering contexts where devices must operate without Wi-Fi or mobile data, but still need controlled and monitored Internet access.
It’s also a great little example of how sometimes the simplest network tunnel becomes available only after exploring every other dead end.
If you’d like, I can now:
- generate a Markdown version ready for your blog,
- generate a PDF,
- add diagrams (ASCII or Mermaid),
- or help you create a GitHub repo with the instructions.
Just tell me!
Powered by ChatGPT Exporter