109.3 Урок 2
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
109 Основи мереж |
Тема: |
109.3 Основи усунення несправностей мережі |
Урок: |
2 з 2 |
Вступ
Операційні системи на основі Linux мають різноманітні інструменти для вирішення проблем мережі. Цей урок охопить деякі з найпоширеніших. На цьому етапі ви повинні мати уявлення про OSI або інші багаторівневі моделі мереж, адресацію IPv4 або IPv6, а також основи маршрутизації та комутації.
Найкращий спосіб перевірити мережне з’єднання – спробувати використати свій застосунок. Якщо це не спрацьовує, існує багато інструментів, які допоможуть діагностувати проблему.
Тестування з’єднань за допомогою ping
Команди ping
і ping6
можна використовувати для надсилання ехо-запиту ICMP на адресу IPv4 або IPv6 відповідно. Ехо-запит ICMP надсилає невелику кількість даних на адресу призначення. Якщо адреса призначення доступна, відправнику буде надіслано повідомлення ехо-відповіді ICMP із тими самими даними, які було надіслано в запиті:
$ ping -c 3 192.168.50.2 PING 192.168.50.2 (192.168.50.2) 56(84) bytes of data. 64 bytes from 192.168.50.2: icmp_seq=1 ttl=64 time=0.525 ms 64 bytes from 192.168.50.2: icmp_seq=2 ttl=64 time=0.419 ms 64 bytes from 192.168.50.2: icmp_seq=3 ttl=64 time=0.449 ms --- 192.168.50.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 0.419/0.464/0.525/0.047 ms
$ ping6 -c 3 2001:db8::10 PING 2001:db8::10(2001:db8::10) 56 data bytes 64 bytes from 2001:db8::10: icmp_seq=1 ttl=64 time=0.425 ms 64 bytes from 2001:db8::10: icmp_seq=2 ttl=64 time=0.480 ms 64 bytes from 2001:db8::10: icmp_seq=3 ttl=64 time=0.725 ms --- 2001:db8::10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.425/0.543/0.725/0.131 ms
Параметр -c
використовується для визначення кількості пакетів для надсилання. Якщо ви пропустите цей параметр, ping
і ping6
продовжуватимуть надсилати пакети, доки ви їх не зупините, як правило, за допомогою комбінації клавіш Ctrl+C.
Те, що ви не можете пропінгувати хост, не означає, що ви не можете підключитися до нього. У багатьох організаціях є міжмережні екрани або списки контролю доступу на маршрутизаторах, які блокують усе, окрім мінімуму, необхідного для функціонування їхніх систем. В тому числі можуть блокуватись echo-запити та відповіді ICMP. Оскільки ці пакети можуть містити довільні дані, спритний зловмисник може використати їх для викрадання даних.
Трасування маршрутів
Програми traceroute
і traceroute6
можна використовувати, щоб показати маршрут, яким пакет дістається до місця призначення. Вони роблять це, надсилаючи кілька пакетів до місця призначення, збільшуючи поле Time-To-Live (TTL) заголовка IP з кожним наступним пакетом. Кожен маршрутизатор на цьому шляху відповість повідомленням ICMP про перевищення TTL:
$ traceroute 192.168.1.20 traceroute to 192.168.1.20 (192.168.1.20), 30 hops max, 60 byte packets 1 10.0.2.2 (10.0.2.2) 0.396 ms 0.171 ms 0.132 ms 2 192.168.1.20 (192.168.1.20) 2.665 ms 2.573 ms 2.573 ms $ traceroute 192.168.50.2 traceroute to 192.168.50.2 (192.168.50.2), 30 hops max, 60 byte packets 1 192.168.50.2 (192.168.50.2) 0.433 ms 0.273 ms 0.171 ms $ traceroute6 2001:db8::11 traceroute to 2001:db8::11 (2001:db8::11), 30 hops max, 80 byte packets 1 2001:db8::11 (2001:db8::11) 0.716 ms 0.550 ms 0.641 ms $ traceroute 2001:db8::11 traceroute to 2001:db8::11 (2001:db8::11), 30 hops max, 80 byte packets 1 2001:db8::10 (2001:db8::11) 0.617 ms 0.461 ms 0.387 ms $ traceroute net2.example.net traceroute to net2.example.net (192.168.50.2), 30 hops max, 60 byte packets 1 net2.example.net (192.168.50.2) 0.533 ms 0.529 ms 0.504 ms $ traceroute6 net2.example.net traceroute to net2.example.net (2001:db8::11), 30 hops max, 80 byte packets 1 net2.example.net (2001:db8::11) 0.738 ms 0.607 ms 0.304 ms
За замовчуванням traceroute
надсилає 3 пакети UDP із небажаними даними на порт 33434, збільшуючи їх щоразу, коли надсилає пакет. Кожен рядок виводу команди є інтерфейсом маршрутизатора, через який проходить пакет. Час, показаний у кожному рядку вихідних даних, є часом проходження для кожного пакету. IP-адреса – це адреса відповідного інтерфейсу маршрутизатора. Якщо traceroute
може, він використовує DNS-ім’я інтерфейсу маршрутизатора. Іноді ви побачите *
замість часу. Коли це відбувається, це означає, що traceroute
ніколи не отримував повідомлення про перевищення TTL для цього пакета. Це часто вказує на те, що остання відповідь є останнім переходом на маршруті.
Якщо у вас є доступ до root
, параметр -I
налаштує traceroute
на використання ехо-запитів ICMP замість UDP-пакунків. Це часто ефективніше, ніж UDP, тому що вузол призначення швидше відповість на ехо-запит ICMP, ніж на пакет UDP:
# traceroute -I learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 60 byte packets 1 047-132-144-001.res.spectrum.com (47.132.144.1) 9.764 ms 9.702 ms 9.693 ms 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 8.389 ms 8.481 ms 8.480 ms 3 dtr01hlrgnc-gbe-4-15.hlrg.nc.charter.com (96.34.64.172) 8.763 ms 8.775 ms 8.770 ms 4 acr01mgtnnc-vln-492.mgtn.nc.charter.com (96.34.67.202) 27.080 ms 27.154 ms 27.151 ms 5 bbr01gnvlsc-bue-3.gnvl.sc.charter.com (96.34.2.112) 31.339 ms 31.398 ms 31.395 ms 6 bbr01aldlmi-tge-0-0-0-13.aldl.mi.charter.com (96.34.0.161) 39.092 ms 38.794 ms 38.821 ms 7 prr01ashbva-bue-3.ashb.va.charter.com (96.34.3.51) 34.208 ms 36.474 ms 36.544 ms 8 bx2-ashburn.bell.ca (206.126.236.203) 53.973 ms 35.975 ms 38.250 ms 9 tcore4-ashburnbk_0-12-0-0.net.bell.ca (64.230.125.190) 66.315 ms 65.319 ms 65.345 ms 10 tcore4-toronto47_2-8-0-3.net.bell.ca (64.230.51.22) 67.427 ms 67.502 ms 67.498 ms 11 agg1-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.114) 61.270 ms 61.299 ms 61.291 ms 12 dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 61.101 ms 61.177 ms 61.168 ms 13 207.35.12.142 (207.35.12.142) 70.009 ms 70.069 ms 59.893 ms 14 unassigned-117.001.centrilogic.com (66.135.117.1) 61.778 ms 61.950 ms 63.041 ms 15 unassigned-116.122.akn.ca (66.135.116.122) 62.702 ms 62.759 ms 62.755 ms 16 208.94.166.201 (208.94.166.201) 62.936 ms 62.932 ms 62.921 ms
Деякі організації блокують echo-запити та відповіді ICMP. Щоб обійти це, ви можете використовувати TCP. Використовуючи відомий відкритий порт TCP, ви можете гарантувати відповідь хоста призначення. Щоб використовувати TCP, використовуйте опцію -T
разом із -p
, щоб зазначити порт. Як і у випадку з echo-запитами ICMP, для цього ви повинні мати доступ як root
:
# traceroute -m 60 -T -p 80 learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 60 hops max, 60 byte packets 1 * * * 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 12.178 ms 12.229 ms 12.175 ms 3 dtr01hlrgnc-gbe-4-15.hlrg.nc.charter.com (96.34.64.172) 12.134 ms 12.093 ms 12.062 ms 4 acr01mgtnnc-vln-492.mgtn.nc.charter.com (96.34.67.202) 31.146 ms 31.192 ms 31.828 ms 5 bbr01gnvlsc-bue-3.gnvl.sc.charter.com (96.34.2.112) 39.057 ms 46.706 ms 39.745 ms 6 bbr01aldlmi-tge-0-0-0-13.aldl.mi.charter.com (96.34.0.161) 50.590 ms 58.852 ms 58.841 ms 7 prr01ashbva-bue-3.ashb.va.charter.com (96.34.3.51) 34.556 ms 37.892 ms 38.274 ms 8 bx2-ashburn.bell.ca (206.126.236.203) 38.249 ms 36.991 ms 36.270 ms 9 tcore4-ashburnbk_0-12-0-0.net.bell.ca (64.230.125.190) 66.779 ms 63.218 ms tcore3-ashburnbk_100ge0-12-0-0.net.bell.ca (64.230.125.188) 60.441 ms 10 tcore4-toronto47_2-8-0-3.net.bell.ca (64.230.51.22) 63.932 ms 63.733 ms 68.847 ms 11 agg2-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.118) 60.144 ms 60.443 ms agg1-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.114) 60.851 ms 12 dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 67.246 ms dis4-clarkson16_7-0.net.bell.ca (64.230.131.102) 68.404 ms dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 67.403 ms 13 207.35.12.142 (207.35.12.142) 66.138 ms 60.608 ms 64.656 ms 14 unassigned-117.001.centrilogic.com (66.135.117.1) 70.690 ms 62.190 ms 61.787 ms 15 unassigned-116.122.akn.ca (66.135.116.122) 62.692 ms 69.470 ms 68.815 ms 16 208.94.166.201 (208.94.166.201) 61.433 ms 65.421 ms 65.247 ms 17 208.94.166.201 (208.94.166.201) 64.023 ms 62.181 ms 61.899 ms
Як і ping
, traceroute
має свої обмеження. Міжмережні екрани та маршрутизатори можуть блокувати пакети, надіслані з або повернуті до traceroute
. Якщо у вас є root
доступ, існують параметри, які можуть допомогти вам отримати точні результати.
Пошук MTU за допомогою tracepath
Команда tracepath
схожа на traceroute
. Різниця полягає в тому, що він відстежує розміри максимальної одиниці передачі (MTU) уздовж шляху. MTU – це налаштований параметр мережного інтерфейсу або апаратне обмеження найбільшого блоку даних протоколу, який він може передавати або отримувати. Програма tracepath
працює так само, як traceroute
, оскільки вона збільшує TTL з кожним пакетом. Вона відрізняється надсиланням дуже великої датаграми UDP. Це майже неминуче, щоб датаграма була більшою, ніж MTU для пристрою із найменшим MTU на маршруті. Коли пакет досягає цього пристрою, пристрій, як правило, відповідає пакетом «Адресат недосяжний». Такий ICMP-пакет має поле для MTU з’єднання, в якому пристрій зазначає максимальний розмір пакету, який зміг би переслати. Потім tracepath
надсилає всі наступні пакети такого розміру:
$ tracepath 192.168.1.20 1?: [LOCALHOST] pmtu 1500 1: 10.0.2.2 0.321ms 1: 10.0.2.2 0.110ms 2: 192.168.1.20 2.714ms reached Resume: pmtu 1500 hops 2 back 64
На відміну від traceroute
, ви повинні явно використовувати tracepath6
для IPv6:
$ tracepath 2001:db8::11 tracepath: 2001:db8::11: Address family for hostname not supported $ tracepath6 2001:db8::11 1?: [LOCALHOST] 0.027ms pmtu 1500 1: net2.example.net 0.917ms reached 1: net2.example.net 0.527ms reached Resume: pmtu 1500 hops 1 back 1
Результат подібний до traceroute
. Перевагою tracepath
є те, що в останньому рядку він виводить найменший MTU для всього шляху. Це може бути корисним для усунення несправностей підключень, які не можуть обробити фрагменти.
Як і в попередніх інструментах усунення несправностей, обладнання може заблокувати ваші пакети.
Створення довільних зв’язків
Програма nc
, відома як netcat, може надсилати або отримувати довільні дані через мережне підключення TCP або UDP. Наступні приклади повинні прояснити її функціональність.
Ось приклад налаштування слухача на порт 1234
:
$ nc -l 1234 LPI Example
Результати LPI Example
з’являються після наведеного нижче прикладу, де налаштовується відправник netcat для надсилання пакетів на net2.example.net
через порт 1234
. Параметр -l
використовується, щоб вказати, що ви бажаєте, щоб nc
отримував дані, а не надсилав їх:
$ nc net2.example.net 1234 LPI Example
Натисніть Ctrl+C на будь-якій системі, щоб припинити з’єднання.
Netcat працює як з IPv4, так і з IPv6 адресами. Він працює як з TCP, так і з UDP. Його навіть можна використовувати для налаштування грубої віддаленої оболонки.
Warning
|
Зауважте, що не кожен інсталяційний пакунок |
$ hostname net2 $ nc -u -e /bin/bash -l 1234
Параметр -u
призначений для UDP. -e
вказує netcat надсилати все, що він отримує, на стандартне введення виконуваного файлу, яке слідує за ним. У цьому прикладі /bin/bash
.
$ hostname net1 $ nc -u net2.example.net 1234 hostname net2 pwd /home/emma
Зверніть увагу, як вихідні дані команди hostname
збігаються з результатом хоста, що прослуховується, і каталогом, виведеним командою pwd.
Перегляд поточних підключень і слухачів
Програми netstat
і ss
можна використовувати для перегляду стану ваших поточних слухачів і з’єднань. Як і ifconfig
, netstat
є застарілим інструментом. Як netstat
, так і ss
мають подібні результати та параметри. Ось деякі параметри, доступні для обох програм:
-a
-
Показує всі сокети.
-l
-
Показує слухаючі сокети.
-p
-
Показує процес, пов’язаний із з’єднанням.
-n
-
Запобігає пошуку імен як для портів, так і для адрес.
-t
-
Показує TCP-з’єднання.
-u
-
Показує UDP-з’єднання.
У наведених нижче прикладах показано результат набору параметрів, який зазвичай використовується для обох програм:
# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 892/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1141/master tcp6 0 0 :::22 :::* LISTEN 892/sshd tcp6 0 0 ::1:25 :::* LISTEN 1141/master udp 0 0 0.0.0.0:68 0.0.0.0:* 692/dhclient # ss -tulnp # ss -tulnp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 :68 *: users:(("dhclient",pid=693,fd=6)) tcp LISTEN 0 128 :22 *: users:(("sshd",pid=892,fd=3)) tcp LISTEN 0 100 127.0.0.1:25 : users:(("master",pid=1099,fd=13)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=892,fd=4)) tcp LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1099,fd=14))
Стовпець Recv-Q
містить кількість пакетів, отриманих сокетом, але не переданих його програмі. Стовпець Send-Q
містить кількість пакетів, надісланих сокетом, які не були підтверджені одержувачем. Решта стовпців зрозумілі самі по собі.
Вправи до посібника
-
Які команди ви б використали, щоб надіслати ICMP-запити на
learning.lpi.org
? -
Як ви можете визначити маршрут до
8.8.8.8
? -
Яка команда покаже вам, якщо якісь процеси прослуховують TCP-порт 80?
-
Як можна дізнатися, який процес прослуховує порт?
-
Як можна визначити максимальний MTU мережевого шляху?
Дослідницькі вправи
-
Як ви можете використовувати netcat для надсилання HTTP-запиту на веб-сервер?
-
З яких причин може не вдатися перевірка доступності хоста за допомогою ping?
-
Назвіть інструмент, який можна використовувати, щоб побачити мережеві пакети, що досягають або залишають хост Linux?
-
Як ви можете змусити
traceroute
використовувати інший інтерфейс? -
Чи можливо для
traceroute
повідомляти MTU?
Підсумки
Мережа зазвичай налаштовується за допомогою сценаріїв запуску системи або помічника, такого як NetworkManager. Більшість дистрибутивів мають інструменти, які редагують файли конфігурації сценарію запуску. Зверніться до документації свого дистрибутива, щоб дізнатися більше.
Можливість ручного налаштування мережі дозволяє ефективніше вирішувати проблеми. Це корисно в мінімальних середовищах, які використовуються для таких речей, як відновлення з резервних копій або перехід на нове обладнання.
Утиліти, розглянуті в цьому розділі, мають більше функціональних можливостей, ніж розглянуті в цьому уроці. Було б доцільно переглянути сторінку довідки кожної з них, щоб ознайомитися з доступними параметрами. Команди ss
та ip
— це сучасний спосіб виконання завдань, а решта, які описано, хоча й досі широко використовуються, вважаються застарілими інструментами.
Найкращий спосіб ознайомитися з розглянутими інструментами – це практика. Використовуючи комп’ютер із невеликим об’ємом оперативної пам’яті, можна налаштувати віртуальну мережну лабораторію за допомогою віртуальних машин, з якими можна практикуватися. Трьох віртуальних машин достатньо, щоб зручно працювати з перерахованими інструментами.
Команди, розглянуті в цьому уроці:
ping
таping6
-
Використовуються для передачі ICMP-пакетів на віддалений хост для перевірки доступності мережного з’єднання.
traceroute
таtraceroute6
-
Використовуються для відстеження шляху через мережу для визначення підключення до мережі.
tracepath
таtracepath6
-
Використовуються для відстеження шляху через мережу, а також визначення розмірів MTU уздовж маршруту.
nc
-
Використовується для встановлення довільних з’єднань у мережі з метою перевірки з’єднання, а також запиту мережі щодо доступних служб і пристроїв.
netstat
-
Застаріла команда, яка використовується для визначення відкритих мережевих підключень системи та статистики.
ss
-
Сучасна команда, яка використовується для визначення відкритих мережевих підключень системи та статистики.
Відповіді до вправ посібника
-
Які команди ви б використали, щоб надіслати ICMP-запити на
learning.lpi.org
?Ви б використали
ping
абоping6
:$ ping learning.lpi.org
або
$ ping6 learning.lpi.org
-
Як ви можете визначити маршрут до
8.8.8.8
?За допомогою команд
tracepath
абоtraceroute
.$ tracepath 8.8.8.8
або
$ traceroute 8.8.8.8
-
Яка команда покаже вам, якщо якісь процеси прослуховують TCP-порт 80?
За допомогою команди
ss
:$ ss -ln | grep ":80"
За допомогою команди
netstat
:$ netstat -ln | grep ":80"
Хоча це не є обов’язковою умовою для іспиту, ви також можете використовувати lsof:
# lsof -Pi:80
-
Як можна дізнатися, який процес прослуховує порт?
Знову ж таки, є кілька способів зробити це. Ви можете використовувати
lsof
так само, як у попередній відповіді, замінюючи номер порту. Ви також можете використовуватиnetstat
абоss
з опцією-p
. Пам’ятайте, щоnetstat
вважається застарілим інструментом.# netstat -lnp | grep ":22"
Ті самі параметри, які працюють з
netstat
, також працюють зss
:# ss -lnp | grep ":22"
-
Як можна визначити максимальний MTU мережевого шляху?
За допомогою команди
tracepath
:$ tracepath somehost.example.com
Відповіді до дослідницьких вправ
-
Як ви можете використовувати netcat для надсилання HTTP-запиту на веб-сервер?
Ввівши рядок запиту HTTP, будь-які заголовки та порожній рядок у термінал:
$ nc learning.lpi.org 80 GET /index.html HTTP/1.1 HOST: learning.lpi.org HTTP/1.1 302 Found Location: https://learning.lpi.org:443/index.html Date: Wed, 27 May 2020 22:54:46 GMT Content-Length: 5 Content-Type: text/plain; charset=utf-8 Found
-
З яких причин може не вдатися перевірка доступності хоста за допомогою ping?
Існує кілька можливих причин. Ось деякі з них:
-
Віддалений хост не працює.
-
ACL маршрутизатора блокує ваш ping.
-
Міжмережний екран віддаленого хоста блокує ваш ping.
-
Можливо, ви використовуєте неправильне ім’я або адресу хоста.
-
Ваше розпізнавання імені повертає неправильну адресу.
-
Конфігурація мережі вашого пристрою неправильна.
-
Брандмауер вашого комп’ютера блокує ping.
-
Конфігурація мережі віддаленого хоста неправильна.
-
Інтерфейс(и) вашої машини від’єднано.
-
Інтерфейс(и) віддаленого комп’ютера від’єднано.
-
Компонент мережі, такий як комутатор, кабель або маршрутизатор між вашою машиною і віддаленою, більше не працює.
-
-
Назвіть інструмент, який можна використовувати, щоб побачити мережеві пакети, що досягають або залишають хост Linux?
Можна використовувати як
tcpdump
, так іwireshark
. -
Як ви можете змусити
traceroute
використовувати інший інтерфейс?За допомогою параметра
-i
:$ traceroute -i eth2 learning.lpi.org traceroute -i eth2 learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 60 byte packets ...
-
Чи можливо для
traceroute
повідомляти MTU?Так, з опцією
--mtu
:# traceroute -I --mtu learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 65000 byte packets 1 047-132-144-001.res.spectrum.com (47.132.144.1) 9.974 ms F=1500 10.476 ms 4.743 ms 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 8.697 ms 9.963 ms 10.321 ms ...