Jump to content

Как сделать скрипт для iptables в Entware, не разрешающий доступ по протоколу ipv6 к определённым сайтам?


Recommended Posts

Вот тут: https://forum.keenetic.com/topic/14411-можно-ли-настроить-на-роутере-viva-kn-1910-доступ-к-отдельным-доменам-исключительно-по-ipv4/ я интересовался, можно ли сделать так, чтобы роутер давал доступ к определённым сайтам только по протоколу IPv4, так как, например, я столкнулся с тем, что с включённым в настройках 6in4-туннелем до брокера IP4Market у меня некорректно открывается сайт hd.kinopoisk.ru, как будто я пытаюсь зайти на него из-за границы (я тупо не могу смотреть с него фильмы и сериалы по подписке ни в браузере? ни в приложении для Android TV).

К сожалению, мне не ответили ни что такого невозможно, ни, если это всё же возможно, не сказали как это можно сделать.

Сегодня решил ещё раз погуглить и, кажется, наткнулся на что-то похожее на решение моей проблемы: https://forum.ixbt.com/topic.cgi?id=14:65482

У меня к роутеру подключена флешка с Entware и в числе установленных пакетов есть iptables. Однако я не умею писать шелл-скрипты и не знаю как использовать на моём роутере предложенное решение. Если кому-то интересно решить подобную задачу, я прошу помощи.

В идеале хотелось бы, чтобы скрипт проверял, есть ли сайт, к которому обращается устройство или приложение, в файле (мне не лень будет заполнить его руками), содержащем список имён сайтов, к которым надо запретить доступ по протоколу IPv6, и если сайт в списке есть, то применял правило iptables для такого сайта, запрещающее протокол IPv6. Но меня устроит и просто скрипт, добавляющий в iptables соответствующее правило при запуске роутера, без отдельного файла со списком сайтов. 

Edited by Dim McAlastair
Link to comment
Share on other sites

3 часа назад, Dim McAlastair сказал:

Вот тут: https://forum.keenetic.com/topic/14411-можно-ли-настроить-на-роутере-viva-kn-1910-доступ-к-отдельным-доменам-исключительно-по-ipv4/ я интересовался, можно ли сделать так, чтобы роутер давал доступ к определённым сайтам только по протоколу IPv4, так как, например, я столкнулся с тем, что с включённым в настройках 6in4-туннелем до брокера IP4Market у меня некорректно открывается сайт hd.kinopoisk.ru, как будто я пытаюсь зайти на него из-за границы (я тупо не могу смотреть с него фильмы и сериалы по подписке ни в браузере? ни в приложении для Android TV).

К сожалению, мне не ответили ни что такого невозможно, ни, если это всё же возможно, не сказали как это можно сделать.

Сегодня решил ещё раз погуглить и, кажется, наткнулся на что-то похожее на решение моей проблемы: https://forum.ixbt.com/topic.cgi?id=14:65482

У меня к роутеру подключена флешка с Entware и в числе установленных пакетов есть iptables. Однако я не умею писать шелл-скрипты и не знаю как использовать на моём роутере предложенное решение. Если кому-то интересно решить подобную задачу, я прошу помощи.

В идеале хотелось бы, чтобы скрипт проверял, есть ли сайт, к которому обращается устройство или приложение, в файле (мне не лень будет заполнить его руками), содержащем список имён сайтов, к которым надо запретить доступ по протоколу IPv6, и если сайт в списке есть, то применял правило iptables для такого сайта, запрещающее протокол IPv6. Но меня устроит и просто скрипт, добавляющий в iptables соответствующее правило при запуске роутера, без отдельного файла со списком сайтов. 

Вы путаете мух с котлетами. Iptables вам тут не поможет. Вам надо настроить dns, что бы он всегда возвращал только ipv4 адрес. Знаю у dnsmasq есть такой флаг.

Link to comment
Share on other sites

Скажите, а можно как-то приспособить для кинетика вот это вот решение с использованием bind: https://openwrt.org/docs/guide-user/services/dns/bind-server-filter-aaaa? Чтоб как и в описанном примере bind работал, как дополнение к прошивочному DNS и занимался обработкой запросов только на конкретные домены?

Link to comment
Share on other sites

Posted (edited)

Попробовал установить и настроить сервер Bind9, как написано по ссылке в предыдущем посте, а он не запускается по причине того, что не может загрузить файл конфигурации. С "родным" конфигом "из коробки" утилита named-checkconf выдаёт ошибку:  "/opt/etc/bind/named.conf:18: parsing failed: file not found", а с поправленным конфигом: "/opt/etc/bind/named.conf:26: parsing failed: file not found" или "/opt/etc/bind/named.conf:28: parsing failed: file not found".

Потыкавшись по просторам интернета я попробовал скопировать содержание исправленного конфига в буфер обмена, удалил его и, создав новый файл в mcedit, вставил в него скопированный текст и сохранил как named.conf. После чего named-checkconf выдала следующее сообщение:

Скрытый текст

~ # named-checkconf /opt/etc/bind/named.conf
/opt/etc/bind/named.conf:9: unknown option '<------>directory'
/opt/etc/bind/named.conf:11: unknown option '<------>// If your ISP provide...'
/opt/etc/bind/named.conf:16: unknown option '<------>listen-on-v6'
/opt/etc/bind/named.conf:17: unknown option '<------>forward'
/opt/etc/bind/named.conf:18: unknown option '<------>forwarders'
/opt/etc/bind/named.conf:25: unknown option '<------>auth-nxdomain'"

Ну и соответственно:
 

Скрытый текст

~ # /opt/etc/init.d/S09named start
 Starting named...              done.
~ # /opt/etc/init.d/S09named check
 Checking named...              dead.

В сислоге появилось вот такое сообщение:

Скрытый текст

Jun 22 23:58:01 KEENETIC-VIVA root: Started named from .
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: starting BIND 9.18.1 (Stable Release) <id:30be439>
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: running on Linux mips 4.9-ndm-5 #0 SMP Tue Jun 21 16:39:31 2022
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: built with  '--target=mipsel-openwrt-linux' '--host=mipsel-openwrt-linux' '--build=x86_64-pc-linux-gnu' '--program-prefix=' '--program-suffix=' '-
-prefix=/opt' '--exec-prefix=/opt' '--bindir=/opt/bin' '--sbindir=/opt/sbin' '--libexecdir=/opt/lib' '--sysconfdir=/opt/etc' '--datadir=/opt/share' '--localstatedir=/opt/var' '--mandir=/opt/
man' '--infodir=/opt/info' '--with-openssl=/build/me/E.mipsel/staging_dir/target-mipsel_mips32r2_glibc-2.27/opt' '--without-lmdb' '--enable-epoll' '--without-gssapi' '--without-readline' '--
sysconfdir=/opt/etc/bind' '--with-json-c=no' '--with-libxml2=no' '--enable-doh' 'build_alias=x86_64-pc-linux-gnu' 'host_alias=mipsel-openwrt-linux' 'target_alias=mipsel-openwrt-linux' 'CC=mi
psel-openwrt-linux-gnu-gcc' 'CFLAGS=-O2 -pipe -mno-branch-likely -mips32r2 -mtune=mips32r2 -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft
-float -I/build/me/E.mipsel/staging_dir/target-mipsel_mips32r2_glibc-2
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: running as: named -c /opt/etc/bind/named.conf
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: compiled by GCC 8.4.0
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: compiled with OpenSSL version: OpenSSL 1.1.1n  15 Mar 2022
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: linked to OpenSSL version: OpenSSL 1.1.1n  15 Mar 2022
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: compiled with zlib version: 1.2.12
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: linked to zlib version: 1.2.12
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: ----------------------------------------------------
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: BIND 9 is maintained by Internet Systems Consortium,
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: Inc. (ISC), a non-profit 501(c)(3) public-benefit
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: corporation.  Support and training for BIND 9 are
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: available at https://www.isc.org/support
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: ----------------------------------------------------
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: adjusted limit on open files from 4096 to 1048576
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: found 4 CPUs, using 4 worker threads
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: using 4 UDP listeners per interface
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: config.c: option 'trust-anchor-telemetry' is experimental and subject to change in the future
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: loading configuration from '/opt/etc/bind/named.conf'
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: /opt/etc/bind/named.conf:9: unknown option '<------>directory'
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: /opt/etc/bind/named.conf:11: unknown option '<------>// If your ISP provide...'
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: /opt/etc/bind/named.conf:16: unknown option '<------>listen-on-v6'
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: /opt/etc/bind/named.conf:17: unknown option '<------>forward'
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: /opt/etc/bind/named.conf:18: unknown option '<------>forwarders'
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: /opt/etc/bind/named.conf:25: unknown option '<------>auth-nxdomain'
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: loading configuration: file not found
Jun 22 23:58:01 KEENETIC-VIVA named[16031]: exiting (due to fatal error)


ЧЯДН?

Edited by Dim McAlastair
Link to comment
Share on other sites

В 23.06.2022 в 00:40, Dim McAlastair сказал:

После чего named-checkconf выдала следующее сообщение:

mcedit вместо [TAB]`ов вставил печатные символы "<------>" со всеми вытекающими...

Link to comment
Share on other sites

Posted (edited)

В общем, я, кажется, разобрался, почему не запускался Bind

Стартовый конфиг выглядел так:

Скрытый текст

// This is the primary configuration file for the BIND DNS server named.

options {
    directory "/opt/tmp";

    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    // Uncomment the following block, and insert the addresses replacing
    // the all-0's placeholder.

    // forwarders {
    //  0.0.0.0;
    // };

    auth-nxdomain no;    # conform to RFC1035
};

include "/opt/etc/bind/named-rndc.conf";

include "/opt/tmp/bind/named.conf.local";

// prime the server with knowledge of the root servers
zone "." {
    type hint;
    file "/opt/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
    type master;
    file "/opt/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
    type master;
    file "/opt/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
    type master;
    file "/opt/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
    type master;
    file "/opt/etc/bind/db.255";
};

И ругалась named-checkkonf на строчки "include", поскольку упомянутых в них файлов на указанных в этих строчках местах не было. Не знаю, так ли необходимы эти файлы, так как, вроде бы, судя по статьям о Bind из интернета, всё то, что содержится в указанных в этих двух строчках файлах, можно внести в основной файл named.conf.

В результате, мой named.conf стал выглядеть вот так:  
 

Скрытый текст

// This is the primary configuration file for the BIND DNS server named.

plugin query "/opt/lib/bind/filter-aaaa.so" {
  filter-aaaa-on-v4 yes;
  filter-aaaa-on-v6 yes;
};

options {

    directory "/opt/tmp";

    // If your ISP provided one or more IP addresses for stable.
    // nameservers, you probably want to use them as forwarders...
    // Uncomment the following block, and insert the addresses replacing.
    // the all-0's placeholder.

    listen-on port 2053 { 127.0.0.1; };
    listen-on-v6 port 2053 { ::1; };
                   forward only;
                   forwarders {
                      9.9.9.10;
                      94.140.14.140;
                      94.140.14.141;
                      149.112.112.10;
        };

    auth-nxdomain no;    # conform to RFC1035
};

// include "/opt/etc/bind/named-rndc.conf";

// include "/opt/tmp/bind/named.conf.local";

key "rndc-key" {
    algorithm hmac-sha256;
    secret "8r7ABoOr2ahB6SFwVFn0zLa+OpDz0TbrOrKzzV5p5ls=";
};

controls {
                   inet 127.0.0.1 port 953
                   allow { 127.0.0.1; } keys { "rndc-key"; };
};

// prime the server with knowledge of the root servers
zone "." {
    type hint;
    file "/opt/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
    type master;
    file "/opt/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
    type master;
    file "/opt/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
    type master;
    file "/opt/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
    type master;
    file "/opt/etc/bind/db.255";
};

Этот  конфиг проверку прошёл, я стартанул bind, и он запустился.

После этого, я проверил, работу сервиса, как указанно в той статье:

Скрытый текст

root@KEENETIC-VIVA:/opt/etc/init.d$ dig @127.0.0.1 -p 2053 kinopoisk.ru AAAA

; <<>> DiG 9.18.1 <<>> @127.0.0.1 -p 2053 kinopoisk.ru AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35433
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: c1299acc104c427e0100000062b5f83487863f77ba5179d2 (good)
;; QUESTION SECTION:
;kinopoisk.ru.                  IN      AAAA

;; Query time: 652 msec
;; SERVER: 127.0.0.1#2053(127.0.0.1) (UDP)
;; WHEN: Fri Jun 24 20:45:24 MSK 2022
;; MSG SIZE  rcvd: 69

root@KEENETIC-VIVA:/opt/etc/init.d$ dig @9.9.9.10 -p 53 kinopoisk.ru AAAA

; <<>> DiG 9.18.1 <<>> @9.9.9.10 -p 53 kinopoisk.ru AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8099
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;kinopoisk.ru.                  IN      AAAA

;; ANSWER SECTION:
kinopoisk.ru.           96      IN      AAAA    2a02:6b8::473

;; Query time: 92 msec
;; SERVER: 9.9.9.10#53(9.9.9.10) (UDP)
;; WHEN: Fri Jun 24 20:45:47 MSK 2022
;; MSG SIZE  rcvd: 69

 Но, к сожалению, сочетать его работу с встроенным в прошивку DNS-сервером не получается: роутер (через веб-интерфейс, по крайней мере) не позволяет добавить настройку, заставляющую направлять запрос IP-адреса сайта kinopoisk.ru на  bind (127.0.0.1:2053).

Можно ли это сейчас сделать через CLI? Можно ли добавить такую опцию в будущих релизах прошивок? Поставить dnsmasq на замену встроенного DNS-сервера, чтобы сделать всё в точности, как в той статье, не предлагайте -- мне хватило возни с одним bind-ом. 

А может, можно каким-то образом прикрутить к встроенному в прошивку DNS-прокси аналог плагина filter-AAAA для bind, чтобы в настройках "Интернет-фильтра" при добавлении dns-сервера для запросов IP определённого домена, можно было выставить флажок "получать только  адрес IPv4"?

И кстати, вопрос: а вот эта возможность в системном профиле "Интернет-фильтра" добавить адрес DNS-сервера для отдельного домена, она имеет высший приоритет, в смысле, если я в адресной строке браузера набираю имя определённого сайта, для которого я установил отдельный DNS-сервер, то запрос IP-адреса шлётся именно на этот сервер, и если вдруг он не отвечает, значит страница сайта не откроется? Или сначала на этот сервер, а если не получает ответа, то запрашивает другие?

Edited by Dim McAlastair
Link to comment
Share on other sites

В 22.06.2022 в 22:04, Dim McAlastair сказал:

Скажите, а можно как-то приспособить для кинетика вот это вот решение с использованием bind: https://openwrt.org/docs/guide-user/services/dns/bind-server-filter-aaaa? Чтоб как и в описанном примере bind работал, как дополнение к прошивочному DNS и занимался обработкой запросов только на конкретные домены?

Лично я бы не стал связываться с bind ради такой мелочи, легче будет сладить с конфигом dnsmasq. К счастью, нужный для вас функционал dnsmasq'а появился в последних релизах adguardhome. Я оставил ссылку с примером в предыдущей теме.

  • Thanks 1
Link to comment
Share on other sites

Posted (edited)

Спасибо. Попробую Adguard Home.

Upd.: Ещё раз спасибо. Adguard Home работает как я и хотел.

Edited by Dim McAlastair
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...