IP over Ethernet #2.1 Таблица маршрутизации для утюга и пылесоса
Итак, перейдем в практическую плоскость, в этой части попробуем разобраться с тем, как же все-таки происходит обмен данными в нашей маленькой IP сети.
Если что-то будет непонятно попробуйте прочитать снова предыдущий пост, здесь теоретической части будет минимум :).
Для построения модели сети я воспользуюсь эмулятором GNS3 2.0.3, создав проект соответствующий приведенной в прошлой статье топологии:
Для работы нам потребуется сниффер, в роли которого в стандартной поставке GNS3 используется WireShark.
В маршрутизатор загружена конфигурация, эмулирующая домашний роутер:
На интерфейсе LAN – 192.168.0.1/25, dhcp server, на интерфейсе WAN – dhcp client и nat. Все, что может дополнительно пересылать пакеты в сети (cdp, keepalive etc.) выключено. Включен dns server. Конфиг можно посмотреть в конце поста.
В пылесосе включен dhcp client.
В начальном состоянии сети пылесос и маршрутизатор выключены.
Включим пылесос. Итак сначала пылесос попытается автоматически подключиться к сети и получить настройки для сетевого подключения.
1 0.000000 :: ff02::2 ICMPv6 62 Router Solicitation
2 0.050110 0.0.0.0 255.255.255.255 DHCP 406 DHCP Discover - Transaction ID 0x9f2d780f
3 1.050229 0.0.0.0 255.255.255.255 DHCP 406 DHCP Discover - Transaction ID 0x9f2d780f
4 4.050303 0.0.0.0 255.255.255.255 DHCP 406 DHCP Discover - Transaction ID 0x9f2d780f
Видно 4 кадра, 1-й — попытка автонастройки IPv6, остальные — запросы DHCP.
Разберем подробнее 4-й фрейм:
Frame 4: 406 bytes on wire (3248 bits), 406 bytes captured (3248 bits) on interface 0
Ethernet II, Src: Private_66:68:00 (00:50:79:66:68:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
User Datagram Protocol, Src Port: 68, Dst Port: 67
Bootstrap Protocol (Discover)
В 1й строке общие параметры кадра, во 2-й параметры заголовка ethernet (источник, src -
00:50:79:66:68:00; получатель, dst – ff:ff:ff:ff:ff:ff), в 3-й строке параметры заголовка IP, в 4-й транспортного протокола (UDP), в 5-й параметры протокола прикладного уровня и полезная нагрузка (payload). Нажав на каждую из строк можно посмотреть более подробную информацию о кадре. В нижней части окна виден HEX- и ASCII-дампы кадра, понятно, что кадр это просто последовательность байт, в которой слева направо расположены заголовки от нижних уровней TCP/IP к верхним.
Включим маршрутизатор и посмотрим на дамп:
Маршрутизатор после включения отправил в интерфейс несколько gratuitous ARP пакетов (5-9), о них позже, а вот после этого 10-м снова видим уже знакомый нам DHCP discover, а за ним еще 3 пакета DHCP. Про DHCP тоже позже поговорим, пока что они нужны только для автонастройки интерфейса пылесоса. Я специально развернул подробную информацию в нижней строке, чтобы можно было сравнить содержимое кадров discover и offer.
Теперь наша сеть полностью функционирует и можно пробовать что-то по ней передавать.
Итак. Очистим дампы и начнем с чистого листа.
Посмотрим настройки интерфейсов маршрутизатора и пылесоса (кто не работает с командной строкой - привыкайте, без нее в сетевой инженерии жизни нет).
TimeCapsule#sh run int e0/0
Building configuration...
Current configuration : 210 bytes
!
interface Ethernet0/0
description LAN
ip address 192.168.0.1 255.255.255.0
no ip redirects
no ip unreachables
no ip proxy-arp
ip nat inside
ip virtual-reassembly in
no cdp enable
no mop enabled
end
iSuck> show
NAME IP/MASK GATEWAY MAC LPORT RHOST:PORT
iSuck 192.168.0.100/24 192.168.0.1 00:50:79:66:68:00 10006 127.0.0.1:10007
fe80::250:79ff:fe66:6800/64
Начнем с ауканья, для него есть прекрасные инструменты в виде целого протокола ICMP, пока самое простое - ping:
iSuck> ping 192.168.0.1
84 bytes from 192.168.0.1 icmp_seq=1 ttl=255 time=0.245 ms
84 bytes from 192.168.0.1 icmp_seq=2 ttl=255 time=0.267 ms
84 bytes from 192.168.0.1 icmp_seq=3 ttl=255 time=0.392 ms
84 bytes from 192.168.0.1 icmp_seq=4 ttl=255 time=0.354 ms
84 bytes from 192.168.0.1 icmp_seq=5 ttl=255 time=0.343 ms
iSuck>
Давайте разберемся, что же сейчас произошло.
Начнем с самого конца. Для того чтобы отправить ping echo request (как и любой другой IP пакет) хосту 192.168.0.1, хосту (sic! ;-D) 192.168.0.100 доcтаточно упаковать этот пакет в эзернет кадр с нужным мак адресом назначения и отправить в соответствующий эзернет интерфейс. Чтобы упаковать этот пакет в эзернет кадр с нужным мак адресом назначения, нужно этот мак адрес откуда-то узнать. Чтобы этот мак адрес откуда-то узнать, нужно спросить хост 192.168.0.1, что у него за мак, зная при этом, что он доступен по эзернет.
Получается почти замкнутый круг, но попробуем из него вырваться. Главная штука, которая нам в этом может помочь - маршрутизация, а точнее таблицы маршрутизации на наших хостах!
Сначала давайте разберемся откуда они вообще взялись, но тут все довольно просто, они построены на основании информации в настройках интерфейсов. То есть в простейшем случае, когда на интерфейсе настраивается IP адрес, определенные маршруты добавляются в таблицу маршрутизации.
iSuck> show ip
NAME : iSuck[1]
IP/MASK : 192.168.0.100/24
GATEWAY : 192.168.0.1
DNS : 192.168.0.1 8.8.8.8
DHCP SERVER : 192.168.0.1
DHCP LEASE : 81750, 86400/43200/75600
DOMAIN NAME : local
MAC : 00:50:79:66:68:00
LPORT : 10006
RHOST:PORT : 127.0.0.1:10007
MTU: : 1500
iSuck>
На VPC узле не очень информативно, зато очень информативно на IOU:
TimeCapsule#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override
Gateway of last resort is 10.255.255.254 to network 0.0.0.0
S* 0.0.0.0/0 [1/0] via 10.255.255.254
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.255.255.0/24 is directly connected, Ethernet1/0
L 10.255.255.143/32 is directly connected, Ethernet1/0
192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.0.0/24 is directly connected, Ethernet0/0
L 192.168.0.1/32 is directly connected, Ethernet0/0
TimeCapsule#
Пока нам интересны 2 строки -
C 192.168.0.0/24 is directly connected, Ethernet0/0
L 192.168.0.1/32 is directly connected, Ethernet0/0
Означают они следующее - адрес 192.168.0.1/32 - локальный, настроен на интерфейсе Et0/0, подсеть 192.168.0.0/24 - подключена непосредственно к интерфейсу Et0/0. На практике при обработке пришедших IP пакетов к тайкапсулю он будет действовать по следующему алгоритму: пакеты к 192.168.0.1 предназначены ему, дальше отправляются в соответствующие локальные подсистемы. Пакеты к остальным адресам из 192.168.0.0/24 отправляются в интерфейс Et0/0 соответствующему эзернет узлу сети. Все существующие реализации TCP/IP стеков, работают приблизительно одинаково. Данные строки добавляются в таблицу маршрутизации после добавления IP адреса и маски к интерфейсу.
C 192.168.0.0/24 is directly connected, E0
L 192.168.0.100/32 is directly connected, E0
Посмотреть это, к сожалению никак нельзя, но это так.
После запуска команды ping 192.168.0.1 и формирования пакета, пылесос ищет в таблице маршрутизации запись соответствующую подсети с самой большой маской, в которую входит адрес назначения. В нашем случае это C 192.168.0.0/24 is directly connected, E0. После определения того факта, что подсеть подключена к нему непосредственно по эзернет, пылесос попробует определить мак адрес назначения для хоста 192.168.0.1. Для этого он широковещательно отправит запрос в эзернет интерфейс E0 с вопросом - у кого из вас, соседи, такой адрес. Такой запрос является частью протокола ARP, необходимого для создания таблицы сопоставления IP-MAC. Это видно в дампе -
1 0.000000 Private_66:68:00 Broadcast ARP 64 Who has 192.168.0.1? Tell 192.168.0.100
Далее в IPoE все основано на доверии и необходимый хост ответит ARP ответом -
2 0.000233 aa:bb:cc:00:01:00 Private_66:68:00 ARP 60 192.168.0.1 is at aa:bb:cc:00:01:00 ,
что приведет к обновлению временных ARP таблиц (или кэшей) на обоих хостах:
iSuck> arp
arp table is empty
iSuck> ping 192.168.0.1
84 bytes from 192.168.0.1 icmp_seq=1 ttl=255 time=0.240 ms
84 bytes from 192.168.0.1 icmp_seq=2 ttl=255 time=0.326 ms
84 bytes from 192.168.0.1 icmp_seq=3 ttl=255 time=0.487 ms
84 bytes from 192.168.0.1 icmp_seq=4 ttl=255 time=0.338 ms
84 bytes from 192.168.0.1 icmp_seq=5 ttl=255 time=0.315 ms
iSuck> arp
aa:bb:cc:00:01:00 192.168.0.1 expires in 113 seconds
iSuck>
TimeCapsule#sh ip arpа также к обновлению таблиц коммутации в свичах.
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.255.255.143 - aabb.cc00.0101 ARPA Ethernet1/0
Internet 10.255.255.254 0 0000.5e00.010b ARPA Ethernet1/0
Internet 192.168.0.1 - aabb.cc00.0100 ARPA Ethernet0/0
Internet 192.168.0.100 1 0050.7966.6800 ARPA Ethernet0/0
TimeCapsule#
Используя таблицу маршрутизации и ARP, хосты становятся способными к обмену IP траффиком в эзернет сети.
Продолжение следует...
TimeCapsule#sh run
Building configuration...
Current configuration : 2763 bytes
!
version 15.4
no service pad
service tcp-keepalives-in
service tcp-keepalives-out
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname TimeCapsule
!
boot-start-marker
boot-end-marker
!
aqm-register-fnf
!
!
no aaa new-model
mmi polling-interval 60
no mmi auto-configure
no mmi pvc
mmi snmp-timeout 180
no ip source-route
no ip gratuitous-arps
no ip icmp rate-limit unreachable
!
!
!
!
!
!
!
ip dhcp excluded-address 192.168.0.1
!
ip dhcp pool LAN
network 192.168.0.0 255.255.255.0
default-router 192.168.0.1
domain-name local
dns-server 192.168.0.1 8.8.8.8
!
ip dhcp pool LAN100
host 192.168.0.100 255.255.255.0
client-identifier 0100.5079.6668.00
client-name iSuck
!
!
!
no ip bootp server
ip name-server 10.255.255.254
ip name-server 8.8.8.8
ip dhcp-server 192.168.0.1
ip cef
no ipv6 cef
!
multilink bundle-name authenticated
!
!
!
!
!
!
!
!
!
redundancy
!
no cdp run
!
ip tcp synwait-time 5
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Ethernet0/0
description LAN
ip address 192.168.0.1 255.255.255.0
no ip redirects
no ip unreachables
no ip proxy-arp
ip nat inside
ip virtual-reassembly in
no cdp enable
no mop enabled
!
interface Ethernet0/1
no ip address
shutdown
!
interface Ethernet0/2
no ip address
shutdown
!
interface Ethernet0/3
no ip address
shutdown
!
interface Ethernet1/0
description WAN
ip address 10.255.255.143 255.255.255.0
no ip redirects
no ip unreachables
no ip proxy-arp
ip nat outside
ip virtual-reassembly in
no cdp enable
no mop enabled
!
interface Ethernet1/1
no ip address
shutdown
!
interface Ethernet1/2
no ip address
shutdown
!
interface Ethernet1/3
no ip address
shutdown
!
interface Serial2/0
no ip address
shutdown
serial restart-delay 0
!
interface Serial2/1
no ip address
shutdown
serial restart-delay 0
!
interface Serial2/2
no ip address
shutdown
serial restart-delay 0
!
interface Serial2/3
no ip address
shutdown
serial restart-delay 0
!
interface Serial3/0
no ip address
shutdown
serial restart-delay 0
!
interface Serial3/1
no ip address
shutdown
serial restart-delay 0
!
interface Serial3/2
no ip address
shutdown
serial restart-delay 0
!
interface Serial3/3
no ip address
shutdown
serial restart-delay 0
!
ip forward-protocol nd
!
!
no ip http server
no ip http secure-server
ip dns server
ip nat inside source list 100 interface Ethernet1/0 overload
ip route 0.0.0.0 0.0.0.0 10.255.255.254
!
!
!
access-list 100 remark NAT
access-list 100 permit ip 192.168.0.0 0.0.0.255 any
!
control-plane
!
!
!
!
!
!
!
!
line con 0
exec-timeout 0 0
privilege level 15
logging synchronous
line aux 0
exec-timeout 0 0
privilege level 15
logging synchronous
line vty 0 4
login
transport input none
!
!
end
TimeCapsule#
Лига Сисадминов
1.8K поста18K подписчиков
Правила сообщества
Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.