Я знаю, что этот вопрос задавался исторически, но ответы, которые мне еще предстоит найти, не слишком полезны в этом одном нишевом случае использования.
В настоящее время у меня есть один маршрутизатор с DD-WRT на 192.168.0.1, один маршрутизатор, подключенный к предыдущему с IP-адресом 192.168.0.2, который работает как VPN-клиент, и один Raspberry Pi, настроенный для запуска https://pi-hole.net DNS. фильтрация на 192.168.0.21.
В конечном счете, моя цель здесь — просто заблокировать все DNS-запросы в моей сети с любого устройства на любой DNS-сервер, кроме моего второго маршрутизатора и моего pihole, и разрешить только этим двум устройствам делать DNS-запросы.
На моем маршрутизаторе мои текущие правила брандмауэра (iptables) следующие:
##### Держите сеть на pi-hole
iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp --source ! 192.168.0.2,192.168.0.21 --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
iptables --table nat --insert PREROUTING --in-interface br0 --protocol udp --source ! 192.168.0.2,192.168.0.21 --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
#####Дырокол DNS для pi-hole
iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp --source 192.168.0.2,192.168.0.21 --destination-port 53 --jump ACCEPT
iptables --table nat --insert PREROUTING --in-interface br0 --protocol udp --source 192.168.0.2,192.168.0.21 --destination-port 53 --jump ACCEPT
Теперь я просто предположил, что все работает нормально и денди. Однако на самом деле я никогда не входил и пытался для проверки правил. При попытке выполнить команды я обнаружил, что правила 3 и 4 работают нормально. Однако правила 1 и 2 не:
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp --source ! 192.168.0.2,192.168.0.21 --destination-port 53 --jump ПРИНЯТЬ
Неверный аргумент `192.168.0.2,192.168.0.21'
Некоторый исследовать заставил меня задуматься, может быть, !
должен идти перед --источник
, поэтому я попробовал это, что могло бы сработать, за исключением того, что несколько IP-адресов источника запрещены моей версией iptables:
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp ! --source 192.168.0.2,192.168.0.21 --destination-port 53 --jump ПРИНЯТЬ
iptables v1.8.5 (старый): ! не допускается с несколькими исходными или целевыми IP-адресами
Более исследовать заставил меня попытаться использовать ipset для решения проблемы:
root@ddwrt:~# ipset -N piholeAndVpnПроход через iphash
root@ddwrt:~# ipset -A piholeAndVpnPassthrough 192.168.0.2
root@ddwrt:~# ipset -A piholeAndVpnPassthrough 192.168.0.21
Эта часть прошла нормально. Однако, никогда не используя ipset, я не мог заставить его работать, каким бы способом я ни пытался:
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp ! --source --match-set "piholeAndVpnPassthrough" --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
Плохой аргумент `piholeAndVpnPassthrough'
Попробуйте `iptables -h' или 'iptables --help' для получения дополнительной информации.
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp ! --source -m set --match-set piholeAndVpnPassthrough --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
Плохой аргумент `set'
Попробуйте `iptables -h' или 'iptables --help' для получения дополнительной информации.
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp -m set --match-set piholeAndVpnPassthrough ! --source --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
iptables v1.8.5 (устаревшая версия): --match-set требует двух аргументов.
Попробуйте `iptables -h' или 'iptables --help' для получения дополнительной информации.
root@ddwrt:~# iptables --table nat --insert PREROUTING --in-interface br0 --protocol tcp -m set --match-set piholeAndVpnPassthrough src ! --source --destination-port 53 --jump DNAT --to-destination 192.168.0.21:53
iptables v1.8.5 (старый): Set piholeAndVpnPassthrough не существует.
Таким образом, я понятия не имею, как это сделать. Как использовать два отрицательных исходных адреса в iptables?