Саму камеру можно было оставить на... эээ... хмык

вот откуда ноги росли у бага.
Объясняю. Карту в руки возьми, чтобы следить за мыслью.
-t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination $CAMERA_IP:$CAMERA_PORT
Поскольку nat/PREROUTING выполняется до filter/FORWARD, любой пакет, адресованный на порт 80 и проходящий через нашу машину, будет пересылаться на камеру.
В том числе попытки подключиться к HTTP серверам в интернете.
Чтобы этого не было, надо объяснить нетфильтру, какие именно пакеты мы хотим куда посылать.
Как-то так:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# Отрежем пакеты, относящиеся к уже установленным соединениям
-A PREROUTING -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Пошлём новые входящие соединения из интернета на камеру
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.0.20:80
# Ну и то что было - NAT на выходе
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
COMMIT
P.S.
Тем, у кого "--dport без -m tcp работает" - iptables само дописывает -m tcp при передаче правила нетфильтру. Так что так.