Если есть VPN (а он есть, судя по tun0) - тогда лучше взять socks-прокси (danted например) и какое-нибудь расширение типа foxy proxy. Не надо собирать IP (которые имеют свойство меняться, особенно если сайт на каком-нить cloudflare).
Альтернатива - берем quagga или bird, делаем статики с нужным next-hop. Никакие ip rules / sets/ tables не нужны для этого.
UPD: прочитал внимательнее. ipset создан с hash:ip, а матч почему-то сделан src/dst. Почему не --match-set vpnlist dst ?