Estou assumindo que 192.168.0.1 não é o gateway usado no roteador B, mas sim seu próprio IP na interface da LAN. Se o roteador A estiver fornecendo endereços por meio do DHCP, ele também informará B sobre qual gateway usar, e deve ser 192.168.1.1. Se você pode acessar a Internet a partir da sub-rede de B, esse é o caso, a menos que você tenha uma configuração muito exigente que precise de uma explicação muito mais detalhada.
Para responder à sua pergunta, as máquinas C e D estão em redes separadas, mas D pode iniciar uma conexão com C muito bem. Ele não consegue encontrar o IP 192.168.1.3 em sua própria sub-rede e, portanto, passa a solicitação para o gateway, ou seja, o roteador B, que sabe onde está localizada a máquina de destino.
O contrário é mais difícil. Nem o próprio host D nem seu gateway, roteador A, sabe que o tráfego destinado ao 192.168.0.199 deve atravessar o roteador B. Mesmo que o fizessem, por exemplo, definindo uma rota '192.168.0.0/24 através do 192.168.1.2', roteador B não permitiria que os pacotes passassem de sua interface WAN para a interface LAN.
Embora seja melhor usar B como um comutador "burro" em vez de um roteador simplesmente conectando tudo às suas portas LAN, é possível contornar esse problema sem alterar a topologia da rede. Você precisará encaminhar portas no roteador B usadas na comunicação originada fora da rede 192.168.0.0/24.
Por exemplo, se a máquina D estiver executando um servidor da Web, para o qual a comunicação deve ser iniciada a partir da máquina C, você desejará configurar o roteador B para encaminhar a porta 80 para 192.168.0.199. Como alternativa, dado que o seu roteador suporta esse recurso, você pode colocar a máquina D na DMZ do roteador B, encaminhando todas as portas para essa máquina, a menos que estejam configuradas de outra forma. Normalmente, isso pode ser considerado inseguro, mas, neste caso, a máquina ainda estará protegida pelo roteador A, a menos que a rede 192.168.1.0/24 esteja comprometida.