qzeleza / kvas

vpn и shadowsocks клиент для роутеров keenetic
Other
649 stars 41 forks source link

Замечания по конфигурации dnsmasq #60

Closed antontkv closed 1 year ago

antontkv commented 1 year ago

Здравствуйте.

У меня есть несколько замечаний, по текущей конфигурации dnsmasq, которые я считаю не совсем корректными.

Использования wildcard (*) для "ловли" поддоменов.

dnsmasq сама "ловит" поддомены, любого домена указного в ipset, server и тд. То есть если конфиг будет ipset=/example.com/unblock, в unblock также будут попадать sub1.example.com, sub2.example.com, sub1.sub2.example.com и любые другие поддомены любого уровня.

Пример и описание из примера конфигурации из репозитория dnsmasq:

# Add the IPs of all queries to yahoo.com, google.com, and their
# **subdomains** to the vpn and search ipsets:
#ipset=/yahoo.com/google.com/vpn,search

Использование же wildcard (*) больше приводит к ошибкам, таким как здесь.

Удаление поддоменов при добавлении домена в конфигурацию dnsmasq

При добавлении в конфиг dnsmasq у домена убираются все поддомены через регулярку.

host=$(echo "${line}" | sed 's/^.*\.\(.*\.\w\{2,6\}\)$/\1/')

Есть ли в этом какой-то смысл? Потому что я не могу понять для чего это сделано. У меня есть несколько примеров, где мне не нужно добавлять весь домен в обход блокировки, а только определенный поддомен. И сейчас, это не возможно сделать, не изменив исходники скриптов.

Несколько примеров:

Для ChatGPT мне нужно добавить поддомен openaiapi-site.azureedge.net, чтобы обойти его блокировку по стране. Так как сейчас все реализовано, в обход добавится весь azureedge.net и все поддомены, а это огромный CDN, ширина VPN не у всех большая и из-за этого множество контента, который хостится на этом CDN будет грузиться медленно.

Есть блокировка у Xbox, которая осуществляется при логине и выходит ошибка, что сервис не доступен в данном регионе. Если пустить xsts.auth.xboxlive.com домен через VPN, то ошибка пропадает. Опять же, с текущей реализацией весь домен xboxlive.com и все его поддомены будут идти через VPN, что скажется на скорость всех сервисов, которые там хостятся.


Если посчитаете, эти замечания достаточно важными, чтобы их исправить, то могу подготовить Pull Request с исправлениями.

qzeleza commented 1 year ago

Доброго дня, спасибо за Ваш комментарий

Вы пробывали Ваши правки? Они работают? Если так, то жду Ваш Pull Request

И спасибо за посильное участие.

antontkv commented 1 year ago

Да, работают. Для себя я сделал две быстрые правки.

Здесь переделал строку.

-host=$(echo "${line}" | sed 's/^.*\.\(.*\.\w\{2,6\}\)$/\1/')
+host=$(echo "${line}")

Чтобы не удалять поддомены при добавление в dnsmasq.

И здесь:

-echo "${host}" | grep -q '\*' && test_it=0 || test_it=1
+echo "${host}" | grep -q '\*' && test_it=0 || test_it=0

Чтобы убрать проверку для хостов у которых нет * в начале, если у них не назначен IP.


Для проверки можно использовать команду traceroute -p 443 host, на подключенном к роутеру компьютеру, чтобы узнать через какой шлюз идет маршрут до определенного хоста. Если через шлюз VPN, значит обход работает, если через шлюз провайдера, значит обход не работает.

Например возьмем twimg.com с конфигом в dnsmasq:

ipset=/twimg.com/unblock
server=/twimg.com/127.0.0.1#9153

Сам домен twimg.com не имеет IP адрес, но у него есть несколько поддоменов, которые будут идти через VPN. То есть достаточно добавить родительский домен, чтобы все домены тоже шли через VPN.

$ traceroute -p 443 abs.twimg.com
traceroute to cs510.wpc.edgecastcdn.net (152.199.21.141), 64 hops max
  1   192.168.1.1  0.687ms  0.517ms  0.505ms <-- роутер
  2   10.3.0.1  148.710ms  148.295ms  149.836ms <-- шлюз VPN
traceroute -p 443 pbs.twimg.com
traceroute to cs672.wac.edgecastcdn.net (192.229.173.16), 64 hops max
  1   192.168.1.1  0.657ms  0.469ms  0.536ms <-- роутер
  2   10.3.0.1  148.525ms  148.539ms  148.301ms <-- шлюз VPN

Другой пример домен xsts.auth.xboxlive.com с конфигом в dnsmasq:

ipset=/xsts.auth.xboxlive.com/unblock
server=/xsts.auth.xboxlive.com/127.0.0.1#9153

Родительский домен будет идти через провайдера:

$ traceroute -p 443 xboxlive.com
traceroute to xboxlive.com (20.53.203.50), 64 hops max
  1   192.168.1.1  0.661ms  0.595ms  0.552ms <-- роутер
  2   145.255.20.249  1.029ms  0.946ms  0.939ms <-- шлюз провайдера

Другой поддомен будет идти тоже через провайдера:

$ traceroute -p 443 auth.xboxlive.com
traceroute to auth360.trafficmanager.net (52.143.85.83), 64 hops max
  1   192.168.1.1  0.629ms  0.536ms  0.464ms <-- роутер
  2   145.255.20.249  1.076ms  0.914ms  0.923ms <-- шлюз провайдера

А вот конкретный домен xsts.auth.xboxlive.com будет идти через VPN:

$ traceroute -p 443 xsts.auth.xboxlive.com
traceroute to xsts.auth.xboxlive.com.akadns.net (52.156.147.113), 64 hops max
  1   192.168.1.1  0.625ms  0.507ms  0.506ms <-- роутер
  2   10.3.0.1  148.077ms  148.323ms  148.449ms <-- шлюз VPN

Для нормального PR мои текущий "костыли" не подойдут, поэтому сам PR сделаю, когда подготовлю нормальную версию кода.

qzeleza commented 1 year ago

Отличная работа. Если не трудно - напишите мне на kvas собачка zeleza.ru