Сетевой уровень: адресация и маршрутизация (IPv6)

Задачи

Интернет: объединение сред передачи данных в глобальную сеть

  1. Глобальная идентификация (адресация)
    1. Структура адреса
    2. Механизм раздачи идентификаторов

  2. Алгоритм доставки (маршрутизация)
    1. Известный маршрут и маршрут по умолчанию внутри крупной сети
    2. Связность крупных сетей (карта достижимости / стоимость)

Динамическая (в общем случае) природа обеих задач.

IPv6

rfc8200

Презентация от Jen "Furry" Linkova

Структура адреса

IPv6_address, rfc4291.

LLA: внутриинтерфейсные адреса

На каждом интерфейсе, на котором включен IP, автоматически генерируется link-local адрес:

Можно, конечно, назначить и вручную. Если назначать внутри fe80::/10, но за пределами fe80::/64, то точно не будет пересечения с автогенератами.

Нужны для обнаружения соседей в локальной среде, для общения OSPF-маршрутизаторов, как next hop маршрутов и пр.

Могут использоваться и для прикладного трафика между соседями, если это вдруг удобно: ssh 'root@fe80:7e::3%eth1'

Multicast: адреса групп узлов

| 1111 1111 xxxx xxxx rrrr rrrr .... ....   .............   gggg gggg gggg gggg gggg gggg gggg gggg |
| ^^^^ ^^^^      ^^^^ ^         ^                ^^         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| multicast     scope reserved  prefixlen      64-bit                      group ID                 |
|           ^^^^                            network prefix                                          |
|           flags               <--- (if P-flag is 1) ---->                                         |
|                                                                                                   |
| [8 bits]  [4+4bits] [8 bits]  [8 bits]      [64 bits]                    [32 bits]                |

У multicast-групп тоже есть область действия (scope):

В жизни бывают только 2 и 5.

Примеры:

Последние два примера на схеме:

| <-------------- 32 bits -------------->   < --- 64 bits --- >  <-------------- 32 bits --------------> |
| 1111 1111 xxxx xxxx rrrr rrrr prefixlen   ....     ....  ...p  gggg gggg gggg gggg gggg gggg gggg gggg |
| ------------------------------------------------------------------------------------------------------ |
|   f    f    0    2   ..   ..                              0     0    0    0    0    0    1    0    1   |
| 1111 1111 0000 0010 0000 0000 0000 0000   ....     ....  0000  0000 0000 0000 0000 0000 0001 0000 0001 |
|   f    f    0    2   ..   ..                              1     f    f    3    a    d    8    7    6   |
| 1111 1111 0000 0010 0000 0000 0000 0000   ....     ....  0001  1111 1111 0011 1010 1101 1000 0111 0110 |

Доставка пакета

IPv6

Специальные адреса и сети

rfc5156, актуальная таблица от IANA

Примечательны те, у которых в последнем столбце True.

IPv4-mapped: этот диапазон из 2**32 адресов кодирует IPv4-адреса при работе с сокетами

Кстати, bind() на нуль-адресе :: позволит получать соединения (датаграммы) от клиентов и по IPv6, и по IPv4 на одном сокете, а не двух;

ICMP

(rfc4443)

ip neigh: посмотреть таблицу соответствия MAC → IP

Neighbour Discovery на примере

Два соседа в одной локальной сети: athena и router.

Запустим tcpdump -xx -n -v icmp6 на роутере.

Поднимем на клиенте athena интерфейс в сторону роутера:

[root@athena ~]# ip link set eth1 up

Клиент сгенерировал и назначил себе внутрисегментный адрес fe80::a00:27ff:fe9a:a65e на этом интерфейсе. Как он поймёт, что в сегменте нет других абонентов с таким адресом? Вышлет DAD-пакет, который видно в дампе на router:

18:19:02.431267 08:00:27:9a:a6:5e > 33:33:ff:9a:a6:5e, ethertype IPv6 (0x86dd), length 86: (hlim 255, next-header ICMPv6 (58) payload length: 32) :: > ff02::1:ff9a:a65e: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::a00:27ff:fe9a:a65e
          nonce option (14), length 8 (1): 4c 03 0c 40 93 ab
        0x0000:  3333 ff9a a65e 0800 279a a65e 86dd 6000  33...^..'..^..`.
        0x0010:  0000 0020 3aff 0000 0000 0000 0000 0000  ....:...........
        0x0020:  0000 0000 0000 ff02 0000 0000 0000 0000  ................
        0x0030:  0001 ff9a a65e 8700 043e 0000 0000 fe80  .....^...>......
        0x0040:  0000 0000 0000 0a00 27ff fe9a a65e 0e01  ........'....^..
        0x0050:  4c03 0c40 93ab                           L..@..

Это who-has запрос "у кого адрес fe80::a00:27ff:fe9a:a65e — отзовитесь". IP-адрес источника не определён, IP-адрес назначения — solicited-node мультивещательная группа.

Если в течение таймаута (1.5 секунды) никто не ответил — адрес наш.

Роутер тоже автоназначил себе адрес:

[root@router ~]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
eth0             DOWN           
eth1             UP             fe80::a00:27ff:fec8:ae33/64 
eth2             DOWN           
eth3             DOWN           

Попробуем пингануть соседа (ping -c2 fe80::a00:27ff:fec8:ae33%eth1).

TODO Придумать более читаемую разметку (например, цветом + комментарии в tooltip-ах)

tcpdump поймает следующее:

18:24:35.388779 08:00:27:9a:a6:5e > 33:33:ff:c8:ae:33, ethertype IPv6 (0x86dd), length 86: (hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::a00:27ff:fe9a:a65e > ff02::1:ffc8:ae33: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::a00:27ff:fec8:ae33
          source link-address option (1), length 8 (1): 08:00:27:9a:a6:5e
        0x0000:  3333 ffc8 ae33 0800 279a a65e 86dd 6000  33...3..'..^..`.
              :  ^^^^ ^^^^ ^^^^                     ^   
              :  ethernet multicast                 Ver 
        0x0010:  0000 0020 3a                             ....:           
              :       ^^^^ ^^                           
              :       len  Next Header (ICMPv6)         
        0x0010:              ff fe80 0000 0000 0000 0a00       ...........
              :              ^^                         
              :              Hop Limit                  
        0x0020:  27ff fe9a a65e ff02 0000 0000 0000 0000  '....^..........
        0x0030:  0001 ffc8 ae33 87                        .....3.         
              :                 ^^                      
              :             type (NS)                   
        0x0030:                   00 41b4 0000 0000 fe80         .A.......
              :                   ^^ ^^^^               
              :                 code csum               
        0x0040:  0000 0000 0000 0a00 27ff fec8 ae33 0101  ........'....3..
        0x0050:  0800 279a a65e                           ..'..^
18:24:35.388827 08:00:27:c8:ae:33 > 08:00:27:9a:a6:5e, ethertype IPv6 (0x86dd), length 86: (hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::a00:27ff:fec8:ae33 > fe80::a00:27ff:fe9a:a65e: [icmp6 sum ok] ICMP6, neighbor advertisement, length 32, tgt is fe80::a00:27ff:fec8:ae33, Flags [router, solicited, override]
          destination link-address option (2), length 8 (1): 08:00:27:c8:ae:33
        0x0000:  0800 279a a65e 0800 27c8 ae33 86dd 6000  ..'..^..'..3..`.
              :  ^^^^ ^^^^ ^^^^                         
              :  ethernet unicast reply                 
        0x0010:  0000 0020 3aff fe80 0000 0000 0000 0a00  ....:...........
        0x0020:  27ff fec8 ae33 fe80 0000 0000 0000 0a00  '....3..........
        0x0030:  27ff fe9a a65e 8800 2734 e000 0000 fe80  '....^..'4......
              :                 ^^        ^             
              :            type (NA)      flags         
        0x0040:  0000 0000 0000 0a00 27ff fec8 ae33 0201  ........'....3..
              :                                     ^^^^
              :                   option type and length
        0x0050:  0800 27c8 ae33                           ..'..3
              :  ^^^^ ^^^^ ^^^^                         
              :  option 2: dest link address            

В результате у первого узла возникнет запись о втором в состоянии REACHABLE. «receipt of a solicited advertisement indicates that a path is working in both directions».

У второго узла возникнет запись о первом в состоянии STALE, rfc4861; не REACHABLE, потому что второй не убедился, что визави может ответить на его, второго, запрос.

Далее соседи начинают общаться: пинг, ответ, пинг, ответ.

18:24:35.389214 08:00:27:9a:a6:5e > 08:00:27:c8:ae:33, ethertype IPv6 (0x86dd), length 118: (flowlabel 0x03500, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::a00:27ff:fe9a:a65e > fe80::a00:27ff:fec8:ae33: [icmp6 sum ok] ICMP6, echo request, id 1, seq 1
        0x0000:  0800 27c8 ae33 0800 279a a65e 86dd 6000  ..'..3..'..^..`.
        0x0010:  3500 0040 3a40 fe80 0000 0000 0000 0a00  5..@:@..........
        0x0020:  27ff fe9a a65e fe80 0000 0000 0000 0a00  '....^..........
        0x0030:  27ff fec8 ae33 8000 d793 0001 0001 7326  '....3........s&
              :                 ^^             ^^^^     
              :            type (echo)         seqn     
        0x0040:  b669 0000 0000 0796 0500 0000 0000 1011  .i..............
        0x0050:  1213 1415 1617 1819 1a1b 1c1d 1e1f 2021  ...............!
        0x0060:  2223 2425 2627 2829 2a2b 2c2d 2e2f 3031  "#$%&'()*+,-./01
        0x0070:  3233 3435 3637                           234567
18:24:35.389245 08:00:27:c8:ae:33 > 08:00:27:9a:a6:5e, ethertype IPv6 (0x86dd), length 118: (flowlabel 0x4cb7a, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::a00:27ff:fec8:ae33 > fe80::a00:27ff:fe9a:a65e: [icmp6 sum ok] ICMP6, echo reply, id 1, seq 1
        0x0000:  0800 279a a65e 0800 27c8 ae33 86dd 6004  ..'..^..'..3..`.
        0x0010:  cb7a 0040 3a40 fe80 0000 0000 0000 0a00  .z.@:@..........
        0x0020:  27ff fec8 ae33 fe80 0000 0000 0000 0a00  '....3..........
        0x0030:  27ff fe9a a65e 8100 d693 0001 0001 7326  '....^........s&
              :                 ^^             ^^^^     
              :            type (echo-reply)   seqn     
        0x0040:  b669 0000 0000 0796 0500 0000 0000 1011  .i..............
        0x0050:  1213 1415 1617 1819 1a1b 1c1d 1e1f 2021  ...............!
        0x0060:  2223 2425 2627 2829 2a2b 2c2d 2e2f 3031  "#$%&'()*+,-./01
        0x0070:  3233 3435 3637                           234567
18:24:36.389426 08:00:27:9a:a6:5e > 08:00:27:c8:ae:33, ethertype IPv6 (0x86dd), length 118: (flowlabel 0x03500, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::a00:27ff:fe9a:a65e > fe80::a00:27ff:fec8:ae33: [icmp6 sum ok] ICMP6, echo request, id 1, seq 2
        0x0000:  0800 27c8 ae33 0800 279a a65e 86dd 6000  ..'..3..'..^..`.
        0x0010:  3500 0040 3a40 fe80 0000 0000 0000 0a00  5..@:@..........
        0x0020:  27ff fe9a a65e fe80 0000 0000 0000 0a00  '....^..........
        0x0030:  27ff fec8 ae33 8000 3891 0001 0002 7426  '....3..8.....t&
              :                 ^^             ^^^^     
              :            type (echo)         seqn     
        0x0040:  b669 0000 0000 a597 0500 0000 0000 1011  .i..............
        0x0050:  1213 1415 1617 1819 1a1b 1c1d 1e1f 2021  ...............!
        0x0060:  2223 2425 2627 2829 2a2b 2c2d 2e2f 3031  "#$%&'()*+,-./01
        0x0070:  3233 3435 3637                           234567
18:24:36.389474 08:00:27:c8:ae:33 > 08:00:27:9a:a6:5e, ethertype IPv6 (0x86dd), length 118: (flowlabel 0x4cb7a, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::a00:27ff:fec8:ae33 > fe80::a00:27ff:fe9a:a65e: [icmp6 sum ok] ICMP6, echo reply, id 1, seq 2
        0x0000:  0800 279a a65e 0800 27c8 ae33 86dd 6004  ..'..^..'..3..`.
        0x0010:  cb7a 0040 3a40 fe80 0000 0000 0000 0a00  .z.@:@..........
        0x0020:  27ff fec8 ae33 fe80 0000 0000 0000 0a00  '....3..........
        0x0030:  27ff fe9a a65e 8100 3791 0001 0002 7426  '....^..7.....t&
              :                 ^^             ^^^^     
              :            type (echo-reply)   seqn     
        0x0040:  b669 0000 0000 a597 0500 0000 0000 1011  .i..............
        0x0050:  1213 1415 1617 1819 1a1b 1c1d 1e1f 2021  ...............!
        0x0060:  2223 2425 2627 2829 2a2b 2c2d 2e2f 3031  "#$%&'()*+,-./01
        0x0070:  3233 3435 3637                           234567

Повторим эксперимент, но с запущенным в фоне ip monitor neighbor dev eth1:

[root@athena ~]# ip monitor neighbor dev eth1 &
[root@athena ~]# ping -c2 fe80::a00:27ff:fe9e:95d1%eth1
PING fe80::a00:27ff:fe9e:95d1%eth1 (fe80::a00:27ff:fe9e:95d1%eth1) 56 data bytes
fe80::a00:27ff:fe9e:95d1 lladdr 08:00:27:9e:95:d1 router REACHABLE 
64 bytes from fe80::a00:27ff:fe9e:95d1%eth1: icmp_seq=1 ttl=64 time=1.60 ms
64 bytes from fe80::a00:27ff:fe9e:95d1%eth1: icmp_seq=2 ttl=64 time=0.898 ms

--- fe80::a00:27ff:fe9e:95d1%eth1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.898/1.250/1.602/0.352 ms

[root@router ~]# ip n flush dev eth1
fe80::a00:27ff:fe57:54af FAILED 
Deleted fe80::a00:27ff:fe57:54af FAILED 
[root@router ~]# tcpdump -i eth1 -xx -n -v
tcpdump: listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
fe80::a00:27ff:fe57:54af lladdr 08:00:27:57:54:af STALE 
23:21:06.518450 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::a00:27ff:fe57:54af > ff02::1:ff9e:95d1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::a00:27ff:fe9e:95d1
          source link-address option (1), length 8 (1): 08:00:27:57:54:af
        0x0000:  3333 ff9e 95d1 0800 2757 54af 86dd 6000
        0x0010:  0000 0020 3aff fe80 0000 0000 0000 0a00
        0x0020:  27ff fe57 54af ff02 0000 0000 0000 0000
        0x0030:  0001 ff9e 95d1 8700 16b1 0000 0000 fe80
        0x0040:  0000 0000 0000 0a00 27ff fe9e 95d1 0101
        0x0050:  0800 2757 54af
23:21:06.518530 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::a00:27ff:fe9e:95d1 > fe80::a00:27ff:fe57:54af: [icmp6 sum ok] ICMP6, neighbor advertisement, length 32, tgt is fe80::a00:27ff:fe9e:95d1, Flags [router, solicited, override]
          destination link-address option (2), length 8 (1): 08:00:27:9e:95:d1
        0x0000:  0800 2757 54af 0800 279e 95d1 86dd 6000
        0x0010:  0000 0020 3aff fe80 0000 0000 0000 0a00
        0x0020:  27ff fe9e 95d1 fe80 0000 0000 0000 0a00
        0x0030:  27ff fe57 54af 8800 c2ca e000 0000 fe80
        0x0040:  0000 0000 0000 0a00 27ff fe9e 95d1 0201
        0x0050:  0800 279e 95d1
23:21:06.519447 IP6 (flowlabel 0x867fd, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::a00:27ff:fe57:54af > fe80::a00:27ff:fe9e:95d1: [icmp6 sum ok] ICMP6, echo request, id 6, seq 1
        0x0000:  0800 279e 95d1 0800 2757 54af 86dd 6008
        0x0010:  67fd 0040 3a40 fe80 0000 0000 0000 0a00
        0x0020:  27ff fe57 54af fe80 0000 0000 0000 0a00
        0x0030:  27ff fe9e 95d1 8000 cc1f 0006 0001 e23e
        0x0040:  b769 0000 0000 096b 0900 0000 0000 1011
        0x0050:  1213 1415 1617 1819 1a1b 1c1d 1e1f 2021
        0x0060:  2223 2425 2627 2829 2a2b 2c2d 2e2f 3031
        0x0070:  3233 3435 3637
23:21:06.519466 IP6 (flowlabel 0x36eaa, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::a00:27ff:fe9e:95d1 > fe80::a00:27ff:fe57:54af: [icmp6 sum ok] ICMP6, echo reply, id 6, seq 1
        0x0000:  0800 2757 54af 0800 279e 95d1 86dd 6003
        0x0010:  6eaa 0040 3a40 fe80 0000 0000 0000 0a00
        0x0020:  27ff fe9e 95d1 fe80 0000 0000 0000 0a00
        0x0030:  27ff fe57 54af 8100 cb1f 0006 0001 e23e
        0x0040:  b769 0000 0000 096b 0900 0000 0000 1011
        0x0050:  1213 1415 1617 1819 1a1b 1c1d 1e1f 2021
        0x0060:  2223 2425 2627 2829 2a2b 2c2d 2e2f 3031
        0x0070:  3233 3435 3637
23:21:07.519740 IP6 (flowlabel 0x867fd, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::a00:27ff:fe57:54af > fe80::a00:27ff:fe9e:95d1: [icmp6 sum ok] ICMP6, echo request, id 6, seq 2
        0x0000:  0800 279e 95d1 0800 2757 54af 86dd 6008
        0x0010:  67fd 0040 3a40 fe80 0000 0000 0000 0a00
        0x0020:  27ff fe57 54af fe80 0000 0000 0000 0a00
        0x0030:  27ff fe9e 95d1 8000 fc19 0006 0002 e33e
        0x0040:  b769 0000 0000 d86f 0900 0000 0000 1011
        0x0050:  1213 1415 1617 1819 1a1b 1c1d 1e1f 2021
        0x0060:  2223 2425 2627 2829 2a2b 2c2d 2e2f 3031
        0x0070:  3233 3435 3637
23:21:07.519819 IP6 (flowlabel 0x36eaa, hlim 64, next-header ICMPv6 (58) payload length: 64) fe80::a00:27ff:fe9e:95d1 > fe80::a00:27ff:fe57:54af: [icmp6 sum ok] ICMP6, echo reply, id 6, seq 2
        0x0000:  0800 2757 54af 0800 279e 95d1 86dd 6003
        0x0010:  6eaa 0040 3a40 fe80 0000 0000 0000 0a00
        0x0020:  27ff fe9e 95d1 fe80 0000 0000 0000 0a00
        0x0030:  27ff fe57 54af 8100 fb19 0006 0002 e33e
        0x0040:  b769 0000 0000 d86f 0900 0000 0000 1011
        0x0050:  1213 1415 1617 1819 1a1b 1c1d 1e1f 2021
        0x0060:  2223 2425 2627 2829 2a2b 2c2d 2e2f 3031
        0x0070:  3233 3435 3637

Когда сосед был известен, но запись протухла, и надо что-то ему отправить — переводим в PROBE:

fe80::a00:27ff:fe57:54af lladdr 08:00:27:57:54:af PROBE 
fe80::a00:27ff:fe57:54af lladdr 08:00:27:57:54:af REACHABLE 
23:21:11.912793 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::a00:27ff:fe9e:95d1 > fe80::a00:27ff:fe57:54af: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::a00:27ff:fe57:54af
          source link-address option (1), length 8 (1): 08:00:27:9e:95:d1
        0x0000:  0800 2757 54af 0800 279e 95d1 86dd 6000
        0x0010:  0000 0020 3aff fe80 0000 0000 0000 0a00
        0x0020:  27ff fe9e 95d1 fe80 0000 0000 0000 0a00
        0x0030:  27ff fe57 54af 8700 e634 0000 0000 fe80
        0x0040:  0000 0000 0000 0a00 27ff fe57 54af 0101
        0x0050:  0800 279e 95d1
23:21:11.913444 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) fe80::a00:27ff:fe57:54af > fe80::a00:27ff:fe9e:95d1: [icmp6 sum ok] ICMP6, neighbor advertisement, length 24, tgt is fe80::a00:27ff:fe57:54af, Flags [solicited]
        0x0000:  0800 279e 95d1 0800 2757 54af 86dd 6000
        0x0010:  0000 0018 3aff fe80 0000 0000 0000 0a00
        0x0020:  27ff fe57 54af fe80 0000 0000 0000 0a00
        0x0030:  27ff fe9e 95d1 8800 6bad 4000 0000 fe80
        0x0040:  0000 0000 0000 0a00 27ff fe57 54af

Шлём unicast NS лично соседу. Получили solicited NA — состояние REACHABLE.

NDP поддерживается ядром Linux.

Настройка IP в Linux и табличная маршрутизация

Destination-based принцип табличной маршрутизации: «адрес получателя ⇒ префикс получателя ⇒ маршрут».

Три скринкаста к проводимым ниже настройкам: router, client, clone.

04_AddressRoute.png

Настройка префикса

Длина префикса часто записывается в виде числа после символа слеша (/48), реже — как последовательность 1 в двоичном виде

В спецификации протокола IPv6 описана модель работы узла, в которой на интерфейс назначается префикс с длиной, в котором узел берёт себе ноль или более адресов. Linux на эту модель не опирается; даёт возможность назначить на сетевом интерфейсе адрес с длиной префикса.

При ручной настройке IP+префикса на сетевом интерфейсе Linux по умолчанию вносит в таблицу маршрутизации запись вида: «такая-то IP-подсеть находится непосредственно за этим сетевым интерфейсом», предполагая, что адреса в этом префиксе доступны напрямую по локальной среде.

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

Маршрутизация между двумя сетями

Подключим ко второму интерфейсу маршрутизатора ещё одну машину.

Надо сделать ещё два действия:

Простая табличная маршрутизация:

  1. Получаем пакет
  2. Просматриваем все записи в таблице, из них выбираем те, в префиксе которых лежит адрес получателя пакета (применяем к нему соответствующую маску и сравниваем префикс маршрута с результатом)
    • Если настроен маршрут по умолчанию (с сетевой маской длины 0), он всегда подходит
  3. Среди подходящих записей выбирается та, что имеет самый длинный префикс (т. е. в которой меньше абонентов)
  4. Если это запись вида «сеть dev интерфейс», обращаемся за адресом к ND-таблице соседей, если «сеть via адрес» — используем этот адрес
  5. Пересылаем пакет на найденный адрес

TODO Предположительно не влезает, в т. ч. в Д/З!

Целевая маршрутизация

Ранее мы работали с destination-based принцип табличной маршрутизации: «сеть получателя ⇒ маршрут».

Задача source-based маршрутизации: «свойства пакета отправителя ⇒ маршрут».

Linux: просто заведём несколько таблиц маршрутизации (разных), и будем обрабатывать пакет по правилам одной из них сообразно его свойствам:

Команда ip -6 rule (немного документации)

Заготовка: TODO: убрать выходы в интернет, заменить на ещё одну виртуалку.

  1. Два компьютера с выходом в интернет у каждого

  2. Маршрутизатор, подключённый к этим двум машинам по отдельным интерфейсам и третьей сетью для внутренних клиентов

Пример 1: подключаем два клиента ко внутренней сети, настраиваем source routing: с одного адреса пакеты в одну сторону, с другого — в другую

[router] # ip -6 route add default второй_сервер table какой-то-номер
[router] # ip -6 rule add from «IP_B» table какой-то-номер

Пример 2: подключаем один клиент, перекидываем трафик по 80/443 портам в другую сторону

# ip -6 route add default второй_сервер table какой-то-номер
# ip -6 rule add dport 80 table какой-то-номер

Получаем такую настройку:

   1 [root@router ~]# ip -6 rule list
   2 0:      from all lookup local
   3 32765:  from all dport 80 lookup какой-то-номер
   4 32766:  from all lookup main
   5 [root@router ~]# ip -6 route list         
   6 default via Сервер1 dev eth1 
   7 
   8 [root@router ~]# ip -6 route list table какой-то-номер
   9 default via Сервер2 dev eth2
  10 

Правила в ip rule

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

Д/З

Задание 4

  1. Суть: объединить четыре компьютера тремя сетями по простой линейной схеме:
    • clone ←сеть3→ subrouter ←сеть2→ router ←сеть1→ base

    • На машинах clone и base — по одному интерфейсу

    • На машинах subrouter и router — два, там настроить маршрутизацию

    • Обеспечить доступность между clone и base

  2. Отчёт (выполнятся с нуля на ненастроенных машинах):
    1. report 4 clone

      • Настройка/поднятие интерфейса
      • Дополнительные настройки маршрутизации (если нужны)
      • tcpdump -c4 -i интерфейс udp (должен показать пинги)

    2. report 4 subrouter

      • Настройка/поднятие двух интерфейсов
      • Дополнительные настройки маршрутизации (если нужны)
    3. report 4 router

      • Настройка/поднятие двух интерфейсов
      • Дополнительные настройки маршрутизации (если нужны)
    4. report 4 base (выполняется последним)

      • Настройка/поднятие интерфейса
      • Дополнительные настройки маршрутизации (если нужны)
      • traceroute -q4 -m3 адрес_clone (должен проходить)

    5. Повторить пинги, но в обратную сторону: собирать дамп пакетов на base, отправлять пакеты с clone.

  3. Четыре отчёта (названия сохранить; должно быть: report.04.base, report.04.clone, report.04.router, report.04.subrouter) переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru

LecturesCMC/LinuxNetwork2026/Six/04_AddressRoute (последним исправлял пользователь FrBrGeorge 2026-03-18 21:58:09)