You can upgrade in one step. Look over the release notes and upgrade guide, but if you're in a VM then the risk is minimal.
1. Take a config backup
2. Snapshot the VM
3. Remove ALL packages
4. Upgrade to the current version
5. Add packages back
6. Snapshot the VM again
7. Take another config backup
Changes to things in the base system are handled automatically by upgrade code. You shouldn't have to worry about much of anything related to Captive Portal or DNS coming from 2.2.x. Maybe you might have to add a zone parameter if you have custom captive portal html but there are plenty of references around to check that.
If you had the DNS Forwarder active before, it will still be active on the current version. That didn't change for upgrades, the default changed for new users. (And it changed for 2.2, not 2.3, so you're already past that).