Internet

Прохождение

Прохождение лабораторной работы «Internet». Если явно не указано иного, все примеры ниже выполнены с использованием системы fable.am-1.org (также доступной по IPv4 как users.am-1.org — используйте порт 5322 для подключения по SSH.)

Поскольку оценка за отчет снижается при повторах и заимствованиях (в том числе «из Internet» — а значит и из данного прохождения), я не привожу здесь подробных комментариев и пояснений, необходимых (в той или иной степени) в отчете. Кроме того, ради простоты, если задание требует повторить некоторое действие (подключиться к серверу, отправить запрос, etc.) многократно, ниже я иногда выполняю его один раз — считая, что повторить несложно по-аналогии.

Прохождение на полноту не претендует. Кроме того, вместо того, чтобы выполнять задания в полном объеме, я пытаюсь выполнить наибольшее их число.

Примеры в некоторых разделах продублированы в формате видеофрагментов. Для создания последних записывался протокол терминального сеанса, который затем редактировался (для удаления несущественных деталей), после чего воспроизводился в окне XTerm и записывался средствами FFmpeg.

Отдельные пояснения и примеры, быть может, подошли бы и тексту заданий самой лабораторной работы. Не исключено, что они будут позже перенесены.

Перед началом…

Для подключения к SSH-серверу fable нужен, очевидно, SSH-клиент. Я воспользуюсь таковым из пакета OpenSSH.

  1. Проверяю наличие моего (закрытого) ключа у агента:

    $ ssh-add -l 
    256 SHA256: jPVr5owiWTpUza9tdCbFjhvdAwH4HOtCS2pKhqDgbAK .ssh/id_ed25519 (ED25519)
    $ 
    
  2. Проверяю наличие (открытого) ключа системы в known_hosts:

    $ grep -F -- fable < ~/.ssh/known_hosts 
    fable.am-1.org,[users.am-1.org]:5322 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPQd9vDwbp7qBC7guXgLdxRInowiEIpjMZesL1bf2dqz
    $ 
    
  3. Подключаюсь:

    $ slogin -- ivan@fable.am-1.org 
    [ivan@fable] ~$ 
    

    Напомню, что список имен пользователей, имеющих доступ к fable, можно найти по следующим URI:

  4. Если бы у меня не было IPv6-связности, я бы мог подключится к fable по IPv4 — указав явно номер порта TCP 5322:

    $ slogin -4 -p 5322 -- ivan@users.am-1.org 
    [ivan@fable] ~$ 
    
  5. Пример подключения в виде видео: fable-ssh.webm.

Маршрутизация в Internet

Наиболее сложная часть первых двух заданий — избежать повторов при выборе хоста для определения маршрутов и времен доставки. Здесь можно использовать два подхода (хотя ни один из них не исключает оных повторов):

  1. взять какой-либо хорошо знакомый ресурс Всемирной паутины и использовать отладочные функции агента для определения HTTP-серверов, к которым агент выполняет запросы при работе с этим ресурсом;
  2. выполнить «случайный» запрос к поисковой машине; например, запрос http://duckduckgo.com/html/?kd=-1&q=outmaneuvering+similes даст нам такие имена хостов, как literarydevices.net, xwing-miniatures.fandom.com, etc.

Итак, прохождение.

  1. (#route.lgt) Построение маршрута (одного из четырех требуемых заданием.) Заполняем форму http://lg.he.net/ следующим образом:

    Commands
    
        ( ) Ping · (•) Traceroute · ( ) BGP Route
    
    Arguments
    
      • IP/Hostname: literarydevices.net___
      • [✓] Raw output (no tables)
      • (•) Prefer IPv6 name resolution
      • ( ) Prefer IPv4 name resolution
    
    Probe Clear
    

    Результат (для одного выбранного маршрутизатора — из двух нужных):

    core3.fmt2.he.net> traceroute ipv6 2606:4700:20::681a:166  source 2001:470:0:23c
    ::1 numeric
    
    Tracing the route to IPv6 node 2606:4700:20::681a:166 from 1 to 30 hops
    
      1    27 ms    8 ms   <1 ms 2001:470:0:eb::2
      2    18 ms    2 ms   38 ms 2001:504:0:1:0:1:3335:1
      3    58 ms    2 ms    1 ms 2606:4700:20::681a:166
    # Entry cached for another 60 seconds.
    

    Делаем Whois-запрос по отношению к адресу единственного в данном маршруте транзитного маршрутизатора — что дает нам информацию о владельце. (Поскольку адреса относятся к сети обмена данными, англ. Internet Exchange, IX, они не принадлежат никакой автономной системе.)

    fable$ whois -- 2001:504:0:1:0:1:3335:1 
    
    NetRange:       2001:504:: - 2001:504:0:FFFF:FFFF:FFFF:FFFF:FFFF
    CIDR:           2001:504::/48
    NetName:        EQUINIX-IX-V6
    
    
    NetRange:       2001:504:0:1:: - 2001:504:0:1:FFFF:FFFF:FFFF:FFFF
    CIDR:           2001:504:0:1::/64
    NetName:        EQUINIX-IX-V6-SJO
    NetHandle:      NET6-2001-504-1-2
    Parent:         EQUINIX-IX-V6 (NET6-2001-504-1)
    NetType:        Reassigned
    OriginAS:
    Organization:   Equinix, Inc. (EQUINIX)
    RegDate:        2006-01-10
    Updated:        2017-07-24
    
    
    OrgName:        Equinix, Inc.
    OrgId:          EQUINIX
    Address:        One Lagoon Drive
    City:           Redwood City
    StateProv:      CA
    PostalCode:     94065
    Country:        US
    RegDate:        2002-06-12
    Updated:        2020-05-07
    
    
  2. (#route.lgp) Для определения времени доставки выбираем в форме ping вместо traceroute:

    Commands
    
        (•) Ping · ( ) Traceroute · ( ) BGP Route
    

    Результат:

    core3.fmt2.he.net> ping ipv6 2606:4700:20::681a:66 numeric count 5
      Sending 5, 16-byte ICMPv6 Echo to 2606:4700:20::681a:66
    timeout 5000 msec, Hop Limit 64
    Reply from 2606:4700:20::681a:66: bytes=16 time=3ms Hop Limit=61
    Reply from 2606:4700:20::681a:66: bytes=16 time=1ms Hop Limit=61
    Reply from 2606:4700:20::681a:66: bytes=16 time=2ms Hop Limit=61
    Reply from 2606:4700:20::681a:66: bytes=16 time=2ms Hop Limit=61
    Reply from 2606:4700:20::681a:66: bytes=16 time=2ms Hop Limit=61
    Success rate is 100 percent (5/5), round-trip min/avg/max=1/2/3 ms.
    # Entry cached for another 60 seconds.
    
  3. (#route.lgh) Определяем IP-адреса системы следующим образом:

    $ ip address show 
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 5a:53:77:43:6d:f3 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet6 2a00:1098:86:49:0:e:7743:6df3/64 scope global 
           valid_lft forever preferred_lft forever
        inet6 fe80::5853:77ff:fe43:6df3/64 scope link 
           valid_lft forever preferred_lft forever
    $ 
    

    Вводим единственный глобально-маршрутизируемый из них (2a00:1098:86:49:0:e:7743:6df3) в форму http://lg.he.net/:

    Commands
    
        ( ) Ping · (•) Traceroute · ( ) BGP Route
    
    Arguments
    
      • IP/Hostname: 2a00:1098:86:49:0:e:7743:6df3___
      • [✓] Raw output (no tables)
      • (•) Prefer IPv6 name resolution
      • ( ) Prefer IPv4 name resolution
    
    Probe Clear
    

    Получаем следующий маршрут (для одного маршрутизатора из четырех нужных — ⅛ оценки.)

    core3.fmt2.he.net> traceroute ipv6 2a00:1098:86:49:0:e:7743:6df3  source 2001:47
    0:0:23c::1 numeric
    
    Tracing the route to IPv6 node 2a00:1098:86:49:0:e:7743:6df3 from 1 to 30 hops
    
      1    41 ms    1 ms   <1 ms 2001:470:0:eb::2
      2    96 ms   88 ms  184 ms 2001:470:0:296::1
      3   156 ms  146 ms  141 ms 2001:470:0:2cf::1
      4   146 ms  290 ms  276 ms 2001:7f8:4::ae8c:1
      5   162 ms  129 ms  162 ms 2a00:1098:2::5d5d:8518
      6   139 ms  293 ms  181 ms 2a00:1098:2::5d5d:85f1
      7   142 ms  158 ms  141 ms 2a00:1098:86:49:0:e:7743:6df3
    # Entry cached for another 59 seconds.
    

    Совершенно аналогично выполняется и измерение времен доставки (ping.)

  4. (#route.mtr) Программа mtr установлена на fable, но, к сожалению, является шлюзом привилегий — другими словами, предполагает такую настройку системы, чтобы выполняться от имени пользователя отличного от того, который непосредственно запускает ее. В качестве меры предосторожности шлюзы привилегий отключены настройками fable, а значит выполнить это задание на этой системе невозможно.

    А именно, корневая ФС подключена с опцией mount nosuid; дерево процессов порождено с опцией prctl PR_SET_NO_NEW_PRIVS.

Система доменных имен DNS

Сложной частью данной работы вновь является выбор из мириад доменных имен Internet нескольких, отличающихся от условных соцсеть.рф и поисковик.рф. Решить ее можно способом выше.

Некоторую сложность представляет и подсчет результатов. Так, например, в задании может требоваться получить из системы DNS три различных записи; первый запрос может вернуть две; второй — восемь, причем одна из них совпадает с одной из возвращенных предыдущим запросом. Чтобы претендовать на выполнение работы в трехкратном объеме (т. е. с оценкой на 75% выше номинала) нужно отдельно указать в отчете количество «оцениваемых» записей.

Начнем.

  1. (#dns.dig) Единственная существенная оговорка в данном задании — один запуск команды dig позволяет выполнить достаточно произвольное количество запросов — в том числе, как того требует задание, в отношении различных доменов второго уровня и с использованием разных типов записей.

    Выполним, например, одной командой нужные четыре запроса в отношении трех доменных имен принадлежащих двум различным доменам второго уровня (debian.org, example.com.) используя три типа ресурсных записей (MX, AAAA, SOA.)

    $ dig +noall +answer \
          lists.debian.org. MX \
          www.debian.org. AAAA \
          example.com. SOA \
          example.com. AAAA 
    lists.debian.org.   2365  IN  MX    0 bendel.debian.org.
    www.debian.org.      299  IN  AAAA    2001:67c:2564:a119::77
    example.com.        1139  IN  SOA   ns.icann.org. noc.dns.icann.org. 2019121384 7200 3600 1209600 3600
    example.com.        21001 IN  AAAA  2606:2800:220:1:248:1893:25c8:1946
    $ 
    

    В зависимости от используемого рекурсивного DNS-сервера запрос может также вернуть некоторое количество записей как additional и authority. Чтобы включить эти части DNS-ответа в вывод команды dig выше нужно включить в командную строку аргументы +additional +authority.

  2. (#dns.mx) Запись типа MX хранит адреса серверов, принимающих почту для некоторого почтового домена — имени, указываемого в адресах электронной почты после знака @. Например для почтовых ящиков Google Mail используются почтовые адреса вида нечто@gmail.com (или, в виде унифицированного идентификатора ресурса, URI: mailto:нечто@gmail.com.) Посмотрим, какие сервера принимают почту на эти адреса.

    $ dig +noall +answer  gmail.com MX 
    gmail.com.  3186  IN  MX  30 alt3.gmail-smtp-in.l.google.com.
    gmail.com.  3186  IN  MX  40 alt4.gmail-smtp-in.l.google.com.
    gmail.com.  3186  IN  MX  5 gmail-smtp-in.l.google.com.
    gmail.com.  3186  IN  MX  20 alt2.gmail-smtp-in.l.google.com.
    gmail.com.  3186  IN  MX  10 alt1.gmail-smtp-in.l.google.com.
    $ 
    

    Поскольку запрос вернул пять записей — при требуемых заданием двух, можно претендовать на выполнение задания в 2.5-кратном объеме.

  3. (#dns.srv) Адреса протокола обмена мгновенными сообщениями XMPP тоже имеют вид нечто@домен (xmpp:нечто@домен.) В этом случае, однако, используется два комплекта записей: один указывает, какие сервера принимают сообщения для учетных записей в некотором домене; другой — какие сервера обслуживают пользователей, владеющих этими записями.

    Выясним, например, к каким серверам должен подключиться владелец учетной записи домена jabber.ru:

    $ dig +noall +answer  _xmpp-client._tcp.jabber.ru SRV 
    _xmpp-client._tcp.jabber.ru. 21599 IN   SRV 0 0 5222 jabber.ru.
    _xmpp-client._tcp.jabber.ru. 21599 IN   SRV 10 0 443 allports.jabber.ru.
    $ 
    
  4. Примеры запросов выше в виде видео: dns-in.webm.