Summary: | Неверно сохраняется маска подсети из веб-интерфейса PVE | ||
---|---|---|---|
Product: | Альт Сервер Виртуализации | Reporter: | Kot_Uchoniy <yosho1> |
Component: | Ошибки работы | Assignee: | Alexey Shabalin <shaba> |
Status: | CLOSED FIXED | QA Contact: | Alexey Shabalin <shaba> |
Severity: | normal | ||
Priority: | P5 | CC: | andy, shaba, shrek |
Version: | 9.0 | ||
Hardware: | x86_64 | ||
OS: | Linux | ||
Attachments: |
Description
Kot_Uchoniy
2020-07-27 14:24:15 MSK
В функции __read_ipv4address_into() netmask через вызов __unwrap_netmask4() превращается из "/26" в "255.255.255.192" и перезаписывается в таком виде, при повторном вызове __unwrap_netmask4("255.255.255.192") превращает маску в "255.255.255.255", т.к. считает, что получила на входе 255, а проверок на допустимые значения там никаких нет: sub __unwrap_netmask4 { my $in=shift; my @out; while (@out<4) { if ($in>8) { push @out, '255'; $in -= 8; print "DEBUG: in=$in\n"; } else { push @out, $nm4prefix{$in}; $in = 0; } } return join('.',@out); } а после коммита 4507a5e5268f924be6627a5df8a161f7921d9243 функция __interface_to_etcnet() использует netmask без изменений (до этого netmask конвертировалась из "255.255.255.192" в "/26"). Т.е. имеет место быть интерференция старой ошибки (или неопределённого поведения) и новой фичи. Наверное, можно исправить функцию __unwrap_netmask4() так, чтобы она возвращала строку netmask без изменения, если там /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/. Тогда маска будет всегда в длинном формате. Вопрос: это именно то поведение, которое задумывалось для указанного коммита? Created attachment 8885 [details]
__unwrap_netmask4(): не конвертировать маску в формате A.B.C.D
(Ответ для Kot_Uchoniy на комментарий #0) > Если в /etc/net/ifaces/eth0/ipv4address маска подсети указана в виде > 192.168.1.1/255.255.255.192 В etcnet нельзя так указывать маску. В web интерфейсе у pve тоже маска указывается как CIDR (/24) Откуда берется такой вид маски? (In reply to Alexey Shabalin from comment #3) > (Ответ для Kot_Uchoniy на комментарий #0) > > Если в /etc/net/ifaces/eth0/ipv4address маска подсети указана в виде > > 192.168.1.1/255.255.255.192 > > В etcnet нельзя так указывать маску. В web интерфейсе у pve тоже маска > указывается как CIDR (/24) > Откуда берется такой вид маски? Берется при перезапуске pve-cluster. Во время перезапуска этого сервиса судя по всему обновляется настройка сети для PVE и правятся настройки etcnet. И вот как раз в этот момент маска в /etc/net/ifaces/eth0/ipv4address сохраняется в таком виде. И даже больше скажу, etcnet с маской такого вида у меня работал. читайте документацию к etcnet и проблем не будет (Ответ для Valery Inozemtsev на комментарий #5) > читайте документацию к etcnet и проблем не будет Валера, а что мешает применить выше указанный патч для исправления? Хотелось бы исправить ошибку и иметь возможность настраивать сеть из web-интерфейса PVE, а не закрывать глаза и отправлять читать доку по etcnet. это проявляется только в том случае если неправильно указать маску в etcnet (Ответ для Valery Inozemtsev на комментарий #7) > это проявляется только в том случае если неправильно указать маску в etcnet При чем тут документация от etcnet, если веб-интерфейс неправильно сохраняет маску? Могу тогда порекомендовать читать доки тем, кто прорабатывал сохранение настроек PVE в etcnet. С Вашим решением не согласен, прочитайте первый коммендарий, там все описано Created attachment 8907 [details]
etcnet-to-network: принимать маску сети в длинном формате
Различать формат маски сети в /etc/net/ifaces/XX/ipv4address, в PVE /etc/network/interfaces пишется в длинном формате, как и раньше. В интерфейсе PVE можно ввести только CIDR формат.
Created attachment 8908 [details]
pve-common: принимать маску сети из etcnet в любом формате (компактная версия)
Более короткая версия. Чтобы не потерялось.
Ошибка больше не наблюдается после выхода релиза 9.1 |