Настройка DNS over TLS и DNSSEC на Openwrt

Так как уже установили dnsmasq-full перейдем непосредственно к настройке всего остального

Установка stubby

Логинемся по ssh к OpenWRT и выполняем

opkg update
opkg install stubby

Далее включаем ручной режим в /etc/config/stubby

config stubby 'global'
       option manual '1'

Пример конфига, порт и серверы вольны менять как захотите.

resolution_type: GETDNS_RESOLUTION_STUB
round_robin_upstreams: 1
appdata_dir: "/var/lib/stubby"
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
dnssec_return_status: GETDNS_EXTENSION_TRUE
edns_client_subnet_private: 1
idle_timeout: 10000
listen_addresses:
  - 127.0.0.1@5453
  - 0::1@5453
dns_transport_list:
  - GETDNS_TRANSPORT_TLS
upstream_recursive_servers:
  - address_data: 2606:4700:4700::1111
    tls_auth_name: "cloudflare-dns.com"
  - address_data: 2606:4700:4700::1001
    tls_auth_name: "cloudflare-dns.com"
  - address_data: 1.1.1.1
    tls_auth_name: "cloudflare-dns.com"
  - address_data: 1.0.0.1
    tls_auth_name: "cloudflare-dns.com"

Чтобы заработал DNSSEC добавил строку dnssec_return_status: GETDNS_EXTENSION_TRUE.

Собственный репозиторий OpenWRT на Gitlab-e

Данная статья поможет создать собственный репозиторий OpenWRT, со сборкой пакетов и хостингом их, средствами Gitlab Pages и CI/CD.

Cоздание пары ключей для подписи пакетов

  1. Клонируйте репозиторий usign и скомпилируйте его. Обратите внимание, для успешной компиляции требуется установленный cmake.
$ git clone https://git.openwrt.org/project/usign.git 
$ cd usign/ 
$ cmake . 
$ make
  1. Даем команду исполняемому файлу usign создать новую пару ключей и вводим соответствующий комментарий, чтобы позже можно было идентифицировать файл ключа.
./usign -G -c "My own OpenWRT repo" -s secret.key -p public.key

Ключи готовы, к ним вернемся позже.

Resolve Opennic доменов на OpenWRT

Настройка dnsmasq

Заходим на сайт Opennic для получения списка ближайших серверов. В моем случае это:

91.217.137.37 (ns5.ru)
176.126.70.119 (ns1.sto.se)
192.71.245.208 (ns2.lom.it)
195.10.195.195 (ns31.de)

Так как в прошлой статье установили и настроили dnsmasq для резолва .onion сайтов, то на OpenWRT просто редактируем /etc/dnsmasq.conf и добавляем следующие строки:

server=/bbs/chan/cyb/dyn/geek/gopher/indy/libre/neo/null/o/oss/oz/parody/pirate/lib/91.217.137.37
server=/bbs/chan/cyb/dyn/geek/gopher/indy/libre/neo/null/o/oss/oz/parody/pirate/lib/176.126.70.119
server=/bbs/chan/cyb/dyn/geek/gopher/indy/libre/neo/null/o/oss/oz/parody/pirate/lib/192.71.245.208
server=/bbs/chan/cyb/dyn/geek/gopher/indy/libre/neo/null/o/oss/oz/parody/pirate/lib/195.10.195.195

Где IP из указанного выше списка.

Перезапускаем dnsmasq

/etc/init.d/dnsmasq restart

Проверяем доступность того же Рутрекера

OpenWRT прозрачное проксирование в сеть Tor

Установка пакетов

opkg update
opkg install ipset tor tor-geoip dnsmasq-full

Настройка Tor-a

Отрываем на редактирование /etc/tor/torrc

cp /etc/tor/torrc /etc/tor/torrc.opkg
vim /etc/tor/torrc

И приводим конфиг к такому виду

User tor
PidFile /var/run/tor.pid
DataDirectory /var/lib/tor
ExcludeExitNodes {RU},{UA},{AM},{KG}
VirtualAddrNetwork 10.8.0.0/16
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1

TransPort 192.168.1.1:9040
SOCKSPort 192.168.1.1:9050
DNSPort   9053

Перезапускаем Tor

/etc/init.d/tor restart

Настройка firewall-a

Добавляем в /etc/config/firewall

config ipset
	option name 'onion'
	option storage 'hash'
	option match 'dest_ip'
	option timeout '86400'

config redirect
	option name 'torify-onion'
	option src 'lan'
	option proto 'tcp'
	option ipset 'onion'
	option dest_port '9040'
	option dest 'lan'

Перезагружаем firewall