Let's assume you already have a WireGuard endpoint up and running. I created a dedicated firewall zone for it…
config zone
option name 'wgt'
list network 'wgt'
option input 'REJECT'
option forward 'REJECT'
option output 'ACCEPT'
… then I have Tor bridge set up to listen on the localhost, port 1080 (I don't like to listen on the wildcard address for security reasons and/or sheer paranoia), and the Tor DNS port directly on the WireGuard interface address, like this (on /etc/tor/torrc)…
DNSPort 192.168.68.9:53 IsolateClientProtocol IsolateDestPort IsolateDestAddr
TransPort 127.0.0.1:1080 IsolateClientProtocol IsolateDestPort IsolateDestAddr
… and told the kernel not to consider the local net (127.0.0.0/8) martian when routing on the WireGuard interface (with /etc/sysctl.conf)…
net.ipv4.conf.wgt.route_localnet = 1
… and finally I added the necessary firewall rules to /etc/firewall.user, like this…
iptables -t nat -A prerouting_wgt_rule -p tcp -m tcp --syn -j DNAT --to 127.0.0.1:1080
iptables -t nat -A prerouting_wgt_rule -p udp -m udp -m multiport --dports 53,123 ! -d 192.168.68.9/32 -j REDIRECT
iptables -t filter -A input_wgt_rule -p udp -m udp -m multiport --dports 53,123 -j ACCEPT
Since I run a local NTP server too, I do both DNS and NTP hijacking, as you can see on the second NAT rule. And that's basically it. 