В новых версиях прошивок Keenetic появилась функция "Маршруты DNS"
можно маршрутизировать в интерфейс не подсети, а url.
Очень удобно зачем-то это использовать в наши времена.
Но как-то так можно сделать и на Linux.
Используем dnsmasq, который умеет класть полученные ip в ipset.
Для этого нужно, чтоб ваши DNS запросы проходили через dnsmasq, как-нибудь справитесь с этим 😉
Настройка dnsmasq:
# DNS
bind-interfaces
cache-size=10000
all-servers
no-negcache
server=77.88.8.8
server=8.8.8.8
all-servers
no-resolv
no-poll
stop-dns-rebind
# IPset
ipset=/site.ru/vpn
ipset=/site.com/vpn
Настройка маршрутизации через ipset:
ipset create vpn hash:ip
ip rule add fwmark 100 table 100
ip route add default dev wg0 table vpn
iptables -t mangle -A PREROUTING -m set --match-set vpn dst -j MARK --set-mark 100
Предполагается, что раньше была маршрутизация через
ip route add и форвардинг и nat у вас уже настроены...Если у вас dnsmasq и vpn на разных серверах, то можно получать ipset с dns сервера (по крону) как-то так:
*/2 * * * * /usr/bin/ssh -i /root/.ssh/id_ed25519 -o StrictHostKeyChecking=accept-new 192.168.1.2 "/usr/sbin/ipset save vpn" | /usr/sbin/ipset -exist restore >/dev/null 2>&1
и настроить маршрутизацию на сервере vpn.
#linux #vpn #route #dns #dnsmasq #ipset #iptables #cron
