Is your qube a service qube with “Provides network” option enabled?
The qubes-firewall-user-script script is only executed for the qubes with qubes-firewall service enabled (it’s enabled by default for qubes with “Provides network” option enabled).
I guess you need to configure the TCP MSS Clamping in your router as well.
I was not aware that I needed to enable the qubes-firewall service. Thanks for the info! I can confirm that after adding the service, the firewall command is now listed via nft list table ip qubes. This might be an interesting detail for @solene to add. The problem here might be that this is enabled by default, but not for VMs based on minimal templates. Not sure about that.
I thought that the firewall command had to be in every VM that I wanted to use my sys-vpn service VM with. So I set the firewall script in the VM where I launch my browser, NOT in the VM that has the Wireguard connection (sys-vpn). Is this wrong? I don’t understand why I should set my browser VM to provide the network.
My connection looks like this: browserVM ↔ sys-vpn ↔ sys-firewall ↔ sys-net. I have the firewall service/nft rule set in the browserVM. Does it belong in sys-vpn itself instead? Confused about this.
I set my own MTU fix for each VM I use to connect to a sys-vpn VM, such as my browserVM.
The router has the MTU set accordingly. My assumption here is that my QubesOS VM clamps to an optimal like 1500 - WireGuard overhead. It does not know that there is a second overhead due to the router. I am just speculating, I am not an expert on this. The interesting part that I can confirm is that my suggested MTU fix works fine.
I set the firewall rule in sys-vpn, but the service was still not enabled by default (maybe because it is based on fedora 40 minimal). qvm-service sys-vpn qubes-firewall on solved the problem.
Even with the firewall rule enabled (and confirmed with ntf list table ip qubes it shows up in the custom-forward chain) my browserVM1 does not work. My second browserVM2 with my fix and based on the same sys-vpn VM works fine. browserVM1 also shows MTU 1500 with ip link show eth0. What am I doing wrong?
Solene’s setup is strictly supiror to mine if it works, because I would not need to set the MTU fix in each browserVM (sys-vpn connected VM).
How can I continue troubleshooting? Have you tried Fedora Minimal or are you running the bloated Fedora-40-XFCE VM? Maybe I am missing a package?
Thanks again for your help! So I did what you said with a VM set up according to this guide and then once with my 1280 MTU fix. The results are as follows:
Did you check it in the qube connected to sys-vpn?
Check it in the qube connected to the net qube of sys-vpn (e.g. sys-firewall) to see what MSS will be reported there.
What website is broken for you when you don’t use your ip link set dev eth0 mtu 1280 MTU fix?
Try to curl this website instead of debian.org.
I tested in my browserVM which is connected to sys-vpn. Is this correct?
Basically every page is broken. Google works for some reason. DuckDuckGo.com, Speedtest.net and many others (all I tested) don’t work. Well, they partially load and break. So they work half.
I don’t know why is your MSS set to 1280 in the router. Did you set it manually or is it set in the VPN config in the router?
In any case, the proper way would be to add the TCP MSS clamp in your router config as well.