Skip to content
This repository has been archived by the owner on Jul 13, 2021. It is now read-only.

Details

Alexander Ryzhov edited this page Mar 10, 2016 · 5 revisions

Как это работает

  • LUA-скрипт формирует для dnsmasq список DNS-имён, которые:

    • должны разрешаться в обход провайдерских DNS воизбежание спуфинга,

    • будут наполнять разрешёнными из DNS IP-адресами ipset-набор rublock.

  • В файервол добавляется правило, помечающее пакеты определённым fwmark'ом.

  • При установке VPN-соединения создаются отдельная таблица роутинга для помеченных пакетов.

При работе получается следующее. Если требуемый ресурс (www.example.com) отсутствует в списке блокируемых, то dnsmasq разрешает его имя в IP используя провайдерские DNS-серверы — ближайшие и наиболее быстрые. Так же по наиболее быстрому пути пойдёт обмен с запрошенным ресурсом. Если же требуемый ресурс есть в списке, тогда:

  • dnsmasq разрешит его в IP-адрес гугловским DNS-сервером (указать другой можно в /opt/bin/blupdate.lua),
  • dnsmasq занесёт разрешённый IP в ipset-набор rublock,
  • правило файервола будет помечать любой пакет от/к заблокированному ресурсу меткой,
  • на основе отдельной таблице роутинга помеченные пакеты будут направляться в VPN-соединение.

Диагностика проблем

В связи с тем, что при старте роутера USB-носитель монтируется позже запуска dnsmasq, в системном логе возможно появление нескольких сообщений об ошибках старта dnsmasq в промежутся до ~10 секунд. Связано это с тем, что для dnsmasq файл /opt/etc/rublock.dnsmasq в это время не доступен.

  • Убедитесь, что dnsmasq запустился и считал сформированный на USB-носителе конфиг. В системном логе будет большое количество строк вида:
Mar 10 09:24:08 dnsmasq[617]: using nameserver 8.8.8.8#53 for domain xxx.com
Mar 10 09:24:08 dnsmasq[617]: using nameserver 8.8.8.8#53 for domain yyy.com
Mar 10 09:24:08 dnsmasq[617]: using nameserver 8.8.8.8#53 for domain zzz.com
  • Убедитесь, что ipset-набор создан и наполняется:
ipset --list rublock

В выводе должно быть некоторое количество IP-адресов.

  • Убедитесь, что отработало правило файервола, помечающее пакеты:
# iptables-save | grep rublock
-A PREROUTING -m set --match-set rublock dst,src -j MARK --set-xmark 0x1/0xffffffff
  • Посмотрите, что существует таблица роутинга для помеченных пакетов:
 # ip rule list
0:      from all lookup local
1000:   from all fwmark 0x1 lookup 1
32766:  from all lookup main
32767:  from all lookup default
  • Посмотрите куда направляются пакеты согласно этой таблице, в выводе должен быть IP-адрес VPN-сервера:
# ip route list table 1
default via 10.10.0.1 dev tun0

Таким образом можно выяснить в каком звене цепи возникла проблема.

Удачи в начинаниях!

Clone this wiki locally