Jabberowi admini, pamiętajcie o rekordach SRV!

Na moim nowym Jabberowym koncie wszystko działa ślicznie. No, prawie
wszystko. Okazało się, że brak jest komunikacji z pojedynczymi serwerami,
a niektóre z innych serwerów lub usług odpowiadają z dużym opóźnieniem.
Większość z tych problemów okazała się mieć związek z rekordami SRV, służącymi
do lokalizacji właściwego serwera Jabbera.

Moja domena nie ma i raczej nie będzie miała rekoru A. Serwer pocztowy
jest wskazywany przez rekord MX, serwer Jabbera przez SRV, strony WWW są
w poddomenach. Rekord A dla domeny nie ma sensu, bo niby na co miałby
wskazywać, jeżeli każda usługa może być obsługiwana przez inną maszynę?
Niestety, niektóre serwery Jabbera wciąż mają problemy z poprawnym obsłużeniem
rekordów SRV. Albo od razu dobijają się do rekordu A, albo szukają
niewłaściwego SRV, np. „_jabber._tcp”, które może było dobre, ale z trzy lata
temu, przed opublikowaniem RFC ze specyfikacją XMPP. W obu przypadkach
wystarczy poprawa konfiguracji serwera (nie sądzę, żeby któraś z implementacji
jeszcze nie miała obsługi SRV).

To tyle o moim rekordzie SRV. To jednak działa także w drugą stronę.
Zauważyłem, że mam straszne opóźnienia przy łączeniu się z konferencjami na
chat.chrome.pl, a także przy wysyłaniu tam wiadomości po dłuższej przerwie.
Okazało się, że serwer po prostu czeka na odpowiedź na zapytanie
o _xmpp-server._tcp.chat.chrome.pl, potem wersję
z „_jabber._tcp”, a na końcu dopiero pobiera rekord A. Jeden drobny wpis w DNS
by starczył, żeby działało to szybciej (myślę, że niedługo to będzie
poprawione). Oczywiście, można byłoby zoptymalizować serwer, żeby od
razu pytał o wszystko co się da, a potem wybierał najlepszą odpowiedź… ale
czy wysyłanie masy niepotrzebnych pakietów na pewno jest rozwiązaniem?

Informacje jak skonfigurować serwer do prawidłowej obsługi rekordów SRV
można znaleźć we wpisie
u smoka i komentarzach do niego
. O tym, jak taki rekord SRV powinien
wyglądać, też informacji w sieci nie brakuje. Ja tylko opiszę najprostszy
przypadek:

Jeśli Twój serwer jabbera, obsługujący domenę domena.org
(JIDy postaci: użytkownik@domena.org, działa na maszynie
serwer.domena.org o adresie 1.2.3.4, to potrzebujesz
następujących wpisów w DNS (pierwszy zapewne już masz):

serwer.domena.org.     IN  A   1.2.3.4
_xmpp-server._tcp.domena.org.            IN  SRV 0 0 5269 serwer.domena.org.
_xmpp-client._tcp.domena.org.            IN  SRV 0 0 5222 serwer.domena.org.

Znaczenia cyferek nie będę tu opisywał, kto będzie chciał, ten znajdzie.
Podobne wpisy ‚_xmpp-server’ powinny być dla każdej domeny obsługiwanej przez
serwer, która ma być dostępna z zewnątrz. Poprawność wpisów należy oczywiście
sprawdzić, np. w ten sposób:

$ host -t SRV _xmpp-server._tcp.jajcus.net
_xmpp-server._tcp.jajcus.net SRV 10 0 5269 tropek.jajcus.net.
$ host -t SRV _xmpp-client._tcp.jajcus.net
_xmpp-client._tcp.jajcus.net SRV 10 0 5222 tropek.jajcus.net.
$ host -t SRV _xmpp-server._tcp.gg.jajcus.net
_xmpp-server._tcp.gg.jajcus.net SRV 10 0 5269 tropek.jajcus.net.

15 uwag do wpisu “Jabberowi admini, pamiętajcie o rekordach SRV!

  1. gandalf alchemyx # host -t SRV _xmpp-client._tcp.jabber.uznam.net.pl
    _xmpp-client._tcp.jabber.uznam.net.pl has SRV record 0 0 5222 gandalf.uznam.net.pl.
    gandalf alchemyx # dm
    gandalf alchemyx # host -t SRV _xmpp-server._tcp.jabber.uznam.net.pl
    _xmpp-server._tcp.jabber.uznam.net.pl has SRV record 0 0 5269 gandalf.uznam.net.pl.

    Niby ok, ale już nie mogę rozmawiać z Tobą, ale z innymi mogę (chrome.pl chociażby)

    Polubienie

  2. Jajcuś: nie do końca rozumiem koncepcję SRV, więc prosiłbym o pomoc. Mam następującą sytuację. Mam jeden rutowalny adres IP, ale ruter i serwer. Domena jest widoczna jako tonid.net z zewnątrz, ruter ma powiedzmy nazwę 1.tonid.net, a serwer 2.tonid.net. Połączenia z Jabberem na ruter są DNAT-owane na serwer. DNS również (też stoi na serwerze w DMZ-cie). Jaki więc wpis SRV byłby tu odpowiedni? na tonid.net? na 1.tonid.net? na 2.tonid.net? Ustawiłem przez chwilę na 2.tonid.net i straciłem na jakiś czas połączenia z innymi serwerami, już nie mówiąc o tym, że w logach szalało (resolver died itp. — i tak w kółko bo używam daemontools…).

    Polubienie

  3. tonid: jeżeli dobrze rozumiem, to SRV powinno u Ciebie wskazywać na "1.tonid.net". Najlepiej popatrz na to tak: jeśli chodziłoby o serwer pocztowy, a nie o Jabbera, to jak byś ustawił rekord MX? SRV to taki uniwersalny odpowiednik MX.

    Polubienie

  4. Rekord A dla domeny powinien byc przede wszystkim dla strony WWW — wyobrazasz sobie aby wpisywac zawsze "www.wp.pl" "www.google.pl", zamiast krotszych wersji bez "www."? 4 znaki oszczednosci poszlyby w las. To co sie potem dzieje, np. przekierowanie usera na np. "wuwuwu.wp.pl" (bo dlaczego "www." ma byc kanoniczne?) to juz kwestia drugorzedna. Wazne aby uzytkownikom nie utrudniac zycia. Nie cierpie jesli ktos nie konfiguruje rekordu A w domenie, ktora serwuje strone WWW.

    A tak z innej beczki — ta strona wymaga cookies do ogladania, dobrze byloby to naprawic (u mnie pojawia sie blad z limitem przekierowan, jesli wylacze cookies).

    Polubienie

  5. Wanted: Ale ‚jajcus.net’ to nie strona WWW, ale moja domena, gdzie wrzucam najróżniejsze rzeczy (np. blog pod blog.jajcus.net, pocztę i Jabbera na odpowiednich serwera). Jakby działały rekordy SRV dla WWW (niestety nie działają — niedopatrzenie przy początkach internetu), to bym taki dodał — to by było przynajmniej logiczne. Przez ten głupi brak w DNS jest wiele problemów:

    1. Konieczność wpisywania adresu IP w wielu miejscach — w każdej domenie, bo ani CNAME (CNAME nie może istnieć razem z SOA, czy NS), ani żaden inny mechanizm wskazania właściwego serwera nie zadziała. Zmiana adresu IP serwera wiąże się z uaktualnieniem wpisów dla wielu domen, często administrowanych przez różne osoby. „blog.jajcus.net” może być CNAME na „jogger.pl” i nie muszę się zmianami IP joggera przejmować. Z „jajcus.net” już by to nie przeszło.

    2. Konieczność redirecty portów (lub minimalny serwer WWW robiący redirecty HTTP), jeśli kilka usług dla danej domeny korzysta z rekordów A, a jest obsługiwanych przez różne serwery. Tak jest, na przykład, z wieloma serwerami Jabbera, które mają swoje strony WWW i jednocześnie, dla kompatybilności z przestarzałymi klientami, są wskazywane przez rekord A.

    3. Jeśli nie ma być przekierowań, to trzeba określić "usługę dominującą". Ty sugerujesz WWW. Ale dlaczego akurat WWW? Kiedyś przecież może to być coś innego… Na szczęście wszelkie nowe usługi już z rekordów SRV korzystają.

    Ja mam umysł ścisły, cenię konsekwencję i logikę. Dlatego unikam przypisywania rekordów A domenom. No i nie muszę się przejmować wymaganiami rynku, czy prawami marketingu 🙂

    Jeszcze jedno. To „www” powstało kiedyś jako namiastka rekordu SRV. Nawet przeglądarki „wiedziały”, że jak nie ma rekordu A dla danej nazwy, to należy „www.” dopisać. A teraz takie podejście się krytykuje mimo, że nie jest dostępne nic lepszego w zamian.

    Co do cookies — to już ograniczenie Joggera. I właściwie nie wiem, jak mogłoby być elegancko rozwiązane (pewne nieeleganckie pomysły mam).

    Polubienie

Dodaj odpowiedź do D- Anuluj pisanie odpowiedzi