Your iptables rules are clearly not configured correctly.
Run these command in ProxyVM and check if DNS will work in AppVM connected to your ProxyVM:
sudo iptables -F PR-QBS -t nat
sudo iptables -A PR-QBS -t nat -i vif+ -p udp --dport 53 -j DNAT --to 1.1.1.1
sudo iptables -A PR-QBS -t nat -i vif+ -p tcp --dport 53 -j DNAT --to 1.1.1.1
UPD:
Also don’t add rules:
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP
Because you already have DROP policy for these chains:
Chain INPUT (policy DROP 0 packets, 0 bytes)
Chain FORWARD (policy DROP 0 packets, 0 bytes)
And because you’ve added these rules your TCPMSS clamp rule is not working:
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 DROP 0 -- * * 0.0.0.0/0 0.0.0.0/0
0 0 TCPMSS 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
Since all packets are dropped before it.
UPD2:
And what’s the output of this command in ProxyVM now?
iptables -t nat -L PR-QBS -n -v
UPD3:
By ivpn-proxy behind a mullvad-proxy you mean setup like this?
sys-net -> sys-firewall -> mullvad-proxy -> ivpn-proxy -> test-appvm
Where mullvad-proxy and ivpn-proxy are configured to connect to mullvad and ivpn wireguard servers?
And you’ve configured mullvad-proxy and ivpn-proxy the same way but just with different IPs and keys?
Where did INPUT and FORWARD DROP iptables rules came from then?
UPD4:
Ok, it seems that they are a default iptables rules (I’m using Qubes 4.2 so I don’t have iptables). But I don’t know why mullvads guide is suggesting to add TCPMSS rule at the end of the FORWARD chain then since it won’t work:
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Maybe the guide is outdated.
You can change it to insert to add it at the top of the chain rules:
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
UPD5:

sudo iptables -t nat -L PR-QBS -n -v
Chain PR-QBS (1 references)
pkts bytes target prot opt in out source destination
0 0 DNAT 17 – vif+ * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 to:1.1.1.1
0 0 DNAT 6 – vif+ * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 to:1.1.1.1
Are you testing the DNS from test-appvm
or from ivpn-proxy
?
Because I don’t see the packets from test-appvm
arriving to ivpn-proxy
based on the packet counters in iptables rules for PR-QBS chain. 0 packets are received.
UPD6:

like this i guess?
No, you need to use:
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Instead of:
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Can you try to setup your mullvad and ivpn ProxyVMs using Qubes-vpn-support instead of mullvad guide?
GitHub - tasket/Qubes-vpn-support: VPN configuration in Qubes OS
Wireguard VPN connections in Qubes OS · tasket/Qubes-vpn-support Wiki · GitHub
UPD7:

curled ip.me this works fine for some reason
And if you run dig ip.me
then will it work or not?

I am using this for openvpn. But is the wireguard support good enough?
Yes, it works for wireguard without a problem.
UPD8:

I shows connection established but dig still returns nothing. So the same as the mullvad guide I guess. Curl ip.me also works… i should mention that tasket-ivpn is behind mullvad-proxy. I will convert mullvad also to tasket… wait
What if you try to curl other sites?
curl https://myexternalip.com/raw
curl https://zx2c4.com/ip