Я предполагаю, что 192.168.0.1 - это не шлюз, используемый на маршрутизаторе B, а его собственный IP на интерфейсе локальной сети. Если маршрутизатор A выдает адреса через DHCP, он также сообщает B о том, какой шлюз использовать, и это должно быть 192.168.1.1. Если вы можете получить доступ к Интернету из подсети B, это так, если только у вас нет очень выдающейся настройки, которая требует гораздо более подробного объяснения.
Чтобы ответить на ваш вопрос, машины C и D находятся в отдельных сетях, но D может нормально установить соединение с C. Он не может найти IP 192.168.1.3 в своей собственной подсети, поэтому он передает запрос к своему шлюзу, то есть маршрутизатору B, который знает, где находится целевой компьютер.
Обратный путь сложнее. Ни сам хост D, ни его шлюз, маршрутизатор A, не знают, что трафик, предназначенный для 192.168.0.199, должен проходить через маршрутизатор B. Даже если они это сделали, например, путем определения маршрута «192.168.0.0/24 через 192.168.1.2», маршрутизатор B не позволит пакетам проходить от его интерфейса WAN к интерфейсу LAN.
Хотя вам может быть лучше использовать B в качестве «тупого» коммутатора вместо маршрутизатора, просто подключив все к его портам локальной сети, можно обойти эту проблему, не меняя топологию сети. Вам нужно будет перенаправить порты на маршрутизаторе B, которые используются для связи, исходящей из сети 192.168.0.0/24.
Например, если на машине D запущен веб-сервер, к которому должна быть инициирована связь с машины C, вам нужно настроить маршрутизатор B на переадресацию порта 80 на 192.168.0.199. В качестве альтернативы, если ваш маршрутизатор поддерживает такую функцию, вы можете поместить компьютер D в DMZ маршрутизатора B, перенаправив все порты на этот компьютер, если они не настроены иначе. Обычно это может считаться небезопасным, но в этом случае машина все равно будет защищена через маршрутизатор A, если сеть 192.168.1.0/24 не будет взломана.