Supongo que 192.168.0.1 no es la puerta de enlace utilizada en el enrutador B, sino más bien su propia IP en la interfaz LAN. Si el enrutador A está dando direcciones a través de DHCP, también está informando a B de qué puerta de enlace usar, y esto debería ser 192.168.1.1. Si puede acceder a Internet desde la subred de B, este es el caso, a menos que tenga una configuración muy interesante que necesite una explicación mucho más detallada.
Para responder a su pregunta, las máquinas C y D están en redes separadas, pero D puede iniciar una conexión con C muy bien. No puede encontrar la IP 192.168.1.3 en su propia subred, por lo que pasa la solicitud a su puerta de enlace, es decir, el enrutador B, que sabe dónde se encuentra la máquina de destino.
Al revés es más difícil. Ni el host D ni su puerta de enlace, el enrutador A, saben que el tráfico destinado a 192.168.0.199 debe atravesar el enrutador B. Incluso si lo hicieran, por ejemplo, definiendo una ruta '192.168.0.0/24 a través de 192.168.1.2', enrutador B no permitiría que los paquetes pasen de su interfaz WAN a la interfaz LAN.
Aunque es mejor que use B como un interruptor "tonto" en lugar de un enrutador simplemente conectando todo a sus puertos LAN, es posible evitar este problema sin cambiar la topología de la red. Deberá reenviar los puertos del enrutador B que se utilizan en la comunicación que se origina fuera de la red 192.168.0.0/24.
Por ejemplo, si la máquina D está ejecutando un servidor web, para el cual se debe iniciar la comunicación desde la máquina C, deberá configurar el enrutador B para reenviar el puerto 80 hacia 192.168.0.199. Alternativamente, dado que su enrutador admite dicha función, puede colocar la máquina D en la DMZ del enrutador B, reenviando todos los puertos a esta máquina, a menos que estén configurados de otra manera. Normalmente, esto podría considerarse inseguro, pero en este caso, la máquina aún estará protegida a través del enrutador A, a menos que la red 192.168.1.0/24 se vea comprometida.