VYOS-VPP: различия между версиями

Материал из EWiki
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 135: Строка 135:
</syntaxhighlight>'''Примечания:'''  
</syntaxhighlight>'''Примечания:'''  


# Необходимо убедиться, что все монтируемые каталоги, а также образ и файл env, указанные в команде лежат на своих местах.
# Необходимо убедиться, что все монтируемые каталоги, а также образ и файл env, указанные в команде, лежат на своих местах.
# В случае ошибки запуска (может ругаться на то, что контейнер VPP уже существует) следует добавить в команду параметр '''--replace'''
# В случае ошибки запуска (может ругаться на то, что контейнер VPP уже существует) следует добавить в команду параметр '''--replace'''


Строка 143: Строка 143:
</syntaxhighlight>
</syntaxhighlight>


Настраиваем контейнер:<syntaxhighlight lang="sh">
sudo podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf
sudo podman restart vpp
</syntaxhighlight>
=== 5. Настройка интерфейсов внутри контейнера VPP: ===
Заходим внутрь запущенного контейнера:<syntaxhighlight lang="sh">
sudo podman exec -it vpp vppctl
</syntaxhighlight>


<nowiki>#########################################################################################</nowiki>
===
<nowiki>#########################################################################################</nowiki> ===


=== test web server (для проверки работы vyos) ===
=== test web server (для проверки работы vyos) ===

Версия от 01:41, 17 июня 2025

Подготовка сервера с VYOS для работы с VPP

1. Настройки BIOS

В BIOS включить настройку Intel VT-d (или как там она называется)

Примечание: на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)

2. Настройки ядра VYOS

В файле /boot/grub/grub.cfg.d/vyos-versions найти следующую строчку:

set boot_opts="boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling"

и добавить в конец: " intel_iommu=on iommu=pt"

т.е. полная строка должна быть:

set boot_opts="boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt"

Далее выполнить перезагрузку.

Примечание: после перезагрузки файл /boot/grub/grub.cfg.d/vyos-versions перезаписывается, так что придется потом снова строку

"set boot_opts = ..." перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.

После перезагрузки нужно убедиться, что режим IOMMU включен, для этого выполнить команду:

dmesg | grep IOMMU

Вывод должен быть примерно таким:

[    0.046990] DMAR: IOMMU enabled

[    0.109294] DMAR-IR: IOAPIC id 1 under DRHD base  0xfbffc000 IOMMU 1

[    0.109297] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 1

[    0.372778] DMAR: IOMMU feature sc_support inconsistent

[    0.372779] DMAR: IOMMU feature dev_iotlb_support inconsistent

[    0.386236] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.

3. Настройка работы сетевых карт в режиме VFIO

Проверка сетевых карт через ip link (обращаем внимание на eth0 и eth1):

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000

    link/ether 22:41:4d:03:1d:70 brd ff:ff:ff:ff:ff:ff

    altname enp6s0

3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000

    link/ether 40:a6:b7:93:42:44 brd ff:ff:ff:ff:ff:ff

    altname enp3s0f0

    altname ens4f0

4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000

    link/ether 40:a6:b7:93:42:45 brd ff:ff:ff:ff:ff:ff

    altname enp3s0f1

    altname ens4f1

5: pim6reg@NONE: <NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000

Убеждаемся, что загружены модули ядра для VFIO:

sudo modprobe vfio
sudo modprobe vfio-pci
sudo modprobe vfio_iommu_type1

Проверяем, что PCI-код соответствует устройству (eth0 = 0000:03:00.0, eth1 = 0000:03:00.1):

lspci -k -v -s 0000:03:00.0
lspci -k -v -s 0000:03:00.1

Вывод должен быть примерно таким (обращаем внимание на текущий Kernel driver in use):

03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)

        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2

        Physical Slot: 4

        Flags: bus master, fast devsel, latency 0, IRQ 27, NUMA node 0, IOMMU group 28

        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]

        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]

        Expansion ROM at fbd80000 [disabled] [size=512K]

        Capabilities: <access denied>

        Kernel driver in use: i40e

        Kernel modules: i40e

Для обеих сетевух отвязываем их от текущего драйвера и привязываем к VFIO:

echo 0000:03:00.0 | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind

# 2. Привязываем к vfio-pci
echo vfio-pci | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver_override
echo 0000:03:00.0 | sudo tee /sys/bus/pci/drivers/vfio-pci/bind

# 3. Проверяем
lspci -k -s 03:00.0

Те же манипуляции делаем для 0000:03:00.1 (не забываем в путях к файлам настроек корректно прописать каталог устройства 0000:03:00.1).

Убеждаемся, что для обеих сетевух теперь используется драйвер VFIO:

03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)

        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2

        Physical Slot: 4

        Flags: fast devsel, IRQ 27, NUMA node 0, IOMMU group 28

        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]

        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]

        Expansion ROM at fbd80000 [disabled] [size=512K]

        Capabilities: <access denied>

        Kernel driver in use: vfio-pci

        Kernel modules: i40e

Примечание: Также в выводе команды ip link интерфейсов eth0 и eth1 теперь не будет, так как они перешли под управление VFIO.

4. Запуск контейнера для VPP

Создаем сетевое пространство имен NGFW (нужно для корректного запуска контейнера):

sudo ip netns add ngfw

Выполняем запуск контейнера с VPP:

sudo podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar

Примечания:

  1. Необходимо убедиться, что все монтируемые каталоги, а также образ и файл env, указанные в команде, лежат на своих местах.
  2. В случае ошибки запуска (может ругаться на то, что контейнер VPP уже существует) следует добавить в команду параметр --replace


Проверяем состояние контейнера:

sudo podman ps

Настраиваем контейнер:

sudo podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf
sudo podman restart vpp

5. Настройка интерфейсов внутри контейнера VPP:

Заходим внутрь запущенного контейнера:

sudo podman exec -it vpp vppctl

=

######################################################################################### ===

test web server (для проверки работы vyos)

while true; do { echo -e 'HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!'; } | nc -l 8081; done

надо будет еще ядро перенастраивать (но пока рано)

sudo grub-probe --device /dev/sda3

это мое !

podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf

конфигурирование podman

sudo nano /etc/containers/containers.conf

dns_bind_port=54

sudo chattr +i /etc/containers/containers.conf

ip netns add ngfw

podman rm vpp -f

создание host interface

ip netns exec ngfw bash

ip link add name http1out type veth peer name http1host

ip link set dev http1out up

ip link set dev http1host up

ip addr add 10.10.10.10/24 dev http1host

ip addr show http1host

podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar

vpp:

create host-interface name http1out

set interface state host-http1out up

podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf

podman restart vpp

назначаем адрес для теста (data2 в бридже loop10)

podman exec -it vpp vppctl

set interface ip address loop10 10.1.100.125/24

show int addr

#########################################################################################

########## enode on podman -----------------------------

включение разрешений для podman

set nat source rule 100 source address '10.88.0.0/16'

set nat source rule 100 translation address 'masquerade'

commit

save

для traefik нуже сервис podman api

podman system service -t 0 unix:///run/user/1000/podman/podman.sock &


vyos|vyos

sudo podman exec -it vpp vppctl

show acl-plugin acl


#########################################################################################

### пример лога vpp контейнера

[INFO    ] root.main: Loading configfile /etc/vpp/netplan/netplan.yaml

[INFO    ] vppcfg.config.valid_config: Configuration validated successfully

[INFO    ] root.main: Configuration is valid

[INFO    ] vppcfg.vppapi.connect: VPP version is 24.02-release

[INFO    ] vppcfg.reconciler.write: Wrote 46 lines to /etc/vpp/applynetplan.yaml

[INFO    ] root.main: Planning succeeded

api_response => lcp_itf_pair_get []

111111111111111111 create sub data1 109 dot1q 109 exact-match

111111111111111111 create sub data1 110 dot1q 110 exact-match

111111111111111111 create sub data1 10 dot1q 10 exact-match

create loopback interface instance 110

linux-cp/itf         [debug ]: mtu_change: sw loop110 0

linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi loop110

loop110

linux-cp/itf         [debug ]: interface_add: sw data1.109 parent data1

data1.109

linux-cp/itf         [debug ]: interface_add: sw data1.110 parent data1

data1.110

linux-cp/itf         [debug ]: interface_add: sw data1.10 parent data1

data1.10

bridge-domain 10

bridge-domain 109

bridge-domain 110

linux-cp/itf         [debug ]: mtu_change: sw tap4 0

linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi data1.109

linux-cp/itf         [info  ]: pair create: {loop10, tap4, vlaneth0}

linux-cp/itf         [info  ]: add: host:tap4 phy:loop10, host_if:vlaneth0 vif:7 ns:ngfw

linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw

linux-cp/itf         [info  ]: pair create: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw sw-flags 0 hw-flags 1

linux-cp/itf         [debug ]: admin_state_change: sw tap4 1

linux-cp/itf         [debug ]: mtu_change: sw tap5 0

linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi data1.110

linux-cp/itf         [info  ]: pair create: {loop109, tap5, vlaneth99}

linux-cp/itf         [info  ]: add: host:tap5 phy:loop109, host_if:vlaneth99 vif:8 ns:ngfw

linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw

linux-cp/itf         [info  ]: pair create: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw sw-flags 0 hw-flags 1

linux-cp/itf         [debug ]: admin_state_change: sw tap5 1

linux-cp/itf         [debug ]: mtu_change: sw tap6 0

linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi data1.10

linux-cp/itf         [info  ]: pair create: {loop110, tap6, vlaneth100}

linux-cp/itf         [info  ]: add: host:tap6 phy:loop110, host_if:vlaneth100 vif:9 ns:ngfw

linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw

linux-cp/itf         [info  ]: pair create: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw sw-flags 0 hw-flags 1

linux-cp/itf         [debug ]: admin_state_change: sw tap6 1

linux-cp/itf         [debug ]: mtu_change: sw data1 0

linux-cp/itf         [debug ]: mtu_change: si data1 hi data1, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi data1

linux-cp/itf         [debug ]: mtu_change: sw data1.10 0

linux-cp/itf         [debug ]: mtu_change: sw data1.110 0

linux-cp/itf         [debug ]: mtu_change: sw data1.109 0

linux-cp/itf         [debug ]: mtu_change: sw data2 0

linux-cp/itf         [debug ]: mtu_change: si data2 hi data2, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi data2

linux-cp/itf         [debug ]: mtu_change: sw host-http1out 0

linux-cp/itf         [debug ]: mtu_change: si host-http1out hi host-http1out, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi host-http1out

linux-cp/itf         [debug ]: mtu_change: sw loop10 0

linux-cp/itf         [debug ]: mtu_change: si loop10 hi loop10, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi loop10

linux-cp/itf         [info  ]: sync_state: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500

linux-cp/itf         [debug ]: mtu_change: sw tap4 0

linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi data1.109

linux-cp/itf         [debug ]: mtu_change: sw loop109 0

linux-cp/itf         [debug ]: mtu_change: si loop109 hi loop109, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi loop109

linux-cp/itf         [info  ]: sync_state: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500

linux-cp/itf         [debug ]: mtu_change: sw tap5 0

linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi data1.110

linux-cp/itf         [debug ]: mtu_change: sw loop110 0

linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi loop110

linux-cp/itf         [info  ]: sync_state: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500

linux-cp/itf         [debug ]: mtu_change: sw tap6 0

linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children

linux-cp/itf         [debug ]: sync_state_hw: hi data1.10

linux-cp/itf         [debug ]: ip4_addr_add: si:loop109 172.16.99.1/24

linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw ip4 172.16.99.1/24

linux-cp/itf         [debug ]: ip4_addr_add: si:loop110 172.16.100.1/24

linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw ip4 172.16.100.1/24

linux-cp/itf         [debug ]: admin_state_change: sw data1 1




### пример конфигурации vpp

## sudo podman exec vpp vppctl show int



              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count     

data1                             1      up          1500/0/0/0     tx-error                      40

data1.109                         7      up          1500/0/0/0     

data1.110                         8      up          1500/0/0/0     

data1.10                          9      up          1500/0/0/0     

data2                             2      up          1500/0/0/0     tx packets                    13

                                                                    tx bytes                    1086

host-http1out                     3      up          1500/0/0/0     rx packets                     4

                                                                    rx bytes                     280

                                                                    drops                          4

                                                                    ip6                            4

local0                            0     down          0/0/0/0       

loop109                           5      up          1500/0/0/0     tx packets                    26

                                                                    tx bytes                    2172

                                                                    drops                         13

                                                                    tx-error                       1

loop10                            4      up          1500/0/0/0     tx packets                    26

                                                                    tx bytes                    2172

                                                                    drops                         13

                                                                    tx-error                       1

loop110                           6      up          1500/0/0/0     tx packets                    28

                                                                    tx bytes                    2352

                                                                    drops                         14

tap4                              10     up          1500/0/0/0     rx packets                    13

                                                                    rx bytes                    1046

                                                                    drops                          1

                                                                    ip6                           13

tap5                              11     up          1500/0/0/0     rx packets                    13

                                                                    rx bytes                    1046

                                                                    drops                          1

                                                                    ip6                           13

tap6                              12     up          1500/0/0/0     rx packets                    13

                                                                    rx bytes                    1046

                                                                    ip6                           13