Nowe posty

Autor Wątek: Problem z DNS  (Przeczytany 4508 razy)

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2481
  • 1709
    • Zobacz profil
Problem z DNS
« dnia: 2021-03-26, 14:10:42 »
Mam problem z tak zwanym " DNS dostawcy internetu ".
( Nazwy i IP celowo zasłonilem xx )
$ ping -c20 (FQDN)xx.it
ping: xx.xx.it: Ta nazwa lub usługa jest nieznana

Generalnie internet działa, nie zauważyłem problemów
Korzystam z kilku darmowych DNS firm w internecie, albo jak kto woli " A fully qualified domain name (FQDN) "  żeby wskazywał moje IP.

1. Jak zmienię DNS dostawcy mojego internetu na googla lub inne w /etc/resolv.conf  to wtedy ping ( z własnym FQDN ) działa prawidłowo.

2. Korzystając z DNS dostawcy, mogę tak ping-ować się ( własne FQDN ) ileś razy i końcu ping dostaje odpowiedz od DNS jakie IP ping-ować i ping działa.

3. Próbowałem czytać rożne poradniki
i np. korzystając z DNS  mojego dostawcy internetu
$ dig +short +trace (FQDN).xx.it
...
A moje_IP from server x.x.x.x in 43 ms.
Czyli widzi moje IP. Mogę tak próbować kilka razy i zwraca IP.


A chciałbym uzyskać przybliżoną nazwę serwera lub IP z którym mam problem żeby zgłosić usterkę.
Ale nie wiem jak.
Zastanawia mnie także w  " dig +trace xx.xx.it " linie która zawiera chyba klucz --> RRSIG , czy istnieje możliwość jego sprawdzenia.
« Ostatnia zmiana: 2021-03-26, 14:15:53 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2733
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • keybase.io/pkraszewski
Odp: Problem z DNS
« Odpowiedź #1 dnia: 2021-03-26, 17:02:13 »
Nie rozumiem części "Korzystam z kilku darmowych DNS firm w internecie, albo jak kto woli " A fully qualified domain name (FQDN) "  żeby wskazywał moje IP."

Korzystasz jakiejś usługi typu DynDNS, czy masz wykupioną domenę i jest serwowana z czyjegoś serwera DNS (typu nazwa.pl, home.pl, godaddy czy inny usługodawca)?

Poza tym jeżeli masz dynamiczne IP, to pamiętaj, że serwery DNS keszują wyniki (na podstawie pola TTL we wpisie w DNS) i trochę trwa, zanim stary wpis całkiem się deaktywuje. Niektóre serwery zaokrąglają dodatkowo TTL w górę, np do pełnej godziny, żeby ograniczyć liczbę zapytań do serwerów nadrzędnych.

RRSIG jesst częścią mechanizmu DNSSEC.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2481
  • 1709
    • Zobacz profil
Odp: Problem z DNS
« Odpowiedź #2 dnia: 2021-03-26, 19:03:37 »
Cytuj
Korzystasz jakiejś usługi typu DynDNS
Dokładnie tak, chociaż sugerowana tam nazwa DDNS  ( Dynamic Domain Name System https://en.wikipedia.org/wiki/Dynamic_DNS  )
nie jestem pewien czy jest poprawna, ponieważ kiedyś miałem problem z dogadaniem się z kimś i  dlatego napisałem FQDN żeby była większa jasność.

Generalnie dynamiczne IP zmienia mi się bardzo rzadko, więc problem z kesz-owaniem odpada.
Natomiast usługa DynDNS lub inne tego typu działają prawie od razu po wciśnięciu przycisku "stwórz",
 np.  moja_nowa_strona.dyn.en --  moje_IP   -- <Stwórz>
Mnie to bardziej przypomina problem z łączem internetowym.
Gdybym łączył się z kimś po IP wystarczyło by użyć
mtr --report moje_IP
i oszacować punkt usterki. Potem przed usterką za pomocą "whois" znaleźć usługodawcę i grzecznie poinformować go o problemie.
On wtedy sprawdza i przekazuje problem dalej lub robi przekierowanie ruchu.

Chociaż wiem że to nie jest robota dla zwykłych użytkowników internetu :D
Ale kiedyś już miałem podobny problem z internetem i mój dostawca internetu nie potrafił pomóc.
Tym razem mam problem od około tygodnia z DNS.
A że raz na parę minut działa więc zakładam że problem jest bardzo podobny, choć dotyczy czegoś innego,
więc zakładam że działa to tak:
Zapytanie moje: dyn.en --> DNS dostawcy internetu
moje <-- Odpowiedz DNS dostawcy internetu: IP do dyn.en
Zapytanie moje: moja _strona --> dyn.en
moje <-- Odpowiedz  dyn.en: IP do moja _strona.

Nie wiem, może mam takiego pecha że w czasie zrywania połączenia " dig +short +trace moja_strona.xx.it " działa lepiej od pinga.
« Ostatnia zmiana: 2021-03-26, 19:14:41 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2733
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • keybase.io/pkraszewski
Odp: Problem z DNS
« Odpowiedź #3 dnia: 2021-03-30, 08:32:00 »
Cytuj
Zapytanie moje: dyn.en --> DNS dostawcy internetu
moje <-- Odpowiedz DNS dostawcy internetu: IP do dyn.en
Zapytanie moje: moja _strona --> dyn.en
moje <-- Odpowiedz  dyn.en: IP do moja _strona.

Nie.
0/ Program X próbuje się dostać do mojastrona.example.com
1/ Twój komputer -> twój domyślny serwer DNS "jaką zawartość ma pole A dla wpisu mojastrona.example.com"
2/ Są 3 możliwe odpowiedzi:
   a) mojastrona.example.com ma wpis 1.2.3.4 ->  sukces, idź do punktu 4
   b) nie wiem, i nie wiem kto może wiedzieć -> błąd "adres nie istnieje", koniec
   c) nie wiem, ale serwery DNS z takimi to a takimi adresami IP mogą wiedzieć
3/ Ponawiasz pytanie, tylko że tym razem do wskazanego nowego serwera i wracasz do punktu 2
4/ Program X łączy się do 1.2.3.4
5/ Profit!

I tu ważna sprawa - to nie tak, że jak serwer A nie zna odpowiedzi to pyta serwer B, jak B nie zna to B pyta C, itd. Każdy serwer odpowiada wyłącznie klientowi i to klient odpytuje kolejne serwery. Nie ma "proszę czekać, przełączę pana do innego sekretariatu" tylko "proszę zadzwonić z pytaniem pod numer ...".

Jeżeli działa dobrze przez DNS Google'a (8.8.8.8 ) to sprawdź jeszcze CloudFlare'a (1.1.1.1). Jak też zadziała, to znaczy, że jest coś nie tak z DNS twojego operatora, najprawdopodobniej zwraca złe rekordy IN NS (to punkt 2c ze schematu).

Na ogół jeden z pierwszych etapów pośrednich to "idź pan w uj i pytaj głównych serwerów DNS" i przekierowuje na baterię serwerów root-servers.net i od nich klient wędruje w dół.

Cytuj
... i oszacować punkt usterki. Potem przed usterką za pomocą "whois" znaleźć usługodawcę i grzecznie poinformować go o problemie.

No niestety, w rzeczywistym świecie to tak nie działa... Wiem z pierwszej ręki...

Firma 1, w której pracuję zrobiła urządzenie dla firmy 2, która się łączy z ich IP (publicznego) Z na nasz serwer z publicznym adresem A. No i "nie bangla". To robię wszelkie mi znane tracerouty od nas do nich i każdym programem i systemem dostaję taką sekwencję hopów:

A - B - C - D - E - F - D - G - H (tu się pakiety gubią) ... Z

Jak da się w ogóle skonfigurować routing z pętelką?????? Tj mam jeden pomysł, policy based routing zależny od TTL pakietu, ale k...a JAK? I oczywiście wszyscy po drodze, nasz operator, ich operator (mają bezpośredni styk, ale pętla była już całkowicie po ich stronie), rozkładają ręce "niemożliwe". To ja im wysyłam raport. To oni "o k*a, faktycznie". Po dwóch tygodniach nieskutecznych modlitw do bogów routingu (tak to jest, jak składa się w ofierze wotum z CAT5 zamiast z CAT7E - bogom routingu robi to różnicę) klient zmienił operatora i magia, zadziałało...
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2481
  • 1709
    • Zobacz profil
Odp: Problem z DNS
« Odpowiedź #4 dnia: 2021-04-20, 13:47:58 »
1. Żeby pokazać problem i być bardziej poważnie potraktowanym
można stworzyć DDNS testowe z przekierowaniem do jakiejś popularnej strony.
I powiedzieć że dana strona Tobie / Mnie nie działa.

Moje DDNS nie prowadzi do żadnej strony, ponieważ ma inne zadanie, więc stworzyłem sobie takie testowe DDNS.
W dzisiejszych czasach coraz trudniej znaleźć IP które w przeglądarce od razu wyświetla jakąś stronę i jeszcze po angielsku dla zagranicznego serwisu /administratora DNS.
Ja znalazłem np. ubuntu.com
$ ping -c 1 ubuntu.com
PING ubuntu.com (91.189.88.180) 56(84) bytes of data.
Po wklejeniu w przeglądarkę 91.189.88.180 wyświetla się strona ubuntu.com.
Po wklejeniu mojego DDNS w przeglądarkę wyświetla się strona ubuntu.com.

PS:  Czasami przeglądarka nie wyświetli strony jeśli uważa część Twojego adresu DNS / DDNS za zagrożenie.
Musisz wybrać inny adres lub zaakceptować ryzyko klikając odpowiedni przycisk lub słowo w komunikacie o zagrożeniu.

2. Może się komuś przyda skrypt.
Należy tylko wziąć pod uwagę że gdy  widzisz coś takiego na wyjściu komendy mtr
11.|-- ???                                                    100.0
Jeśli jest to linia pomiędzy to te połączenie jest albo wadliwe albo pośrednik się ukrywa i nie można stwierdzić czy te połączenie jest wadliwe.
Jeśli jest to ostatnia linia komendy mtr, to tu poprawka i przepraszam ale tego nie jestem pewien.
Mam po prostu jednocześnie kilka połączeń z nie wielką utratą danych które mogą być także winne.

Skrypt:
#!/bin/bash


# Developed for Linux
# License: GNU GPL v.3
# Version 2
# Destiny: Script for check DDNS
# Script usage: bash script name.freedns.com


# Check Dependecies
# List created automatically by find.bash.dep.sh version=7 source=https://github.com/tele1/LinuxScripts
[[ -z $(type -P awk) ]] && DEP="$DEP"$'\n'"awk"
[[ -z $(type -P dig) ]] && DEP="$DEP"$'\n'"dig"
[[ -z $(type -P echo) ]] && DEP="$DEP"$'\n'"echo"
[[ -z $(type -P grep) ]] && DEP="$DEP"$'\n'"grep"
[[ -z $(type -P mtr) ]] && DEP="$DEP"$'\n'"mtr"
[[ -z $(type -P ping) ]] && DEP="$DEP"$'\n'"ping"
[[ -z $(type -P printf) ]] && DEP="$DEP"$'\n'"printf"
[[ -z $(type -P sed) ]] && DEP="$DEP"$'\n'"sed"
[[ -z $(type -P tail) ]] && DEP="$DEP"$'\n'"tail"
[[ -z $(type -P wc) ]] && DEP="$DEP"$'\n'"wc"
[[ -z $(type -P whois) ]] && DEP="$DEP"$'\n'"whois"
 
# End script if exist any error
[ -z "$DEP" ] || { echo "   Error: Missing dependencies, before run script please install: $DEP"  ; exit 1  ;}


[ -z "$1" ] && { echo "Nie podano adresu www" ; exit 1 ;}


# Kolory
NC='\e[0m'    # Reset Color
BL='\e[0;36m' # Cyan ECHO
GN='\e[0;32m' # Green ECHO
YW='\e[0;33m' # Yellow ECHO
RD='\e[0;31m' # Red ECHO


# Wydobądź wszystkie adresy | wyświetl jesli 4 kolumna zawiera NS
LISTA_ADRESOW=$(dig +trace +dnssec "$1" |  awk '$4 ~ /NS$/' |  awk '{ print $5 }')


echo "LISTA_ADRESOW:"
echo "$LISTA_ADRESOW"
echo "==============="


while read WEB ; do
    echo "ping ${WEB}"
    # Pingowanie x10 strone | pokazanie tylko liczby utraconych pakietow
    LOSS=$(ping -c 10 "$WEB" | grep -oP '\d+(?=% packet loss)')

    if [[ ! $LOSS -eq "0" ]]; then
        printf "==>  ${WEB} = ${LOSS} %%\n"
        # Printf ma czasem problem i nie wiem czemu ": printf: `': nieprawidłowy znak formatujący"
        # LISTA_NIEPRAWIDLOWOSCI=$(printf "${LISTA_NIEPRAWIDLOWOSCI}\n${WEB} ${LOSS} %%")
        LISTA_NIEPRAWIDLOWOSCI="$LISTA_NIEPRAWIDLOWOSCI"$'\n'"${WEB} ${LOSS} %"
    fi
done <<< "$LISTA_ADRESOW"


# Usuniecie pustej linii
LISTA_NIEPRAWIDLOWOSCI=$(grep -v -e '^$' <<< "$LISTA_NIEPRAWIDLOWOSCI")


echo "==============="
echo "LISTA_NIEPRAWIDLOWOSCI PING:"
echo "$LISTA_NIEPRAWIDLOWOSCI"


[ -z "$1" ] && { echo "Nie znaleziono wadliwego DNS" ; exit 0 ;}


# Wyswietlenie tylko pierwszej kolumny
LISTA_NIEPRAWIDLOWOSCI=$(awk '{ print $1 }' <<< "$LISTA_NIEPRAWIDLOWOSCI")

while read WEB ; do
    echo "=================="
    echo "mtr $WEB"
    # Raport rozciagniety, z adresem IP, testowany x razy | bez hostname
    RAPORT=$(mtr --report-wide --show-ips -c 10 "$WEB"  | sed "s/HOST: `hostname`/            /g")

    # Usuniecie pustych linii i policzenie
    #LICZBA_LINII_RAPORTU=$(grep "\S" <<< "$RAPORT" |  wc -l)

    OSTATNIA_LINIA=$(tail -n 1 <<< "$RAPORT")
    NR_LINII="0"

    ##for LINIA in `seq 1 $LICZBA_LINII_RAPORTU` ; do
    while read LINIA ; do
        #  Wyświetl linie na zielono
        echo -e "${GN}$LINIA${NC}"
        NR_LINII=$[$NR_LINII+1]
       
        # Poniżej 3 linii
        if [ "$NR_LINII" -gt "3" ] ; then
            WEB=$( awk '{ print $2 }' <<< "$LINIA")

            # Policzenie slow jako sposob czy podano IP
            LICZBA_SLOW=$(echo "$LINIA" | wc -w)
            if [ "$LICZBA_SLOW" -eq "10" ] ; then
                # Kolumna LOSS bez procentu i bez liczb dziesietnych
                LOSS=$(awk '{ print $4 }' <<< "$LINIA" | sed -e "s/%//g" -e "s/\.[0-9]//g")
            else
                LOSS=$(awk '{ print $3 }' <<< "$LINIA" | sed -e "s/%//g" -e "s/\.[0-9]//g")
            fi


            if [ "$LOSS" -lt "100" ] ; then
                # Alternatywa:  https://www.whois.com/whois/
                ##echo "Debug: $WEB = $LOSS"
                KONTAKT=$(whois -IHM "$WEB" | grep  "@\|contact")
                # Wyświetl kontakt w kolorze Cyan
                echo -e "${BL}${KONTAKT}${NC}"
            fi
        fi
    done <<< "$RAPORT"
    ##done

    echo "=================="
done <<< "$LISTA_NIEPRAWIDLOWOSCI"

« Ostatnia zmiana: 2021-04-22, 09:44:37 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.