Выполнение домашнего задания по теме "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.
Задача 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.210.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 пытается проксировать запрос на несуществующий адрес.
