Повторное использование IP-адреса на устройствах Macvlan

Я пытаюсь создать простую в использовании и, возможно, простую среду тестирования для какого-либо продукта и получаю странное поведение macvlan.

Чего я пытаюсь добиться: создать набор инструментов для однострочного запуска / остановки контейнеров lxc (через докер), привязанных к внешнему ip (мне этого достаточно на хост-машине).

Итак, я делаю что-то вроде этого:

docker run -d -name= имя_ контейнера имя_ контейнера
конвейер eth1 имя_ контейнера ip/prefix_len@gateway

и трубопровод здесь делает это:

GUEST_IFNAME = фот $ NSPID $ eth1

ip link добавить ссылку eth1 dev $GUEST_IFNAME тип мост режима macvlan
IP-ссылка настроила eth1 вверх
ip link set $ GUEST_IFNAME netns $ NSPID

ip netns exec $NSPID ip link set $ GUEST_IFNAME name eth1
ip netns exec $ NSPID ip addr add $ IPADDR dev eth1
ip netns exec $NSPID ip route удалить по умолчанию 
ip netns exec $NSPID ip link установил eth1
ip netns exec $NSPID ip route заменяет значение по умолчанию через $ GATEWAY

ip netns exec $ NSPID arping -c 1 -A -I eth1 $ IPADDR

И это работает впервые на IP. Но во второй и более поздние пакеты для контейнеров IP не попадает в контейнер, в то время как вся конфигурация кажется хорошей.

Так это выглядит так:

Внешняя машина

➤ пинг 212.76.131.212
.... тишина....

Хост-машина

root@ubuntu:~# ip link show eth1
2: eth1:  mtu 1500 qdisc pfifo_fast состояние UP qlen 1000
    ссылка / эфир 00: 15: 17: c9: e1: c9 brd ff: ff: ff: ff: ff: ff

root @ ubuntu: ~ # ip addr show eth1
2: eth1: mtu 1500 qdisc pfifo_fast состояние UP qlen 1000
    ссылка / эфир 00: 15: 17: c9: e1: c9 brd ff: ff: ff: ff: ff: ff

root @ ubuntu: ~ # tcpdump -v -i eth1 icmp
tcpdump: ПРЕДУПРЕЖДЕНИЕ: eth1: IPv4-адрес не назначен
tcpdump: прослушивание по eth1, тип канала EN10MB (Ethernet), размер захвата 65535 байт
00:00:46.542042 IP (tos 0x0, ttl 60, id 9623, смещение 0, флаги [DF], протокол ICMP (1), длина 84)
    5.134.221.98 > 212.76.131.212: эхо-запрос ICMP, id 6718, seq 2345, длина 64
00:00:47.549969 IP (tos 0x0, ttl 60, id 9624, смещение 0, флаги [DF], протокол ICMP (1), длина 84)
    5.134.221.98 > 212.76.131.212: эхо-запрос ICMP, id 6718, seq 2346, длина 64
00:00:48.558143 IP (tos 0x0, ttl 60, id 9625, смещение 0, флаги [DF], протокол ICMP (1), длина 84)
    5.134.221.98 > 212.76.131.212: эхо-запрос ICMP, id 6718, seq 2347, длина 64
00:00:49.566319 IP (tos 0x0, ttl 60, id 9626, смещение 0, флаги [DF], протокол ICMP (1), длина 84)
    5.134.221.98 > 212.76.131.212: эхо-запрос ICMP, id 6718, seq 2348, длина 64
00:00:50.573999 IP (tos 0x0, ttl 60, id 9627, смещение 0, флаги [DF], протокол ICMP (1), длина 84)
    5.134.221.98 > 212.76.131.212: эхо-запрос ICMP, id 6718, seq 2349, длина 64
^C
5 захваченных пакетов
5 пакетов, полученных фильтром
0 пакетов отброшено ядром
1 пакет отброшен интерфейсом

Хост машина, нетнс контейнера

root@ubuntu:~# ip netns exec 32053 ip ссылка показать eth1
48: eth1@if2:  mtu 1500 qdisc noqueue state НЕИЗВЕСТНО 
    ссылка / эфир b2:12:f7:cc:a1:9d brd ff:ff:ff:ff:ff:ff
root@ubuntu:~# ip netns exec 32053 ip addr show eth1
48: eth1@if2:  mtu 1500 qdisc noqueue state НЕИЗВЕСТНО 
    ссылка / эфир b2:12:f7:cc:a1:9d brd ff:ff:ff:ff:ff:ff
    inet 212.76.131.212/29 scope global eth1
    inet6 fe80::b012:f7ff:fecc:a19d/64 ссылка области 
       valid_lft forever предпочитаемый_lft forever
root@ubuntu:~# ip netns exec 32053 tcpdump -v -i eth1 icmp
tcpdump: прослушивание по eth1, тип канала EN10MB (Ethernet), размер захвата 65535 байт.... тишина....
^C
0 перехваченных пакетов
0 пакетов, полученных фильтром
0 пакетов отброшено ядром

Итак, кто-нибудь может сказать, что это может быть? Может ли это быть вызвано не ошибкой в ​​реализации macvlan? Могу ли я использовать какие-либо инструменты для отладки этой конфигурации?

1 ответ

Решение

Это была проблема с кэшем ARP.

Кэш ARP на шлюзе содержал запись для IP с MAC уже мертвого macvlan и не обновлялась просто arping,

Решено добавлением

ip netns exec $NSPID ping -c 1 -I eth1 $ Шлюз

до конца pipework скрипт. Этот пинг заставляет шлюз обновлять запись кэша ARP /

Другие вопросы по тегам