Назад | Перейти на главную страницу

Невозможно связаться с внешним миром или хостом из пары veth / tap с пространством имен сети CNI

У меня есть гипервизор (Firecracker), использующий плагин bridge cni с tc-redirect-tap (https://github.com/firecracker-microvm/firecracker-go-sdk/tree/master/cni/cmd/tc-redirect-tap). При настройке сети он создает устройство ответвления и подключается к мосту cni. Трафик от гостя перенаправляется vmm на устройство Tap и работает, но если я попытаюсь использовать сеть из процесса vmm, я получаю «Нет маршрута к хосту».

Вот результат ip a из пространства имен:

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: veth0@if108: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 32:9d:2f:c8:ab:42 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.5/24 brd 192.168.1.255 scope global veth0
       valid_lft forever preferred_lft forever
    inet6 fe80::309d:2fff:fec8:ab42/64 scope link 
       valid_lft forever preferred_lft forever
4: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 6e:6c:4c:97:20:67 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::6c6c:4cff:fe97:2067/64 scope link 
       valid_lft forever preferred_lft forever

С участием ip routes будучи:

192.168.1.0/24 dev veth0 proto kernel scope link src 192.168.1.5

На хосте это мост:

104: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 8e:4b:d6:73:9f:3c brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.1.255 scope global cni0
       valid_lft forever preferred_lft forever
    inet6 fe80::8c4b:d6ff:fe73:9f3c/64 scope link 
       valid_lft forever preferred_lft forever

И CNI conf:

{
    "name": "fcnet",
    "cniVersion": "0.3.1",
    "plugins": [
        {
            "type": "bridge",
            "name": "fcnet",
            "isGateway": true,
            "ipMasq": false,
            "ipam": {
                "type": "host-local",
                "subnet": "192.168.1.0/24"
            }
        },
        {
            "type": "portmap",
            "snat": true,
            "capabilities": {
                "portMappings": true
            }
        },
        {
            "type": "tc-redirect-tap"
        }
    ]
}

Я пробовал вручную пинговать снаружи и устанавливать разные маршруты, но безуспешно, например:

sudo ip netns exec 286d1ad1-32c2-4dcf-b55f-306a55849603 wget 172.217.14.164:80
--2020-03-10 19:42:43--  http://172.217.14.164/
Connecting to 172.217.14.164:80... failed: Network is unreachable.

Есть ли способ заставить это (по крайней мере, команду wget выше) работать?