Few options, but I'm still chasing the holy grail.
Router; Drayteks will do all that you want. However - I've gone from being a huge fan to merely a lukewarm one thanks to some stability issues. We use 2820 and 2830s.
Another option is pfSense or Monowall running on a thin server (or in a vm). Again, gone from big fan to not so much on the former due to poor documentation and it failing to route occasionally (May be my configuration)
Third option is to do it all on debian, or your existing linuxServerOfChoice.