Update: Turns out enabling ‘data saver’ turns off ipv4 and udp. Turned that off and now wireguard works fine.
I been debugging why wireguard wont work while on a cell connection. I use a tracfone prepaid phone(on verizon network) and a vultr box as my server. My learnings so far:
- Ipv4 access is heavily restricted, eg if I run udp/tcp on my personal box on port 443, phone can’t access that via ipv4. Common ipv4 websites work.
- Switching to an ipv6 IP makes tcp connections like ssh work. UDP connections mostly work.
- I had one successful wireguard connection during my testing over ipv6…However eventually I noticed it verizon started rejecting wireguard responses from server.
- If I swap out wireguard server for UDP echo server then I stop getting the ICMP ‘destination unreachable errors’, packets make it back to my phone.
Has anyone seen ISP blocking of wireguard like this? I noticed wireshark has handlers for wireguard protocol packets, so verizon can tell them apart too.
What’s the way out of this? I’ve seen people tunnel wireguard over websockets, but that’s not part of standard client, requires more complicated connection sequence. Any other suggestions?
tcpdump:
05:10:59.829872 IP6 (flowlabel 0x00d71, hlim 237, next-header UDP (17) payload length: 156) 2600:1010:b054:33e1:cce4:580d:932e:4318.
38081 > server.4000: [udp sum ok] UDP, length 148
05:10:59.830679 IP6 (class 0x88, hlim 64, next-header UDP (17) payload length: 100) server.4000 > 2600:1010:b054:33e1:cce4:580d:932e:4318.
38081: [udp sum ok] UDP, length 92
05:10:59.909712 IP6 (hlim 236, next-header ICMPv6 (58) payload length: 148) 2600:1010:b054:33e1:cce4:580d:932e:4318 > server: [icmp6 sum ok] ICMP6, destination unreachable, unreachable port, 2600:1010:b054:33e1:cce4:580d:932e:4318 udp port
38081