O que eu fiz para resolver esta situação é executar meu próprio servidor DNS que encaminha consultas não resolvidas para o DNS público do Google (eu também usei o OpenDNS) e contém registros A e PTR para o meu próprio nome DNS dyâmico. Assim, de dentro da minha rede, meu servidor DNS é usado e ele resolve o nome para o IP interno do servidor. Outras consultas são encaminhadas para o 8.8.8.8/8.8.4.4 do Google.
Se você usa uma máquina separada para essa finalidade, é necessário fornecer um IP estático e configurar o DHCP para distribuir esse endereço como o servidor DNS.
Eu não uso o Tomato, mas se ele usa o BIND, ele está basicamente executando um servidor DNS. Há outros servidores DNS mais leves que o BIND.
Configurar seu próprio servidor DNS exigirá um pouco de estudo, mas se você estiver interessado em DNS é muito educativo.