You do not need a second wireless adapter. The Raspberry Pi is able to work as a wireless hotspot and simultanous connect to another hotspot as client. But the wifi device on the RasPi has a general limitation. The client connection cannot be bridged because lack of WDS (wireless distribution system) that is needed for bridging on wireless. But as you say that is no problem because you can use routing with different subnets. The wifi hotspot and the ethernet port can be bridged so your laptop on wifi and the desktop on wired ethernet are on a common subnet. So it seems that all fit your needs. How to configure it you can look at Wireless access point with bridged wired ethernet port and wireless client connection.
If you want to use a second wifi adapter you can look at RPI3 Raspbian Stretch regular connection on wlan0 AP on wlan1. It is only for connecting two wifi devices but you may get an idea how it could work.
Update:
As from the comments you used the same subnet from the internet router for the access point (AP) but fixed it by using a different subnet for the AP. Now you can ping 8.8.8.8, the google DNS nameserver on the internet from a device attached to the ethernet port eth0 but you cannot ping 8.8.8.8 from a device connected to the AP (ap0). That is something I do not understand. eth0 and ap0 are bridged, so on the ethernet link layer (OSI layer 2) there is no difference between both interfaces. Either both work or none of them. Maybe there is a problem with flood on/off on the interface but I don't believe it because of correct default settings. Or the device on the AP is the problem. On my tests with many bring up and shut down of the AP my mobile phone get stuck and I had to restart it. Try this first.
Then check if eth0 and ap0 are both slave interfaces of the bridge with:
rpi ~$ bridge link show
2: eth0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 4
5: ap0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100
Check if ip forwarding is active and the default route is set to the internet router:
rpi ~$ cat /proc/sys/net/ipv4/ip_forward # should give 1
1
rpi ~$ ip route show
default via 192.168.10.1 dev wlan0 proto dhcp src 192.168.10.125 metric 1024
10.0.0.0/24 dev br0 proto kernel scope link src 10.0.0.1
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.125
192.168.10.1 dev wlan0 proto dhcp scope link src 192.168.10.125 metric 1024
The line with default must point to the internet router and the source must be the ip address from wlan0.
Then NAT (network address translation) must be enabled. Check with:
rpi ~$ sudo iptables --table nat --list POSTROUTING --verbose
Chain POSTROUTING (policy ACCEPT 5 packets, 479 bytes)
pkts bytes target prot opt in out source destination
36 2685 MASQUERADE all -- any wlan0 anywhere anywhere
Yes, and sometimes ap0 gets stuck with unknown reason and needs a kick with:
rpi ~$ sudo ip link set ap0 up
edited $time ago
. You can click on this link and you will see the change history. The versions before had two steps more to create unneeded help services. – Ingo Oct 11 '18 at 15:10sudo ip link set ap0 up
. But of course I have fixed the bug. wpa_supplicant@wlan0.service (sudo systemctl edit wpa_supplicant@wlan0.service
) has changed there is a new service ap-bring-up.service. It can take up to 30 seconds until the AP is up. – Ingo Oct 14 '18 at 15:48