Files
netology-devops/src/homework/03-sysadmin/3.8

Выполнение домашнего задания по теме "3.8. Компьютерные сети, лекция 3".

Q/A

Задача 1

Подключитесь к публичному маршрутизатору в интернет. Найдите маршрут к вашему публичному IP

telnet route-views.routeviews.org
Trying 128.223.51.103...
Connected to route-views.routeviews.org.

<...>

User Access Verification

Username: rviews

route-views>show ip route 46.181.144.146
Routing entry for 46.180.0.0/15
  Known via "bgp 6447", distance 20, metric 0
  Tag 6939, type external
  Last update from 64.71.137.241 7w0d ago
  Routing Descriptor Blocks:
  * 64.71.137.241, from 64.71.137.241, 7w0d ago
      Route metric is 0, traffic share count is 1
      AS Hops 3
      Route tag 6939
      MPLS label: none

route-views>show bgp 46.181.144.146   
BGP routing table entry for 46.180.0.0/15, version 150820343
Paths: (23 available, best #22, table default)
  Not advertised to any peer
  Refresh Epoch 1
  3333 31133 39927, (aggregated by 65423 192.168.21.211)
    193.0.0.56 from 193.0.0.56 (193.0.0.56)
      Origin IGP, localpref 100, valid, external, atomic-aggregate
      path 7FE1040964D8 RPKI State not found
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
  8283 1299 39927, (aggregated by 65423 192.168.21.136)
    94.142.247.3 from 94.142.247.3 (94.142.247.3)
      Origin IGP, metric 0, localpref 100, valid, external, atomic-aggregate
      Community: 1299:30000 8283:1 8283:101
      unknown transitive attribute: flag 0xE0 type 0x20 length 0x18
        value 0000 205B 0000 0000 0000 0001 0000 205B
              0000 0005 0000 0001 
      path 7FE0A25887D8 RPKI State not found
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
  4901 6079 31133 39927, (aggregated by 65423 192.168.21.211)
    162.250.137.254 from 162.250.137.254 (162.250.137.254)
      Origin IGP, localpref 100, valid, external, atomic-aggregate
      Community: 65000:10100 65000:10300 65000:10400
      path 7FE154880220 RPKI State not found
      rx pathid: 0, tx pathid: 0
<...>

Задача 2

Создайте dummy0 интерфейс в Ubuntu. Добавьте несколько статических маршрутов. Проверьте таблицу маршрутизации.

Создание dummy-интерфейса:

echo "dummy" | sudo tee -a /etc/modules
sudo touch /etc/modprobe.d/dummy.conf
echo "options dummy numdummies=1" | sudo tee /etc/modprobe.d/dummy.conf
sudo ip link add dummy0 type dummy

Добавление маршрутов и вывод таблицы маршрутизации:

sudo ip route add 10.2.2.2/32 dev eth0
sudo ip route add 10.2.2.3/32 via 10.0.2.16
ip route
default via 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 100 
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 
10.0.2.2 dev eth0 proto dhcp scope link src 10.0.2.15 metric 100 
10.2.2.2 dev eth0 scope link 
10.2.2.3 via 10.0.2.16 dev eth0

Задача 3

Проверьте открытые TCP порты в Ubuntu, какие протоколы и приложения используют эти порты? Приведите несколько примеров.

Для вывода открытых TCP-портов используем утилиту ss со следующими флагами:

  • -t вывод только TCP-портов
  • -l вывод портов в состоянии LISTEN, то есть открытые для прослушивания
  • -n использовать числовое представление портов (например, :ssh -> :22)
ss -tln
State                        Recv-Q                       Send-Q                                             Local Address:Port                                               Peer Address:Port                       Process                       
LISTEN                       0                            4096                                               127.0.0.53%lo:53                                                      0.0.0.0:*                                                        
LISTEN                       0                            128                                                      0.0.0.0:22                                                      0.0.0.0:*                                                        
LISTEN                       0                            128                                                         [::]:22                                                         [::]:*                                                                                

В данном случае открыты только порты для соединения по ssh (порты :22) и для systemd-resolved (порт :53).

Задача 4

Проверьте используемые UDP сокеты в Ubuntu, какие протоколы и приложения используют эти порты?

По аналогии с предыдущим заданием используем утилиту ss, заменив флаг -t на -u

ss -ulpn
State                        Recv-Q                       Send-Q                                              Local Address:Port                                              Peer Address:Port                       Process                       
UNCONN                       0                            0                                                   127.0.0.53%lo:53                                                     0.0.0.0:*                                                        
UNCONN                       0                            0                                                  10.0.2.15%eth0:68                                                     0.0.0.0:*

Порт :53 предназначается для использования systemd-resolved, а порт 68 используется для получения информации о динамической IP-адресации от DHCP-сервера.

Задача 5

Используя diagrams.net, создайте L3 диаграмму вашей домашней сети или любой другой сети, с которой вы работали.

В качестве сети взята стандартная домашняя сеть с wi-fi-роутером.

Файл network.xml для открытия в diagrams.net.

network.png

Задача 6

Установите Nginx, настройте в режиме балансировщика TCP или UDP.

Установка nginx:

sudo apt install nginx

sudo service nginx status
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-03-17 03:14:31 UTC; 24s ago
       Docs: man:nginx(8)
   Main PID: 1830 (nginx)
      Tasks: 3 (limit: 1107)
     Memory: 5.0M
     CGroup: /system.slice/nginx.service
             ├─1830 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─1831 nginx: worker process
             └─1832 nginx: worker process

Далее, определим, что есть два ip-адреса, на которые необходимо сделать проксирование и балансировку трафика:

  • 10.2.2.2
  • 10.2.2.3

Оба ip-адреса слушают следующие порты: :25 - upd-трафик, :80 - tcp-трафик.

Настроим nginx на прослушивание порта :80 для обоих типов трафика с дальнейшей балансировкой и проксированием.

Добавим новый блок конфигурации в файл /etc/nginx/nginx.conf:

stream {
    upstream tcp_backend {
        server 10.2.2.2:80;
        server 10.2.2.3:80;
    }

    upstream upd_backend {
        server 10.2.2.2:25;
        server 10.2.2.3:25;
    }

    server {
        listen 80;
        proxy_pass tcp_backend;
    }

    server {
        listen 80 udp;
        proxy_pass upd_backend;
    }
}

Дополнительно, нужно убрать конфигурацию приветственной страницы, которая работает по умолчанию и слушает порт 80:

sudo rm -f /etc/nginx/sites-enabled/default

Проверим, что конфигурация в порядке:

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Затем нужно применить конфигурацию nginx

sudo nginx -s reload
sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-03-21 03:37:24 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 1364 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 1367 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1376 (nginx)
      Tasks: 3 (limit: 1107)
     Memory: 3.3M
     CGroup: /system.slice/nginx.service
             ├─1376 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─1377 nginx: worker process
             └─1378 nginx: worker process

Проверим, что nginx принимает соединение на порт 80

curl -v --max-time 5 http://localhost:80
*   Trying 127.0.0.1:80...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Operation timed out after 5001 milliseconds with 0 bytes received
* Closing connection 0
curl: (28) Operation timed out after 5001 milliseconds with 0 bytes received

В данном случае добавили --max-time 5, чтобы быстрее получить ошибку, так как nginx пытается проксировать запрос на несуществующий адрес.