Страницы

Поиск по вопросам

Показаны сообщения с ярлыком dns. Показать все сообщения
Показаны сообщения с ярлыком dns. Показать все сообщения

воскресенье, 8 марта 2020 г.

Round Robin DNS

#dns


На работе потребовалось организовать балансировку нагрузки на два сервера с помощью
dns. Концепция абсолютно прозрачна и понятна, но непонятно, как это сделать с технической
точки зрения - насколько понимаю, А-запись может быть только одна, и среднестатистический
регистратор не просто так не дает добавить вторую.

Времени читать спеки в данный момент нет, поэтому прошу на пальцах объяснить, что
именно я должен сделать через регистратора.
    


Ответы

Ответ 1



A записей может быть сколько угодно. Для балансировки нагрузки надо именно добавить дополнительные записи с другими IP адресами. Если интерфейс регистратора не позволяет добавлять несколько записей уточните в техподдержке, действительно ли это так. Если не позволяет - меняйте регистратора или выносите DNS-сервера в другое место (поддержка DNS не обязательно должна быть на мощностях самого регистратора).

пятница, 14 февраля 2020 г.

Сделать внутри программный аналог HOSTS

#c_sharp #net #dns #httpclient #hosts


Есть необходимость в программе работать с сайтом, чье имя удалено из DNS. Работаю
с помощью классов библиотеки System.Net, а именно HttpClient.
При этом сайт отвергает запросы, в которых вместо имени хоста подставлен IP адрес,
т.е. в запросе должно фигурировать именно имя хоста. 
Частичное решение моей проблемы - занесение нужной записи в файл Hosts, но мне нужно
обеспечить:


контроль за обращением к списку Ip адресов соответствующих имени  
работу в условиях отсутствия админских прав (т.е. невозможности редактировать hosts) 


Вопрос: каким образом сделать так, чтоб внутри программы ресолвинг определенных имен
перехватить и делать самому?
    


Ответы

Ответ 1



Имеется библиотека, которая позволяет создавать прокси DNS сервер в самом C# приложении, который может перехватывать все запросы и направлять их на нужные адреса. Здесь имеется пример создания прокси DNS сервера. Приведу пример использования библиотеки: class Program { static DnsServer _proxyServer; static string _testDomain = "my.blablablakons.com"; static string _redirectIp = "127.0.0.1"; static string _realDnsServer = "8.8.8.8"; static Task StartProxyServer() { // Proxy to google's DNS MasterFile masterFile = new MasterFile(); // Resolve these domain to localhost //masterFile.AddIPAddressResourceRecord("blablablakons.com", _redirectIp); masterFile.AddIPAddressResourceRecord(_testDomain, "127.0.0.1"); _proxyServer = new DnsServer(masterFile, _realDnsServer); // Log every request //_proxyServer.Requested += (request) => Console.WriteLine(request); _proxyServer.Responded += (request, response) => Console.WriteLine("{0} => {1}", request, response); //_proxyServer.Listening += () => Console.WriteLine("Listening started"); //_proxyServer.Errored += (e) => { // Console.WriteLine("Errored: {0}", e); // ResponseException responseError = e as ResponseException; // if (responseError != null) Console.WriteLine(responseError.Response); //}; // Start the server (by default it listents on port 53) return _proxyServer.Listen(); } static async void Do(object data) { CancellationToken token = (CancellationToken)data; HttpClient client = new HttpClient(); client.Timeout = new TimeSpan(0, 0, 5); while (!token.IsCancellationRequested) { try { HttpResponseMessage response = await client.GetAsync(new Uri($"http://{_testDomain}")); } catch(Exception ex) { Console.WriteLine(ex); } await Task.Delay(1000); } } static void Main(string[] args) { Task listenTask = StartProxyServer(); // Start thread for send requests CancellationTokenSource cs = new CancellationTokenSource(); Thread requestThr = new Thread(new ParameterizedThreadStart(Do)); requestThr.Start(cs.Token); Console.WriteLine("All started"); Console.ReadLine(); cs.Cancel(); requestThr.Join(); _proxyServer.Dispose(); listenTask.Wait(); } } Суть работы примера: 1. Создается proxy-сервер, который публикуется на localhost по порту 53(порт по-умолчанию). При создании DNS сервера, основным(реальным) dns-сервером указываем адрес _realDnsServer(8.8.8.8). Те DNS имена, которые не будут найдены в нашем прокси DNS сервере, будут отправляться на этот указанный dns сервер 2. Прописываем для прокси сервера правило резолва требуемого DNS имени(_testDomain = "my.blablabla.com") на некий ip-адрес(_redirectIp = "127.0.0.1"), куда вы хотите отправлять запросы 3. В настройках операционной системы добавляем адрес нашего публикуемого прокси сервера (для простоты, я в настройках сетевого адаптера оставил один DNS адрес 127.0.0.1) 4. Все запросы к нашему DNS серверу логгируем _proxyServer.Requested += (request) => Console.WriteLine(request); 5. Запускаем поток, который раз в 1 секунду с помощью класса HttpClient делает GET запросы по DNS имени my.blablablakons.com. Запускаем приложение. Попытаемся открыть какую-нибудь страницу в браузере. При открытии страницы в браузере видим, что запрос по получению IP адреса открываемой страницы был проксирован через наш опубликованный сервер. Попытаемся открыть страницу my.blablablakons.com. Видим отображение страницы, которую указали в резолве. Таким образом, вы можете гибко из своего приложения управлять, на какие ip-адреса должны уходить ваши запросы, делая запрос по DNS-имени.

пятница, 7 февраля 2020 г.

Вывести адрес, под которым машина отправляет запросы к 8.8.8.8 (DNS)

#linux #bash #shell #dns


Задание:

Выведите IP адрес под которым машина отправляет запросы к 8.8.8.8 (учитывать NAT
после выхода пакета из машины не нужно, нужен IP адрес с которым пакет покидает машину).

Нужно написать Bash-скрипт. Как я понимаю, нужно понять где у нас в локальной сети шлюз.

На данный момент готово следующее:

используем tcpdump -
tcpdump -i any 'udp port 53' > whoIP - таким образом результат дампа со всеми запросами
на 53 порт(т.е. DNS) сохраняется в файл.

Файл содержит следующие строки:

15:09:44.365818 IP 192.168.0.102.11996 > 192.168.0.1.domain: 31675+ A? www.google-analytics.com.
(42) 

15:09:44.398267 IP 192.168.0.1.domain > 192.168.0.102.11996: 31675 7/0/0 CNAME www-google-analytics.l.google.com., A

затем при помощи "Адского" выражения:
cat whoIP | grep A? | grep -E -o '>+ ([0-9]{1,3}[.]){3}[0-9]{1,3}'| grep -E -o "([0-9]{1,3}[.]){3}[0-9]{1,3}"

Логика его такова:


cat whoIP |grep A?  - в файле мы ищем строки содержащие запрос на разрешении имени.
tcpdump помечает такие строки A? 
| grep -E -o '>+ ([0-9]{1,3}[.]){3}[0-9]{1,3}' - данное регулярное выражение ищет
IP-адрес в формате ipv4.
в строке мы ищем следующую конструкцию "> "ipv4 адрес"" - в tcpdump ">" означает
от кого к кому идет запрос. Нас интересует к кому.
| grep -E -o "([0-9]{1,3}[.]){3}[0-9]{1,3}" - из найденного фрагмента "к кому" вырезаем
только адрес.Данное выражение от предыдущего отличается лишь отсутствием "<"

В целом мой алгоритм следующий:


1.Запустить tcpdump и перенаправить его вывод в файл whoIP


Послать в другом терминал DNS-запрос при помощи dig
ОСТАНОВИТЬ TCPDUMP ctrl+c
grep файл


Во-первых, проблема в том, что в скрипт данную последовательность я заложить не могу,
т.к. tcpdump работает пока ему не послать сигнал завершения( вот тут и загвоздка).
Если в скрипте ищет запуск tcpdump, то следующие команды не исполняются, т.к. tcpdump
работает бесконечно.

Подскажите, можно ли написать данный скрипт и вообще иду ли я по верному пути, в
чем сомневаюсь очень сильно. Мне кажется, должно быть более простое решение.
    


Ответы

Ответ 1



Если это работает, то значит имеет право на жизнь. А tcpdump можно заставить работать как нужно. для начала нужно его запустить в фоне tcpdump .... параметры .... & символ & важен - он отправляет процесс в фон и можно будет продолжить скрипт дальше. Так как нам нужно будет потом его остановить, то следующей строкой запоминаем его pid. TDPID=$! эта строка должна быть сразу. Иначе она запомнит другой PID. TDPID - это просто переменная. дальше вставляете свой код. Когда нужно будет tcpdump остановить, просто посылаем ему Ctrl+C kill -3 $TDPID P.S. Важный момент, на который все натыкаются и долго не могут понять, что не так. В строке TDPID=$! не должно быть пробелов. Если написать так TDPID = $!, то работать не будет.

Ответ 2



Мне кажется, должно быть более простое решение. совершенно верно. если речь идёт о сетевой подсистеме программы linux версии выше или равной 2.0 (или 2.1? никак не могу запомнить), то можно воспользоваться программой ip: $ ip route get 8.8.8.8 8.8.8.8 via 192.168.0.1 dev eth0 src 192.168.0.2 cache в приведённом примере вывода 192.168.0.2 — это и есть ip-адрес, с которым будут покидать систему пакеты, адресованные к 8.8.8.8. если полный вывод программы не подходит, и этот адрес надо извлечь, то для удобства обработки можно добавить опцию -o (oneline): $ ip -o route get 8.8.8.8 8.8.8.8 via 192.168.0.1 dev eth0 src 192.168.0.2 \ cache и извлечь его с помощью, например, программы sed (кстати, параметры route и get в данном случае можно сократить до одной буквы): $ ip -o r g 8.8.8.8 | sed 's/.*src \([^ ]\+\) .*/\1/' 192.168.0.2 подробности смотрите в документации к программе ip: man ip, man ip-route. кстати, маршрутов может оказаться и более одного (например, при использовании на данной машине динамической маршрутизации). они все будут отображены, и, следовательно, в окончательном выводе будет более одной строчки с ip-адресами.

воскресенье, 26 января 2020 г.

Имена в NS-записях вместо адресов - неприятная особенность DNS

#dns


Чтобы разобраться в работе DNS, я попытался написать простой resolver без кэша, который
бы мог выполнять рекурсивные запросы, начиная с корневых серверов. Возникла проблема:
если сервер не располагает запрашиваемыми данными, то он возвращает нам в Authority-секции
NS-записи с именами тех серверов, которые "ближе к ответу", но он не обязан возвращать
A-записи в Additional-секции, соотв. NS-записям в Authority-секции. Он просто может
не знать адреса этих серверов - не обязан. Они могут быть не в его зоне. Исключение
- glue-записи.

Таким образом, что получается: имеем имя, адрес которого мы должны получить. Обращаемся
к одному из корневых серверов (его адрес мы берём из конфига). Он нам возвращает имена
серверов, которые "ближе к ответу" (вероятно, это те, зона которых включает Top-Level-
Domain). А вот адресов их он нам не сообщает. Пусть и сообщит, но на следующей итерации
- один из этих серверов сообщит нам имя сервера "ближе к ответу", но не его адрес.
Т.о. у нас на руках будет уже 2 имени, адреса которых нужно получить, причём адрес
первого мы не получим не зная адреса второго. Будем пытаться получить адрес 2-ого,
получим ещё одно имя. Рекурсия, чёрт! Как бы всё было проще, если бы в NS-записях был
адрес, а не имя. Но нет, в теории по любому имени с помощью системы DNS мы можем получить
сооотв. адрес, но на практике это усложняет процесс.

Вопрос: почему в NS-записях содержится имя, а не адрес? Разве так часто меняются
адреса DNS-серверов, что сложно обновлять файл зоны? Удобство здесь маленький плюс,
по сравнению с усложнением всей схемы.
Почему эта рекурсия (которую описал) вообще конечна?

P.S: знаю, что поэкспериментировав, выполняя вручную последовательные запросы, м.б.
я бы разобрался в чём тут дело, но руки не доходят. Может кому ещё будет полезно мой
комментарий/замечание по системе DNS.
    


Ответы

Ответ 1



почему в NS-записях содержится имя, а не адрес? потому что именно так изложено в rfc1035. это даёт определённую гибкость и обратную совместимость: например, даже в рамках той же arpanet не так давно была добавлена совершенно иная схема адресов, и у a resource record появилось «дополнение» в виде aaaa resource record. а ведь (в принципе) на arpanet свет клином не сошёлся, и добавление новых схем адресации легко впишется в текущую реализацию протокола. дополнение про масштабируемость одно и то же имя может «обслуживаться» произвольным количеством физических устройств: $ dig -t a ya.ru ;ya.ru. IN A ya.ru. 5833 IN A 93.158.134.3 ya.ru. 5833 IN A 213.180.193.3 ya.ru. 5833 IN A 213.180.204.3 дополнение про расширяемость одно и то же имя может «обслуживаться» физическими устройствами, доступными из разных сетей: $ dig -t aaaa ya.ru ;ya.ru. IN AAAA ya.ru. 22 IN AAAA 2a02:6b8::3 дополнение про совместимость когда в будущем возникнет необходимость адресовать физические устройства в какой-нибудь совершенно новой сети, в протоколе не нужно будет ничего менять. достаточно будет всего лишь добавить ещё один тип записи: $ dig -t xyz ya.ru ...

пятница, 24 января 2020 г.

Как перенаправить все исходящие интернет-запросы устройств на сокет на одном из устройств в локальной сети

#сеть #dns #роутер #dhcp #порты


Доброго времени суток. Имеется ноутбук, роутер Asus RT-N53, и несколько устройств,
подключённых к нему по Wi-Fi. Можно ли все исходящие интернет-запросы устройств (на
любой веб-сервер, IP-адрес в интернете, и т.п. любого TCP-, UDP-порта и т.д.) перенаправить
на сокет, запущенный на ноутбуке на порту x? То есть, если я открою веб-страницы в
браузере по адресу, к примеру, www.google.com, 111.222.333.454:666, test.abvgd.privet
или localhost:5555 должна отобразиться веб-страница, которую предоставит мне сокет,
запущенный на ноутбуке. Так же, при попытке установить соединение с сокетом по протоколу
UDP, чтобы также в ответ получалась моя веб-страница с моего сокета (могу запустить
сокет на обоих протоколах TCP и UDP). Как такое реализовать?

DNS-сервер не в помощь, он только домены умеет "перенаправлять", т.е. если я зайду
в браузере на веб-страницу www.yandex.ru, то сервер сможет перенаправить меня на сокет
на ноутбуке в локальной сети, а если я наберу 77.88.55.55 (IP-адрес домена Яндекса),
то DNS-сервер об этом запросе не узнает, и пользователь сможет посетить сайт Яндекса.
    


Ответы

Ответ 1



Та точка, через которую проходят все запросы, обычно, ваш роутер. Значит перехватывать все запросы можно на нём. Если у вас роутер на Linux, что скорее всего, то переадресовать пакеты на порт на самом роутере можно так: iptables -t nat -A PREROUTING -j REDIRECT --to-port 9040 На другой компьютер в сети тоже можно все переадресовать: iptables -t nat -A PREROUTING -j DNAT --to-destination 192.168.1.2 Затем нужно на том компьютере поймать эти пакеты и переадресовать их на нужный порт. Может быть проще будет настроить этот компьютер как мост. Пример такой настройки в целях обхода разных глупых и бесполезных запретов через Tor.

четверг, 9 января 2020 г.

DNS. Для чего нужны записи типа NS? [дубликат]

#dns #ns


        
             
                
                    
                        
                            На этот вопрос уже дан ответ здесь:
                            
                        
                    
                
                        
                            Имена в NS-записях вместо адресов - неприятная особенность DNS
                                
                                    (1 ответ)
                                
                        
                                Закрыт 2 года назад.
            
                    
Зачем нужны DNS записи типа NS?
Ведь они возвращают только имя авторитетного DNS сервера.
Потом ведь всё равно придётся делать ещё один запрос, чтобы по этому имени узнать
реальный адрес.   

Зачем эта лишняя операция? Почему сразу не запросить IP нужного DNS сервера?  

В книге сказано только что:


  Такой тип записи используется, чтобы
  направлять DNS-запросы дальше по цепочке.


Но до меня что-то не доходит.
    


Ответы

Ответ 1



NS запись указывает, куда стучаться за подробной информацией по домену. Зачем эта лишняя операция, почему сразу не запросить IP нужного DNS сервера? Ну вот пишите вы приложение, вам нужно послать запрос на свой сервер. У вас выбор, посылать сразу по IP или по доменному имени (тогда будет использоваться NS запись). Вы куда-то выложили своё приложение. Но вот незадача, у вас упал сервер, вы подняли новый, там другой IP, что делать будете? Пересобирать приложение? Если бы вы использовали доменное имя, то вы бы просто поменяли A запись, а тот, кто ответственен за всё это дело (тот, кто у вас в NS записи) всё настроит и при обращению по имени домена теперь новый IP будет выдаваться. Ну да, там есть промежуток времени, пока DNS A запись ещё не сменилась и пользователям будет резолвится старый IP, но это всяко лучше, чем пересобирать приложение. Для решения этих проблем есть всякие балансеры и т.п, но это уже совсем другая задача.

понедельник, 6 января 2020 г.

Настроить ssl на nginx

#linux #nginx #ssl #dns


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

Есть некий сервер, на котором nginx слушает один адрес (допустим, 1.1.1.1). Адрес
резолвится в большую кучу dns-имён, при чём, самых разных. Допустим, у меня для каждого
имени есть свой SSL-сертификат. Как мне настроить nginx, чтоб они для каждого имени
ассоциировал свой сертификат?
    


Ответы

Ответ 1



Насколько я понимаю, у вас сервер имеет ip 1.1.1.1, на нем nginx и много dns указывают в A-записи на 1.1.1.1 Тогда так server { listen 80; server_name site1.com www.site1.com; rewrite ^(.*) https://$host$1 permanent; } server { listen 443; ssl on; ssl_certificate /etc/nginx/ssl/site1.pem; ssl_certificate_key /etc/nginx/ssl/site1.key; server_name site1.com www.site1.com; root /var/www/site1; ... } server { listen 80; server_name site2.com www.site2.com; rewrite ^(.*) https://$host$1 permanent; } server { listen 443; ssl on; ssl_certificate /etc/nginx/ssl/site2.pem; ssl_certificate_key /etc/nginx/ssl/site2.key; server_name site2.com www.site2.com; root /var/www/site2; ... } Для каждого сайта сначала слушаем порт 80, делаем rewrite с http на https, потом слушаем 443. Это выдержка из рабочего конфига nginx.

Ответ 2



насколько я помню можно конфиги для разных сайтов вынести из основного. ссылка

воскресенье, 5 января 2020 г.

Несколько ip в файле hosts с одинаковым dns именем

#linux #ip #dns #hosts


Возможно ли на сервере linux в файле hosts прописать 2 разных ip адреса с одним и
тем же dns именем? А так же хотелось бы уточнить как происходит чтение файла hosts?
Или как можно организовать правильное обращение сервиса по dns имени, с расчетом того,
что ip адресов может быть несколько?
    


Ответы

Ответ 1



да, конечно, одно и то же имя можно употреблять в файле /etc/hosts многократно. безразлично: в одной строке или в разных. возвращены будут результаты для первого найденного совпадения. p.s. возвращать разные результаты dns-запросов умеют специализированные программы: dns-серверы.

вторник, 31 декабря 2019 г.

Почему сайты не доступны по ip адресу?

#url #ip #dns #браузер #домен


Почему, если вбить в поисковую строку браузера ip-адрес сайта вместо url он будет
не доступен? Если я не ошибаюсь, браузер не откроет сайт по ip-адресу, даже если у
сайта ip выделенный.
    


Ответы

Ответ 1



Это зависит от настроек сервера и вида веб-сервера. Обычно, если специально ничего не делать, и сайт только один на сервере, то он будет открываться и по IP адресу. Несложно сделать так, чтобы для неизвестных доменов, и для запросов без заголовка Host, откры­вался ка­кой-то специально предназначенный сайт с одной страницей с объяснениями. Например, в случае nginx такой специальный сайт должен быть помечен параметром default_server. Если мы говорим о каком-то массовом виртуальном хостинге, то обычная практика делать имен­но так, то есть ограничивая доступ к серверу по IP. Никто не хочет выслушивать жалобы от недо­вольного клиента, сайт которого, по случаю оказавшийся первым в списке, откры­ва­ется при вво­де в адресную строку какого-то другого домена, который по любой причине ука­зывает на IP сервера. Владелец того другого домена тоже не будет рад такому развитию событий. Если ваш сайт работает по HTTPS, то одной настройки сервера будет недостаточно. Нужно будет получить SSL сертификат и для домена, и для IP адреса. Последнее не всегда возможно.

воскресенье, 1 декабря 2019 г.

Как блокируют доступ к сайтам? telnet vs. браузер

#http #dns #маршрутизация


При попытке открыть Кинозал.тв в любом браузере перебрасывает на заглушку РосКомНадзора.

Москва, провайдер ОнЛайм, OS X 10.11.2 El Capitan. DNS у меня стоят гугловские. Запрос
браузера идёт по правильному адресу, к CloudFlare – на этот же ip ресолвится имя сайта
и с зарубежных vps'ов. В ответ в браузеры приходит просто редирект на заглушку:



Если же проделать соединение не браузером, а telnet на порт 80, то всё работает как
положено – возвращается html страницы:



Это так же работает, если в telnet отправить все те же HTTP заголовки, что и шлёт
браузер:

GET / HTTP/1.1
Host: kinozal.tv
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko/20100101
Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: uid=1234567; pass=XXXXXXXX; __cfduid=abcdefe0171f2defb37070b1428009916; stylet=0
Connection: keep-alive


Хотя заголовок про gzip лучше убрать, а то в терминал валится нечитаемый бинарный
мусор компрессированного контента.

Пока единственная разница, которую нашёл – во времени: в telnet от момента соединения
до отправки заголовков проходит пара секунд, пока я вручную сделаю paste. В браузере
это происходит за миллисекунды. Надо попробовать с curl..

Вопросы: как и где происходит подмена ответа заблокированных серверов; Почему запросы
из telnet обходят этот механизм?

Нашёлся ответ habrahabr.ru/post/249433 в конце ответа после UPD. Вкратце:


  Стоило вам присмотреться к трафику, который приходит на интерфейс от Ростелекома.
Вероятно, DPI подключен параллельно, а не последовательно, и туда приходит только клиентский
трафик. Т.к. DPI стоит явно ближе, чем вебсайт, пакет с Location от DPI приходит быстрее,
чем реальный первый пакет от сайта, а пакет от сайта уже отбрасывается ядром ОС как
ретрансмиссия, поэтому, если вы используете Linux, достаточно одной строки в iptables,
чтобы обойти блокировку:

iptables -A INPUT -p tcp --sport 80 -m string --algo bm --string "http://95.167.13.50/?st"
-j DROP


    


Ответы

Ответ 1



запустил такую команду на двух компьютерах, один из которых находится в рф (провайдер highlink), другой — в фрг: $ echo -ne 'GET / HTTP/1.1\r\nHost: kinozal.tv\r\n\r\n' | nc -i 1 kinozal.tv 80 сравнение вывода этих команд (оставлены лишь существенные фрагменты): $ diff -ruaN kinozal.frg kinozal.rf --- kinozal.frg 2016-01-22 11:51:53.000000000 +0000 +++ kinozal.rf 2016-01-22 11:51:01.000000000 +0000 @@ -1,13 +1,21 @@ -HTTP/1.1 200 OK -Date: Fri, 22 Jan 2016 11:51:18 GMT -Content-Type: text/html; charset=windows-1251 -Transfer-Encoding: chunked -Connection: keep-alive -Set-Cookie: __cfduid=df6ffc8c31e9a6f6f2e233c7f44bf81761453463478; expires=Sat, 21-Jan-17 11:51:18 GMT; pa th=/; domain=.kinozal.tv; HttpOnly -Server: cloudflare-nginx -CF-RAY: 268b0bd3e28e2690-FRA +HTTP/1.1 302 Moved Temporarily +Server: nginx/1.0.15 +Content-Type: text/html +Content-Length: 173 +Connection: close +Location: http://blocking.hl.ru:88 -505 + +302 Found + +

302 Found

+
nginx/1.0.15
+ + + +------------0b0ac4bb16a6-ARN + +f77 дальше в обоих файлах идёт содержимое страницы, отдаваемой сайтом kinozal.tv. как видно из вывода программы diff: изменены заголовки ответа сервера, благодаря чему браузер должен повторить запрос, но уже по адресу http://blocking.hl.ru:88 (доменное имя hl.ru принадлежит тому самому провайдеру highlink); после заголовка вставлен ещё один блок html с текстом-заглушкой. ваш провайдер, вероятно, использует что-то иное. может быть добавляется заголовок с перенаправлением, может быть добавляется блок с javascript-ом, выполняющим переход.

вторник, 16 июля 2019 г.

Переезд к новому регистратору, стерлись настройки

Добрый день Переезжали от одного регистратору к другому (только доменные имена) При передаче все настройки обнулились и наши сайты и сервисы перестали работать. Подскажите, это обычная практика (т.е. любой переезд вырубает сайты на период до 2х суток) или все таки ошибка со стороны передающего регистратора (именно он обнулил настройки и не передал их целевому регистратору)? Возможна ли "гладкая" смена регистратора?


Ответ

Обычно регистраторы позволяют указать свои DNS сервера. Если не хочется проблем при переезде (или при даунтайме у регистратора), то стоит заранее разделить DNS и саму регистрацию домена:
Взять сторонний сервис DNS - Amazon Route 53, например - он копеечен. Перенести на него все записи. Поменять неймсервера в настройках домена с регистраторских на сервера амазона для домена. Подождать пока изменения вступят в силу. При переезде у нового регистратора указать те же самые сервера амазона.
Тогда смена регистратора пройдет без даунтайма.
Если новый регистратор при переезде не позволяет указать сторонние DNS сервера - то к нему не стоит переезжать вообще.

пятница, 21 июня 2019 г.

Переадресация всех запросов с не существующих поддоменов на главную

Что необходимо сделать чтобы все запросы,которые идут на не существующие поддомены,отправлялись на главную основы?(что-то слышал про вариант 404,но он не подходит).
Сейчас при попытке достучаться до не существующего саба получаю ошибку от браузера,якобы сервер не доступен.
Пробовал указывать что-то подобное,история повторяется:
Мне недавно на ухо шепнули,что нужно еще как-то правильно сконфигурировать .htaccess...


Ответ

Добавить в DNS вот такую запись думаю будет достаточно:
*.mywebsite.ru CNAME mywebsite.ru
От автора вопроса: важно учитывать что проблема не решится только при указании данного в ДНС домена.Здесь нужно сконфигурировать правильно конфигурационные файлы NGINX\APACHE (если у вас все вместе и NGINX как прокси-сервер,то править скорее всего нужно только его).

среда, 19 июня 2019 г.

Настройка DNS Bind9

Добрый день, дорогие друзья. Есть вопрос по Bind9. Я в нём только начинаю разбираться и вот появилась задача где нужно перенаправлять все запросы на DNS на 1 IP. То есть на любой запрос домена, DNS сервер должен ответить одним IP-адресом.
Большое спасибо.


Ответ

Идём в файл /etc/bind/named.conf.default-zones. Находим запись о корневой зоне. Она имеет следующий вид:
zone "." { type hint; file "/etc/bind/db.root"; }
Меняем её на следующую:
zone "." { type master; file "/etc/bind/db.fakeroot"; }
Далее создаём файл /etc/bind/db.fakeroot со следующим содержимым:
; Стартовая запись зоны. @ IN SOA ns.example.com. admin.example.com ( ; Основной сервер имён, e-mail администратора. 2016061001 ; Серийный номер. 1h ; Интервал обновления для вторичных серверов. 1h ; Интервал повтора запроса вторичного сервера при неудаче. 1w ; Время обслуживания зоны вторичными серверами при отказе первичного. 1h ; Время кэширования отрицательных ответов. )
IN NS xxx.xxx.xxx.xxx * IN A xxx.xxx.xxx.xxx
(Подставляем здесь вместо xxx.xxx.xxx.xxx требуемый адрес.)
Далее перезапускаем сервер командой rndc reload и радуемся результату.
Если хотим перенаправлять на свой сервер также и IPv6-трафик, то добавляем в /etc/bind/db.fakeroot строку следующего вида:
* IN AAAA xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
(Подставляем здесь вместо xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx требуемый IPv6-адрес.)

Сайт на основном домене и поддомене - разные по содержанию

Подскажите, чем чревато размещение на основном домене, например site.com сайта автомобильной тематики (к примеру), а на субдомене another.site.com - абсолютно другого сайта, скажем о музыке?
В Сети много споров на эту тему, и однозначного ответа я не нашел. Как это повлияет с точки зрения SEO? Спасибо.


Ответ

Обратим внимание на мотивы подобного "разделения". Для чего прибегать к такому подходу? Если ответ - экономия на другом домене, то: а) это не серьёзно; б) и о какой раскрутке может идти речь, когда экономят на основном "имени", ибо это равнозначно (визуально) сайту на бесплатном хостинге. А если же ответ на данный вопрос с этой причиной не связан, то прибегнем к опыту других сайтов с подобным подходом.
Например площадки для личных блогов от Google, LiveJournal и т.п., работают как раз по такому принципу, где каждому участнику создаётся свой поддомен, по адресу которого содержится его блог с тематикой, отличной от тематики других участников. И тем не менее поисковые системы вполне отлично разбираются "что" и "где" искать.

четверг, 30 мая 2019 г.

Round Robin DNS

На работе потребовалось организовать балансировку нагрузки на два сервера с помощью dns. Концепция абсолютно прозрачна и понятна, но непонятно, как это сделать с технической точки зрения - насколько понимаю, А-запись может быть только одна, и среднестатистический регистратор не просто так не дает добавить вторую.
Времени читать спеки в данный момент нет, поэтому прошу на пальцах объяснить, что именно я должен сделать через регистратора.


Ответ

A записей может быть сколько угодно. Для балансировки нагрузки надо именно добавить дополнительные записи с другими IP адресами. Если интерфейс регистратора не позволяет добавлять несколько записей уточните в техподдержке, действительно ли это так. Если не позволяет - меняйте регистратора или выносите DNS-сервера в другое место (поддержка DNS не обязательно должна быть на мощностях самого регистратора).

среда, 20 февраля 2019 г.

Настроить ssl на nginx

Здравствуйте!
Есть некий сервер, на котором nginx слушает один адрес (допустим, 1.1.1.1). Адрес резолвится в большую кучу dns-имён, при чём, самых разных. Допустим, у меня для каждого имени есть свой SSL-сертификат. Как мне настроить nginx, чтоб они для каждого имени ассоциировал свой сертификат?


Ответ

Насколько я понимаю, у вас сервер имеет ip 1.1.1.1, на нем nginx и много dns указывают в A-записи на 1.1.1.1
Тогда так
server { listen 80; server_name site1.com www.site1.com; rewrite ^(.*) https://$host$1 permanent; } server { listen 443; ssl on; ssl_certificate /etc/nginx/ssl/site1.pem; ssl_certificate_key /etc/nginx/ssl/site1.key;
server_name site1.com www.site1.com; root /var/www/site1;
...
}
server { listen 80; server_name site2.com www.site2.com; rewrite ^(.*) https://$host$1 permanent; } server { listen 443; ssl on; ssl_certificate /etc/nginx/ssl/site2.pem; ssl_certificate_key /etc/nginx/ssl/site2.key;
server_name site2.com www.site2.com; root /var/www/site2;
...
}
Для каждого сайта сначала слушаем порт 80, делаем rewrite с http на https, потом слушаем 443.
Это выдержка из рабочего конфига nginx.

пятница, 21 декабря 2018 г.

Почему сайты не доступны по ip адресу?

Почему, если вбить в поисковую строку браузера ip-адрес сайта вместо url он будет не доступен? Если я не ошибаюсь, браузер не откроет сайт по ip-адресу, даже если у сайта ip выделенный.


Ответ

Это зависит от настроек сервера и вида веб-сервера. Обычно, если специально ничего не делать, и сайт только один на сервере, то он будет открываться и по IP адресу. Несложно сделать так, чтобы для неизвестных доменов, и для запросов без заголовка Host, откры­вался ка­кой-то специально предназначенный сайт с одной страницей с объяснениями.
Например, в случае nginx такой специальный сайт должен быть помечен параметром default_server
Если мы говорим о каком-то массовом виртуальном хостинге, то обычная практика делать имен­но так, то есть ограничивая доступ к серверу по IP. Никто не хочет выслушивать жалобы от недо­вольного клиента, сайт которого, по случаю оказавшийся первым в списке, откры­ва­ется при вво­де в адресную строку какого-то другого домена, который по любой причине ука­зывает на IP сервера. Владелец того другого домена тоже не будет рад такому развитию событий.
Если ваш сайт работает по HTTPS, то одной настройки сервера будет недостаточно. Нужно будет получить SSL сертификат и для домена, и для IP адреса. Последнее не всегда возможно.