Я припускаю, що 192.168.0.1 - це не шлюз, який використовується на маршрутизаторі B, а, скоріше, його власний IP на інтерфейсі LAN. Якщо маршрутизатор 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 в інтерфейс локальної мережі.
Хоча вам може бути краще використовувати B як "німий" комутатор замість маршрутизатора, просто підключивши все до своїх портів локальної мережі, можна обійти цю проблему, не змінюючи мережеву топологію. Вам потрібно буде переадресувати порти на маршрутизаторі B, які використовуються для зв'язку, що виходить за межі мережі 192.168.0.0/24.
Наприклад, якщо на машині D працює веб-сервер, зв’язок з яким потрібно ініціювати з машини C, ви хочете налаштувати маршрутизатор B на порт 80 вперед до 192.168.0.199. Крім того, враховуючи, що ваш маршрутизатор підтримує таку функцію, ви можете розмістити машину D у DMZ маршрутизатора B, тим самим пересилаючи всі порти на цю машину, якщо вони не налаштовані інакше. Зазвичай це може вважатися небезпечним, але в цьому випадку машина все одно буде захищена через маршрутизатор A, якщо не буде порушена мережа 192.168.1.0/24.