LINUXTALKS.CO

Последовательная генерация мак-адресов для qemu

 ,

L


0

1

Планирую скрипт написать, который ведёт локальную БД с мак-адресами qemu.

Когда запускаешь qemu, у виртуалки мак 52:54:00:12:34:56, и соотвественно виртуалки с одинаковыми маками в одном бридже конфликтуют не работают.

И например, когда запускаешь qemu с display vnc, оно тут умеет автоматически подбирать порт, начиная с 5900 порта, оно слушает VNC и когда запускаешь новые qemu, оно автоматически слушает первый свободный порт 5901, 5902 и т.д.

А вот с мак-адресами так делать не умеет, поэтому нужна баш-портянка, которая будет вести базу данных запущенных qemu и каждой новой qemu автоматически присваивать новый мак адрес с инкрементом, чтобы было 52:54:00:00:00:01, 52:54:00:00:00:02 и так далее. И когда qemu грохается, скрипт сам бы эту запись из базы удалял и освобождал для использования другим вм.

Кстати интересное наблюдение, у qemu официальный диапазон мак-адресов 52:54:00:, соотвественно 3 байта свободные, и эти 3 байта идеально вписываются в картину мира, как если использовать подсеть 10.0.0.0/8 на всю котлету.

Идеально, запускать виртуалки в подсети 10.0.0.0/8 начиная с 10.0.0.1 и маком 52:54:00:00:00:01 и заканчивая 10.255.255.254 и маком 52:54:00:FF:FF:FE

Это сколько виртуалок можно на одном хосте запустить? 255^3?

255^3 = 16581375 виртуалок на хосте, даже если запускать каждую виртуалку с дефолтными 64мб памяти, с которыми qemu стартует по-умолчанию, на это потребуется 255^3 * 64 = 1061208000 мб памяти, или 1012.04681396 гб или 1 петабайт памяти!!!

Я нигде не просчитался?

Сейчас я буду запускать 255 виртуалок на локалхосте 10.0.0.1/24, 32гб памяти всего потребуется.

★★★★★★

#!/bin/sh

find_next_tap () {
	i="0"
	while true; do
		i="$(($i + 1))"
		if test -e "/sys/class/net/tap$i"; then
			continue
		fi
		echo "$i"
		return 0
	done
}

main () {

	next_tap="$(find_next_tap)"
	next_mac="525600$(printf '%06x' $next_tap)"

	echo "tap$next_tap"
	echo "$next_mac" | sed 's/../&:/g;s/:$//'

}

main "$@"```
Spoofing    
★★★★★★
Linux / Firefox