Each one rules out the layer below it. Do not skip ahead — the answer is
almost always at step 1 or 2.
1 · Is the peer up, and is it direct?
tailscale status # the peer line ends in "direct" or a relay name
tailscale ip -4 # the address to put in the Host field
A relayed peer still works. It is slower, and on a bad day it is the
difference between a usable and an unusable terminal.
2 · Does plain SSH work from a laptop on the same mesh?
ssh -v user@m1-pro.your-tailnet.ts.net
If this fails, stop. Nothing above it can work — mosh has no standalone
mode, and Moshpit is an SSH client first.
3 · Does UDP actually round-trip?
This is the check nobody runs, and it is the one that finds the problem.
Pick a port inside your range, listen on the server, send from a machine on the same
network as the phone:
# on the server
echo REPLY | nc -u -l 60005 > /tmp/udp-in
# from a laptop on the same Wi-Fi as the phone
echo PING | nc -u -w3 m1-pro.your-tailnet.ts.net 60005
Each side must see the other's word. Server sees PING but
the client never sees REPLY = the return path is dead, which is exactly
the mosh black-screen. That is a network answer, not an app answer.
4 · Is the range open on the interface the traffic arrives on?
sudo ufw status verbose # Debian / Ubuntu
sudo firewall-cmd --list-all # Fedora / RHEL
sudo ufw allow in on tailscale0 to any port 60000:61000 proto udp
Then check the cloud security group separately if there is one. And
confirm it is the same range Moshpit is configured for — the default is
60000–61000, but it is editable.
5 · Ask the app what it is seeing
Long-press the transport pill in the terminal's top bar on a mosh
session for MOSH DIAGNOSTICS: datagrams, applied,
parse fails, gaps. The line that matters most is the one that
is not a number:
MOSH DIAGNOSTICS
No datagrams yet.
That means literally nothing has come back — the counter increments
before any decryption or parsing. Dead return path. Stop debugging Moshpit and go back
to step 3.
6 · Take the escape hatch
If a network is eating your UDP and you need a terminal now, tap
Switch to SSH on the banner, or the MOSH pill in the top bar and confirm
"Switch to SSH?". SSH rides TCP through the same path that dropped the
datagrams. The banner is dismissible and never blocks the terminal — your keystrokes
were reaching the server the whole time; only the rendering was starved.
⚠ Mosh isn't receiving data — your network may be
blocking UDP (VPN, proxy, or firewall).
Switch to SSH ×