я добавил ! -d 192.168.0.0/16
и ! -d fc00::/7
к примеру Killswitch Wireguard (см. man wg-quick
ПРИМЕРЫ):
PostUp = iptables -I OUTPUT ! -d 192.168.0.0/16 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = ip6tables -I OUTPUT ! -d fc00::/7 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
Это позволяет мне получать доступ к другим хостам в моей сети 192.168.X.X во время работы VPN. Однако, похоже, он блокирует поиск DNS для таких доменов, как myhost.local
. Я говорю это, потому что могу подключиться к VPN и по-прежнему пинговать myhost.local
. Спустя всего несколько минут запуска VPN пинг перестает работать и сообщает: ping: myhost.local: Name or service not known
. Я предполагаю, что срок действия кеша DNS истек.
Насколько я понимаю, поскольку я не указал протокол в iptables (например, -p udp
) он должен исключить все протоколы из правила REJECT.
Я могу запустить VPN без правил iptables и ip6tables, и я всегда могу решить myhost.local
.
Как вы думаете, он по-прежнему отклоняет запросы UDP DNS по каким-то другим критериям? Как я могу настроить правило, чтобы разрешить локальный поиск DNS?
Вы случайно разделили свои команды IP4 и IP6 - в вашем примере обе строки должны быть частью PostUp с && между ними, и у вас должен быть соответствующий PreDown для сопоставления. Например:
PostUp = iptables -I OUTPUT ! -d 192.168.0.0/16 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -d fc00::/7 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -d 192.168.0.0/16 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -d fc00::/7 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT