Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
   RSS
Перенаправление DNS на Pi-hole с помощью USG, UniFi Network
 
[Проблема решена. Пишу это, чтобы помочь будущим людям, которые столкнутся с такой же задачей] Я уже несколько часов копаюсь в туториалах, документации и так далее, пытаясь разобраться. Мой pihole — 192.168.9.3, и я хотел перенаправить весь трафик, который идет на порт 53, обратно на pihole для проверки/заглушения перед отправкой на настоящий DNS-сервер. В основном это дополнительный, тонкий уровень защиты на случай, если в моей сети уже есть какое-то вредоносное ПО с жестко прописанным DNS-сервером.

Еще одна проблема — большинство ответов на форумах шли под edgerouter, из-за чего я только запутался [плюс их нельзя было просто скопировать и вставить]. Также у меня была ошибка: когда я наконец нашел рабочую конфигурацию, получил сообщение «reply from unexpected source: 192.168.9.3#53, expected 8.8.8.8#53».

Короче, у меня USG-Pro-4. Вот config.gateway.json, который реально решил мою проблему:

{
 "service": {
   "nat": {
     "rule": {
       "1": {
         "description": "Redirect DNS queries to pihole",
         "destination": {
           "port": "53"
         },
         "source": {
           "address": "!192.168.9.3"
         },
         "inside-address": {
           "address": "192.168.9.3",
           "port": "53"
         },
         "inbound-interface": "eth0",
         "protocol": "tcp_udp",
         "type": "destination"
       },
       "5002": {
         "description": "Translate reply back",
         "destination": {
           "address": "192.168.9.3",
           "port": "53"
         },
         "outbound-interface": "eth0",
         "protocol": "tcp_udp",
         "type": "masquerade"
       }
     }
   }
 }
}

Особые сложности у меня вызывали "outbound-interface", "inbound-interface" и всякие такие штуки. Оказалось, что в моей голове они должны были быть с точки зрения шлюза [ну, очевидно, если подумать?]. Кстати, в конфиге упоминается только eth0 — это мой LAN1 интерфейс. Чтобы понять, какой у вас основной LAN-интерфейс, зайдите на шлюз, наберите «ifconfig -a» и найдите интерфейс в вашей локальной сети.

Первое правило просто перенаправляет весь трафик на порт 53, если он не от pihole, обратно на pihole. Второе правило типа "masquerade" — оно гарантирует, что шлюз вставлен в обратный поток трафика и умеет переводить пакеты обратно.

Вот страница, где объясняется, что делать с вышеуказанным JSON: https://help.ubnt.com/hc/en-us/articles/215458888-UniFi-How-to-further-customize-USG-configuration-with-config-gateway-json

Пишу это 27 июля 2018. Когда мой шлюз попадал в цикл конфигурации, контроллер unifi выдавал предупреждения в окне алертов, что обычно помогало. Я просто временно отключал config.gateway.json командой «mv config.gateway.json config.gateway.json.disabled» и ждал спокойно. Обычно через три-пять минут получал оповещение, что шлюз перезагрузился и успешно сконфигурировался заново.

В общем, если кому-то [особенно, скорее всего, будущему мне] это оказалось полезным — отлично, рад, что смог помочь.

Gary
Страницы: Пред. 1 2
Ответы
 
JSON не проходит валидацию. Ему действительно нужен этот «address». Ты сам тестировал эти скрипты? https://jsonformatter.curiousconcept.com/ Буду рад попробовать адресную группу, как это сделать и какой формат использовать в config.gateway.json? Что ты имеешь в виду под «программировать USG сам»? Я обычно кладу их в config.gateway.json в правильное место и потом перепрошиваю USG. Насколько я понимаю, так и должно быть.

Судя по твоему последнему скрипту, он заставляет .101 и .200 использовать 8.8.8.8, а это не совсем то, чего я хочу. Неужели нельзя просто исключить из правила перенаправления NAT более одного исходного IP? USG вообще не умеет так?  

В любом случае, я попробовал свой изначальный скрипт с чуть изменённым блоком source, но тоже без результата. Он проходит валидацию, USG принимает его, но в команде show service nat показывается только последний адрес из группы источников.

П.С. Вот что интересно: я воспользовался твоей идеей с созданием address-group в интерфейсе USG. Потом выполнил «show firewall», чтобы получить длинную строку, которой USG называет внутренне эту группу, разобрался, как правильно исключить её в config.gateway.json, и… учитывается только последний адрес в группе. Я сделал адресную группу с .101, .200 и .201 в таком порядке, а исключён только .201. Начинаю подозревать, что это баг USG.

{
  "service": {
    "nat": {
        "rule": {
               "1": {
                   "description": "Redirect DNS queries to pihole",
                   "destination": {
                       "port": "53",
                       "address": "!10.10.10.201"
                   },
                   "inside-address": {
                       "address": "10.10.10.201",
                       "port": "53"
                   },
"source": {
"group": {
"address-group": "!5b782be966c2c701f44afc7e"
}
},
                   "inbound-interface": "eth1",
                   "protocol": "tcp_udp",
                   "type": "destination"
               },
               "5002": {
                   "description": "Translate reply back to pihole",
                   "destination": {
                       "address": "10.10.10.201",
                       "port": "53"
                   },
                   "outbound-interface": "eth1",
                   "protocol": "tcp_udp",
                   "type": "masquerade"
               }
           }
       }
   }
}

show service nat:

rule 1 {
    description "Redirect DNS queries to pihole"
    destination {
        address !10.10.10.201
        port 53
    }
    inbound-interface eth1
    inside-address {
        address 10.10.10.201
        port 53
    }
    protocol tcp_udp
    source {
        group {
            address-group !5b782be966c2c701f44afc7e
        }
    }
    type destination
}

rule 5002 {
    description "Translate reply back to pihole"
    destination {
        address 10.10.10.201
        port 53
    }
    outbound-interface eth1
    protocol tcp_udp
    type masquerade
}

И ещё: я попробовал поменять порядок IP в network-group. Хоть .101 и оказался последним, всё равно исключён был только .201. Короче, я полностью запутался.

Похоже, решения здесь действительно нет. Я создал правила, которые перенаправляют DNS-запросы с моего десктопа и LXC-хоста на 1.1.1.1 (DNS cloudflare) и поставил их выше правила для pihole. Это работает, но теперь, если мне придётся менять DNS на десктопе, придётся лезть в JSON в контроллере Unifi и ждать, пока этот тормозной USG перепрошьется. Не очень удобно.
Страницы: Пред. 1 2
Читают тему (гостей: 1)