Acontece que o problema é o que eu suspeitava: meu roteador está realmente atrás de outro roteador (que está fora do meu controle).
Eu aprendi isso ao executar um traceroute no google.com. Aqui está a saída que recebi (com meu IP público x):
pi@raspberrypi:~ $ traceroute google.com
traceroute to google.com (216.58.216.238), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 5.234 ms 4.900 ms 4.603 ms
2 10.32.254.2 (10.32.254.2) 4.295 ms 4.006 ms 3.720 ms
3 rrcs-xx-xx-xxx-xxx.central.biz.rr.com (xx.xx.xxx.xxx) 3.432 ms 3.150 ms 2.863 ms
4 be24.clmkohpe01r.midwest.rr.com (65.189.140.162) 15.875 ms 15.545 ms 15.263 ms
5 bu-ether25.chctilwc00w-bcr00.tbone.rr.com (107.14.19.16) 23.651 ms 23.379 ms 23.101 ms
6 bu-ether11.chcgildt87w-bcr00.tbone.rr.com (66.109.6.20) 27.078 ms 49.076 ms 48.716 ms
7 216.3.52.41 (216.3.52.41) 48.317 ms 48.048 ms 47.777 ms
8 216.3.52.54 (216.3.52.54) 94.608 ms 94.334 ms 94.061 ms
9 216.239.42.136 (216.239.42.136) 115.270 ms 75.523 ms 75.069 ms
10 216.239.51.227 (216.239.51.227) 27.140 ms 26.871 ms 30.940 ms
11 ord31s22-in-f238.1e100.net (216.58.216.238) 35.000 ms 34.726 ms 24.944 ms
O endereço 192.168.x.x é o roteador no meu apartamento. Como o próximo salto é 10.x.x.x (outro intervalo de endereços IP privados comuns), sei que deve ser outro roteador.
Como resultado, parece que não poderei fazer nenhum tipo de encaminhamento de porta tradicional. Para os meus propósitos, acho que a única solução restante será usar um túnel SSH reverso de um VPS que eu possuo.