Machines discover machines on the same subnet using ARP. If you want direct routing without NAT then either you put a static route from subnet A to subnet B via the gateway or you instruct the gateway to reply to ARP packets on behalf of machines on subnet B.
TODO: need to decide if and how machines on subnet A will access machines on subnet B. IN the same way need to decide how machines on subnet B will access machines on subnet A.
When connecting subnets together there are 4 options:
- TODO: not NAT machines from either of the subnets can address individual machines on the other subnet directly
- NAT A hidden by NAT: machine from A can directly address machines on B but machines on B can't see machines on A
- NAT B hidden by NAT: same as previous case but roles between A and B reversed.
- No routing between A and B. If a machine on one subnet needs to access the services from a machine on the other subnet the gateway needs to act as a proxy. This can be done using forwarding.
You can't do NAT so that both are hidden. Obvious.