Orbot (iOS) not working with Obfs4 bridges

Hi there! I’ve recently set up a private bridge (for reasons).

Whenever I paste the bridge line into Orbot and attempt to connect, it will show 100% for a brief moment before terminating the connection.
I’ve never seen this behavior before.

Debugging steps I’ve tried:
Double checking bridge line (done!)
Connecting to the bridge via the Tor Browser Mac (success)!
Connecting to the bridge via Orbot 1.6.7 Mac (success)!
Connecting to the bridge via Onion Browser (success)!
Reinstalling Orbot (still didn’t work)
Switching from WiFi to mobile data (still didn’t work)
Rebooting my phone (nope, still no luck).

I am on iOS 12.2.1, using Orbot 1.6.7

Can you please share Orbot logs?
To get them, tap the icon in the upper left corner of the main screen

Hi, Orbot doesn’t even show any logs… Here’s a video demonstrating (internet archive).

Update:

It seems like a quirk of Orbot is that it treats bridge lines slightly differently. In TBB, Bridge obfs4 bridgeline would be treated just like obfs4 bridgeline

However, Orbot doesn’t consider Bridge obfs4 bridgeline as valid and so just bails straight away. Changing it to obfs4 bridgeline got bootstrapping working before stopping at 75%

Additional debugging that I’ve tried:

Get several extra bridges, just in case the weirdness was caused by having only one. Result? Did not work.

Orbot logs

I’ve manually removed fingerprints, IP addresses, etc to not leak bridges

Jan 21 22:02:56.000 [notice] Tor 0.4.8.10 opening new log file.
Jan 21 22:02:56.304 [notice] We compiled with OpenSSL 30200000: OpenSSL 3.2.0 23 Nov 2023 and we are running with OpenSSL 30200000: 3.2.0. These two versions should be binary compatible.
Jan 21 22:02:56.314 [notice] Tor 0.4.8.10 running on Darwin with Libevent 2.1.12-stable, OpenSSL 3.2.0, Zlib 1.2.12, Liblzma N/A, Libzstd N/A and Unknown N/A as libc.
Jan 21 22:02:56.314 [notice] Tor can’t help you if you use it wrong! Learn how to be safe at Am I totally anonymous if I use Tor? | Tor Project | Support
Jan 21 22:02:56.314 [notice] Configuration file “/private/var/mobile/Containers/Data/PluginKitPlugin/BD9050CB-CB47-422F-AD02-672F5272C9C1/.torrc” not present, using reasonable defaults.
Jan 21 22:02:56.316 [warn] MaxMemInQueues is set to a low value; if your client doesn’t work, this may be the reason why.
Jan 21 22:02:56.318 [notice] Opening Socks listener on 127.0.0.1:0
Jan 21 22:02:56.318 [notice] Socks listener listening on port 49551.
Jan 21 22:02:56.318 [notice] Opened Socks listener connection (ready) on 127.0.0.1:49551
Jan 21 22:02:56.318 [notice] Opening DNS listener on 127.0.0.1:0
Jan 21 22:02:56.318 [notice] DNS listener listening on port 49934.
Jan 21 22:02:56.318 [notice] Opened DNS listener connection (ready) on 127.0.0.1:49934
Jan 21 22:02:56.318 [notice] Opening Control listener on 127.0.0.1:0
Jan 21 22:02:56.318 [notice] Control listener listening on port 49552.
Jan 21 22:02:56.318 [notice] Opened Control listener connection (ready) on 127.0.0.1:49552
Jan 21 22:02:56.000 [notice] {GENERAL} Parsing GEOIP IPv4 file /var/containers/Bundle/Application/D52A0351-DBB9-495B-9EE4-E338902A73AE/Orbot.app/Frameworks/Tor.framework/GeoIP.bundle/geoip.
Jan 21 22:02:56.000 [notice] {GENERAL} Parsing GEOIP IPv6 file /var/containers/Bundle/Application/D52A0351-DBB9-495B-9EE4-E338902A73AE/Orbot.app/Frameworks/Tor.framework/GeoIP.bundle/geoip6.
Jan 21 22:02:56.000 [notice] {CONTROL} Bootstrapped 0% (starting): Starting
Jan 21 22:02:56.000 [notice] {GUARD} Starting with guard context “bridges”
Jan 21 22:02:56.000 [notice] {DIR} Delaying directory fetches: No running bridges
Jan 21 22:02:56.000 [notice] {CONTROL} New control connection opened from 127.0.0.1.
Jan 21 22:02:57.000 [notice] {CONTROL} Bootstrapped 1% (conn_pt): Connecting to pluggable transport
Jan 21 22:02:57.000 [notice] {CONTROL} Bootstrapped 2% (conn_done_pt): Connected to pluggable transport
Jan 21 22:02:57.000 [notice] {CONTROL} Bootstrapped 10% (conn_done): Connected to a relay
Jan 21 22:02:57.000 [notice] {CONTROL} Bootstrapped 14% (handshake): Handshaking with a relay
Jan 21 22:02:58.000 [notice] {CONTROL} Bootstrapped 15% (handshake_done): Handshake with a relay done
Jan 21 22:02:58.000 [notice] {CONTROL} Bootstrapped 20% (onehop_create): Establishing an encrypted directory connection
Jan 21 22:02:58.000 [notice] {CONTROL} Bootstrapped 25% (requesting_status): Asking for networkstatus consensus
Jan 21 22:02:58.000 [notice] {DIR} new bridge descriptor ‘TributeForV’ (fresh): $[redacted]~TributeForV [[redacted]] at [redacted]
Jan 21 22:02:58.000 [notice] {DIR} Ignoring directory request, since no bridge nodes are available yet.
Jan 21 22:02:59.000 [notice] {DIR} new bridge descriptor ‘KauBridgeBlue’ (fresh): $[redacted]~KauBridgeBlue [[redacted]] at [redacted]
Jan 21 22:02:59.000 [notice] {DIR} new bridge descriptor ‘KauBridgeDot’ (fresh): $[redacted]~KauBridgeDot [[redacted]] at [redacted]
Jan 21 22:02:59.000 [notice] {DIR} new bridge descriptor ‘KauBridgePale’ (fresh): $[redacted]~KauBridgePale [[redacted]] at [redacted]
Jan 21 22:02:59.000 [notice] {CONTROL} Bootstrapped 30% (loading_status): Loading networkstatus consensus
Jan 21 22:02:59.000 [notice] {DIR} new bridge descriptor ‘Lisbeth’ (fresh): $[redacted]~Lisbeth [[redacted]] at [redacted]
Jan 21 22:03:00.000 [notice] {DIR} new bridge descriptor ‘hopperlab’ (fresh): $[redacted]~hopperlab [[redacted]] at [redacted]
Jan 21 22:03:00.000 [notice] {DIR} new bridge descriptor ‘griinchux’ (fresh): $[redacted]~griinchux [[redacted]] at [redacted]
Jan 21 22:03:00.000 [notice] {DIR} new bridge descriptor ‘zipfelmuetze2’ (fresh): $[redacted]~zipfelmuetze2 [[redacted]] at [redacted]
Jan 21 22:03:02.000 [notice] {DIR} I learned some more directory information, but not enough to build a circuit: We have no usable consensus.
Jan 21 22:03:03.000 [notice] {CONTROL} Bootstrapped 40% (loading_keys): Loading authority key certs
Jan 21 22:03:03.000 [notice] {NET} The current consensus has no exit nodes. Tor can only build internal paths, such as paths to onion services.
Jan 21 22:03:03.000 [notice] {CONTROL} Bootstrapped 45% (requesting_descriptors): Asking for relay descriptors
Jan 21 22:03:03.000 [notice] {DIR} I learned some more directory information, but not enough to build a circuit: We need more microdescriptors: we have 0/7874, and can only build 0% of likely paths. (We have 100% of guards bw, 0% of midpoint bw, and 0% of end bw (no exits in consensus, using mid) = 0% of path bw.)
Jan 21 22:03:03.000 [notice] {CONTROL} Bootstrapped 50% (loading_descriptors): Loading relay descriptors
Jan 21 22:03:11.000 [notice] {DIR} new bridge descriptor ‘[redacted]’ (fresh): $[redacted]~[redacted] [[redacted]] at [redacted]
Jan 21 22:03:13.000 [notice] {NET} The current consensus contains exit nodes. Tor can build exit and internal paths.
Jan 21 22:03:15.000 [notice] {DIR} new bridge descriptor ‘GeorgetownPontem’ (fresh): $[redacted]~GeorgetownPontem [[redacted]] at [redacted]
Jan 21 22:03:56.000 [notice] {GENERAL} We’re low on memory (cell queues total alloc: 528 buffer total alloc: 5251072, tor compress total alloc: 0 (zlib: 0, zstd: 0, lzma: 0), rendezvous cache total alloc: 0). Killing circuits withover-long queues. (This behavior is controlled by MaxMemInQueues.)
Jan 21 22:03:56.000 [notice] {GENERAL} Removed 5247504 bytes by killing 1 circuits; 10 circuits remain alive. Also killed 0 non-linked directory connections. Killed 0 edge connections
Jan 21 22:04:29.000 [notice] {GENERAL} We’re low on memory (cell queues total alloc: 528 buffer total alloc: 5255168, tor compress total alloc: 0 (zlib: 0, zstd: 0, lzma: 0), rendezvous cache total alloc: 0). Killing circuits withover-long queues. (This behavior is controlled by MaxMemInQueues.)
Jan 21 22:04:29.000 [notice] {GENERAL} Removed 4882960 bytes by killing 1 circuits; 1 circuits remain alive. Also killed 0 non-linked directory connections. Killed 0 edge connections
Jan 21 22:04:42.000 [notice] {CONTROL} Bootstrapped 55% (loading_descriptors): Loading relay descriptors
Jan 21 22:06:46.000 [notice] {GENERAL} We’re low on memory (cell queues total alloc: 528 buffer total alloc: 5263360, tor compress total alloc: 0 (zlib: 0, zstd: 0, lzma: 0), rendezvous cache total alloc: 0). Killing circuits withover-long queues. (This behavior is controlled by MaxMemInQueues.)
Jan 21 22:06:46.000 [notice] {GENERAL} Removed 3149952 bytes by killing 1 circuits; 5 circuits remain alive. Also killed 0 non-linked directory connections. Killed 0 edge connections
Jan 21 22:06:55.000 [notice] {GENERAL} We’re low on memory (cell queues total alloc: 528 buffer total alloc: 5242880, tor compress total alloc: 0 (zlib: 0, zstd: 0, lzma: 0), rendezvous cache total alloc: 0). Killing circuits withover-long queues. (This behavior is controlled by MaxMemInQueues.)
Jan 21 22:06:55.000 [notice] {GENERAL} Removed 5206608 bytes by killing 2 circuits; 3 circuits remain alive. Also killed 0 non-linked directory connections. Killed 1 edge connections
Jan 21 22:06:55.000 [warn] {BUG} connection_edge_about_to_close: Bug: (Harmless.) Edge connection (marked at src/core/or/circuitlist.c:2747) hasn’t sent end yet? (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} tor_bug_occurred_: Bug: src/core/or/connection_edge.c:1086: connection_edge_about_to_close: This line should not have been reached. (Future instances of this warning will be silenced.) (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: Tor 0.4.8.10: Line unexpectedly reached at connection_edge_about_to_close at src/core/or/connection_edge.c:1086. Stack trace: (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 0 Tor 0x000000010448c500 log_backtrace_impl + 104 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 1 Tor 0x0000000104499bd8 tor_bug_occurred_ + 324 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 2 Tor 0x00000001043b07fc connection_ap_about_to_close + 140 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 3 Tor 0x000000010440ec4c connection_unlink + 40 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 4 Tor 0x000000010440e85c close_closeable_connections + 104 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 5 Tor 0x000000010427bdac event_persist_closure + 892 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 6 Tor 0x000000010427b208 event_process_active_single_queue + 716 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 7 Tor 0x00000001042741a0 event_process_active + 388 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 8 Tor 0x0000000104272a60 event_base_loop + 824 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 9 Tor 0x000000010440e474 do_main_loop + 328 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 10 Tor 0x000000010440a6f8 tor_run_main + 312 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 11 Tor 0x000000010405241c -[TORThread main] + 228 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 12 Foundation 0x00000001a408fde0 C52A9630-60F1-3D48-A6C3-50A20DE78C6A + 720352 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 13 libsystem_pthread.dylib 0x000000020f02c4d4 _pthread_start + 136 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} Bug: 14 libsystem_pthread.dylib 0x000000020f02ba10 thread_start + 8 (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} connection_ap_about_to_close: Bug: Closing stream (marked at src/core/or/circuitlist.c:2747) without sending back a socks reply. (on Tor 0.4.8.10 )
Jan 21 22:06:55.000 [warn] {BUG} connection_ap_about_to_close: Bug: Closing stream (marked at src/core/or/circuitlist.c:2747) without having set end_reason. (on Tor 0.4.8.10 )
Jan 21 22:06:58.000 [notice] {DIR} Ignoring directory request, since no bridge nodes are available yet.
Jan 21 22:07:02.000 [notice] {CONTROL} Bootstrapped 61% (loading_descriptors): Loading relay descriptors
Jan 21 22:07:04.000 [notice] {CONTROL} Bootstrapped 68% (loading_descriptors): Loading relay descriptors
Jan 21 22:07:04.000 [notice] {CIRC} No circuits are opened. Relaxed timeout for circuit 31 (a General-purpose client 1-hop circuit in state doing handshakes with channel state open) to 60000ms. However, it appears the circuit has timed out anyway.
Jan 21 22:07:06.000 [notice] {CONTROL} Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits

At this point Orbot just stops and the connection is interrupted. Any attempts to start it will just result in Tor instantly crashing and me having to clear cache.

Hi, is there any update on the situation or workarounds?