I have a small amount of data I want to send at regular intervals, such as from an IoT device. How would I design a network protocol or use existing protocols in such a way that my ISP cannot block these packets? (For example due to political or commercial censorship.) Assume that the device is behind a typical home or office router utilizing NAT.
If it is not possible to design an unblockable protocol, what steps can minimize the likelihood of blocking?
So far I imagine the following:
- Packets can be blocked by origin
- Packets can be blocked by destination host or port
- Packets can be blocked by content
Is number 1 solved by NAT? I.e. would the ISP have to block everything coming from my single IP address in order to block this device?
Number 3 is presumably not an issue, as I could hash or encrypt the packets, add padding bytes, etc. to disguise them.
But what about number 2? This seems like the stickiest issue. It needs to know where to send its packets, which inevitably seems like needing to know hard-coded IP addresses or making a DNS lookup, either of which could be easily blocked. The device could use some sort of P2P protocol, but that would presumably need to fall back to hard coded nodes to bootstrap itself.
I suppose one "solution" would be to just perform a scan of the entire IPv4 address space and look for a particular signature matching the desired host. Is there a cleverer way?