Проблема с настройкой ipvlan для KVM
Моя проблема заключается в следующем: провожу настройку ipvlan для доступа к гостевым ОС через wlan0, настройка проводиться с помощью скрипта, который срабатывает при загрузке системы с помощью юнита systemd, интерфейс создается и поднимается, ему присваивается ip-адрес, но в KVM к гостевой ОС этот ipvlan невозможно подключить. При выборе ipvlan в качестве мостового устройства
<interface type="bridge">
<mac address="52:54:00:b6:c4:71"/>
<source bridge="wlan0"/>
<model type="virtio"/>
<address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>
выходит ошибка "не удалось добавить мост wlan0 (порт vnet0) неподдерживаемая операция"
При выборе ipvlan как устройства macvtap
<interface type="direct">
<mac address="52:54:00:b6:c4:71"/>
<source dev="wlan0" mode="bridge"/>
<model type="virtio"/>
<address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>
ошибка "macvtap@wlan0 устройство или ресурс занято"
Однако macvlan работает, но это совсем не то что мне нужно, так как для беспроводных точек доступа вариант настройки с macvlan не работает, а указание в sysctl proxy_arp (как например в этом варианте https://vankevich.ru/blog/nastrojka-seti-kvm-v-rezhime-bridge-dlja-wi-fi/) для wlan0 не дает результата, так как wlan0 не pci-карта на моем хосте.
#!/bin/sh
HWLINK=wlan0
IPVLAN=ipvlan0
TESTHOST=ya.ru
# ------------
# test if interface already exists
# ------------
if ip link show | grep "$IPVLAN@$HWLINK" > /dev/null
then
echo "Link $MACVLN already exists on $HWLINK."
exit
fi
# ------------
# wait for network availability
# ------------
while ! ping -q -c 1 $TESTHOST > /dev/null
do
echo "$0: Cannot ping $TESTHOST, waiting another 5 seconds."
sleep 5
done
# ------------
# get network config
# ------------
IP=$(ip a sh wlan0 | grep -oE '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' | head -1)
NETWORK=$(ip -o route | grep $HWLINK | grep -v default | awk '{print $1}')
GATEWAY=$(ip -o route | grep default | awk '{print $3}')
# ------------
# setting up $MACVLN interface
# ------------
ip link add $IPVLAN link $HWLINK type ipvlan mode l2
ip address add $IP dev $MACVLN
ip link set dev $IPVLAN up
# ------------
# routing table
# ------------
# empty routes
ip route flush dev $HWLINK
ip route flush dev $IPVLAN
# add routes
ip route add $NETWORK dev $IPVLAN metric 0
# add the default gateway
ip route add default via $GATEWAY
ip a sh ipvlan0
4: ipvlan0@wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether b8:27:eb:a9:fb:8f brd ff:ff:ff:ff:ff:ff
inet 192.168.1.22/24 brd 192.168.1.255 scope global noprefixroute ipvlan0
valid_lft forever preferred_lft forever
inet6 fe80::e698:b2cb:334:265f/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::b827:eb00:1a9:fb8f/64 scope link
valid_lft forever preferred_lft forever
Ответы (2 шт):
Первая ошибка это - wlan не может бытьбриджом. создайте бридж и добавьте в него wlan.
Но тут возникнет проблема в том что на wlan в режиме sta можно передавать только один мак адрес. Тут или перевести в режим station wds или инкапсулировать мак в мак или в ip туннель.
Не советую делать бриджи и маквлан на вайфай. Но если карточка умеет wds, то шансы есть. Но почему-то эту технологию используют реже и реже. В современных репитерах ставят псевдобридж с проксиарп.
Для ipvlan понадобится proxyarp, если нет возможности настроить маршрутизацию на роутере. Если проксиарп не работает, то на роутере добавьте маршрут ип_гостя через ип_хоста.
Гостевые ИП лучше выделить в отдельную подсеть, тогда проксиарп уже не понадобится вовсе.
Я оставлю этот ответ больше как заметку. Так как из-за возможных проблем описанных в предыдущем ответе я предлагаю более простое решение, которое не потребует заводить маршруты на маршрутизаторе. Для этого уйти от использования ipvlan, создать в KVM новый интерфейс virbr с маршрутизацией на wlan0, затем связать wlan0 и virbr командой sudo parprouted virbrN wlan0