Suppongo che 192.168.0.1 non sia il gateway utilizzato sul router B, ma piuttosto il proprio IP sull'interfaccia LAN. Se il router A sta fornendo indirizzi tramite DHCP, sta anche informando B su quale gateway utilizzare e questo dovrebbe essere 192.168.1.1. Se puoi accedere a Internet dalla sottorete di B, questo è il caso, a meno che tu non abbia una configurazione molto eccitante che richiede una spiegazione molto più dettagliata.
Per rispondere alla tua domanda, le macchine C e D sono su reti separate, ma D può avviare una connessione con C bene. Non riesce a trovare l'IP 192.168.1.3 sulla propria sottorete, quindi passa la richiesta al suo gateway, ovvero al router B, che sa dove si trova la macchina target.
Il contrario è più difficile. Né l'host D stesso né il suo gateway, il router A, sanno che il traffico destinato a 192.168.0.199 dovrebbe attraversare il router B. Anche se lo hanno fatto, ad esempio definendo un percorso "192.168.0.0/24 attraverso 192.168.1.2", router B non consentirebbe ai pacchetti di passare dall'interfaccia WAN all'interfaccia LAN.
Sebbene sia meglio usare B come switch "stupido" anziché come router semplicemente collegando tutto alle sue porte LAN, è possibile aggirare questo problema senza cambiare la topologia di rete. Sarà necessario inoltrare le porte sul router B utilizzate nelle comunicazioni che hanno origine al di fuori della rete 192.168.0.0/24.
Ad esempio, se la macchina D esegue un server Web, a cui deve essere avviata la comunicazione dalla macchina C, è necessario configurare il router B per inoltrare la porta 80 verso 192.168.0.199. In alternativa, dato che il tuo router supporta tale funzione, puoi posizionare la macchina D nella DMZ del router B, inoltrando così tutte le porte a questa macchina, a meno che non siano configurate diversamente. Normalmente, questo potrebbe essere considerato insicuro, ma in questo caso la macchina sarà comunque protetta attraverso il router A, a meno che la rete 192.168.1.0/24 non sia compromessa.