Two routers network routing settings
I have two routers, Router A is connected to the internet, and Router B is connected to the LAN port of Router A.
Router A: 192.168.1.1 Subnet 255.255.255.0
Router B: IP leased from router A: 192.168.1.2 Its own ip: 192.168.0.1 subnet 255.255.255.0
I have a machine C plugged to router A with ip 192.168.1.3 also a machine D plugged to router B with ip 192.168.0.199
I want to access machine D from a machine C. What settings do I need to change to do that?
Solution 1:
Router A needs to know which route to use to reach the 192.168.0.0/24 network.
Initially try adding a static route that says it can reach 192.168.0.0/24 via 192.168.1.2.
On a Cisco router running IOS you'd do
ip route 192.168.0.0 255.255.255.0 192.168.1.2
On your unspecified make and model of router you'll have to use a web-interface or read the manual to find it's equivalent.
Solution 2:
If your network is as simple as your diagram, with no NAT surprises, then there just needs to be a static route for 192.168.0.0/255.255.255.0 pointing to 192.168.1.2. This route can be on either Router A or Machine C, the latter being more restrictive than the former.
Solution 3:
If these are standard residental "routers" with 4 LAN ports, then you actually have a device that is a combination of router and switch. The 4 LAN ports are a switch. Devices connected to that will see each other without you having to do anything other than take care of IP address setup, which is normally DHCP's job. You can "cascade" switches and things will work just fine.
If you are looking to just connect more than 4 devices in your home to the Internet, Router B does not need to be doing routing or DHCP at all, and the functionality should be disabled. Connect "router" B to a LAN port in router A, and anything else you need to the LAN ports on router B and as long as router B is not doing DHCP or anything else, it should just work.
Solution 4:
I am assuming 192.168.0.1 is not the gateway used on router B, but rather its own IP on the LAN interface. If router A is giving out addresses through DHCP, it is also informing B of what gateway to use, and this should be 192.168.1.1. If you can access the internet from B's subnet, this is the case, unless you have a very excentring setup that needs a far more detailed explanation.
To answer your question, machines C and D are on seperate networks, but D can initiate a connection with C just fine. It can't find the IP 192.168.1.3 on its own subnet, so it passes on the request to its gateway, i.e. router B, who does know where the target machine is located.
The other way around is more difficult. Neither host D itself nor its gateway, router A, knows that traffic intended for 192.168.0.199 should traverse through router B. Even if they did, for instance by defining a route '192.168.0.0/24 trough 192.168.1.2', router B would not allow the packets to pass from its WAN interface to the LAN interface.
Although you may be better off using B as a 'dumb' switch instead of a router by simply connecting everything to its LAN ports, it is possible to circumvent this issue without changing the network topology. You will need to forward ports on router B that are used in communication originating outside the 192.168.0.0/24 network.
For instance, if machine D is running a web server, to which communication must be initiated from machine C, you will want to configure router B to forward port 80 towards 192.168.0.199. Alternatively, given your router supports such a feature, you can place machine D in router B's DMZ, thus forwarding all ports to this machine, unless they are configured otherwise. Normally, this could be regarded as insecure, but in this case, the machine will still be protected through router A, unless the 192.168.1.0/24 network is compromised.