Назад | Перейти на главную страницу

nftables - как перенаправить определенный веб-сайт через определенный интерфейс?

Я построил свой собственный маршрутизатор debian 10 для своего дома, в основном, чтобы он всегда был включен VPN-маршрутизатор с использованием openvpn, также действующего как DHCP-сервер, и зашифрованного DNS с использованием dnscrypt-proxy. Некоторое время все работало хорошо, пока я не получил подписку amazon prime, которая идентифицирует vpn и блокирует меня. Единственный способ заставить работать amazon Prime - отключить vpn, чего я не хочу делать.

Есть ли способ использовать брандмауэр nftables для маршрутизации трафика на Amazon Prime (primevideo.com или 13.32.45.99) по VPN? В настоящее время я разрешаю исходящий трафик из локальной сети выходить через vpn, но должен быть способ также разрешить трафик на / с этого сайта через интерфейс WAN.

VPN называется tun0 с использованием openvpn.

Интернет из локальной сети осуществляется через интерфейс WAN1 (если VPN не работает, когда он маршрутизируется через tun0).

Вот мой сценарий для nftables при включенном vpn:

#!/bin/sh
nft flush ruleset
nft add table nat

nft add chain nat prerouting { type nat hook prerouting priority 0\; policy accept\;}
nft add rule nat prerouting udp dport 53 ip saddr 192.168.1.0/24 dnat 192.168.1.1:53

nft add chain nat postrouting { type nat hook postrouting priority 100\; policy accept\;}
nft add rule nat postrouting oifname tun0 masquerade

nft add table filter

nft add chain filter input { type filter hook input priority 0\; policy drop\;}
nft add rule filter input iif lo accept
nft add rule filter input tcp dport {22,137-139,445,3702,5357,53,67,68,1194,3000,61208,8080,80,443} accept
nft add rule filter input udp dport {22,137-139,445,3702,5357,53,67,68,1194,3000,61208,8080,80,443} accept
nft add rule filter input icmp type echo-request accept
nft add rule filter input icmp type time-exceeded accept
nft add rule filter input ct state related,established accept

nft add chain filter output { type filter hook output priority 0\; policy drop\;}
nft add rule filter output oif lo accept
nft add rule filter output tcp dport {22,137-139,445,3702,5357,53,67,68,1194,3000,61208,8080,80,443} accept
nft add rule filter output udp dport {22,137-139,445,3702,5357,53,67,68,1194,3000,61208,8080,80,443} accept
nft add rule filter output icmp type echo-request accept
nft add rule filter output icmp type time-exceeded accept
nft add rule filter output ct state new,related,established accept

nft add chain filter forward { type filter hook forward priority 0\; policy accept\;}
nft add rule filter forward ct state related,established accept

и это набор правил nft

table ip nat {
    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        udp dport domain ip saddr 192.168.1.0/24 dnat to 192.168.1.1:domain
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
        oifname "tun0" masquerade
    }
}
table ip filter {
    chain input {
        type filter hook input priority 0; policy drop;
        iif "lo" accept
        tcp dport { ssh, domain, 67-68, http, 137-139, https, microsoft-ds, openvpn, 3000, 3702, 5357, http-alt, 61208 } accept
        udp dport { ssh, domain, 67-68, http, 137-139, https, microsoft-ds, openvpn, 3000, 3702, 5357, http-alt, 61208 } accept
        icmp type echo-request accept
        icmp type time-exceeded accept
        ct state established,related accept
    }

    chain output {
        type filter hook output priority 0; policy drop;
        oif "lo" accept
        tcp dport { ssh, domain, 67-68, http, 137-139, https, microsoft-ds, openvpn, 3000, 3702, 5357, http-alt, 61208 } accept
        udp dport { ssh, domain, 67-68, http, 137-139, https, microsoft-ds, openvpn, 3000, 3702, 5357, http-alt, 61208 } accept
        icmp type echo-request accept
        icmp type time-exceeded accept
        ct state established,related,new accept
    }

    chain forward {
        type filter hook forward priority 0; policy accept;
        ct state established,related accept
    }
}

Маршрутизатор - это Debian Buster. Версия NFT - nftables v0.9.0 (Fearless Fosdick).

Любая помощь будет оценена. Спасибо