MyTetra Share
Делитесь знаниями!
О чем говорит ошибка "RTNETLINK answers: File exists"
Время создания: 13.11.2019 09:45
Текстовые метки: linux, ip, сеть, rtnetlink, file, exists
Раздел: Компьютер - Linux - Сеть в Linux
Запись: xintrea/mytetra_syncro/master/base/1573627504ykvh81s2vg/text.html на raw.github.com

Бывает так, что при настройке сети в Linux, например при добавлении дополнительного IP-адреса для сетевого интерфейса, может появиться следующая ошибка:



$ ip addr add 192.168.1.95/24 dev enp5s0

RTNETLINK answers: File exists



Традиционно, текст ошибки указывает совершенно не на ту проблему, которая возникла на самом деле. При возникновении данной ошибки обычно рекомендуют перезагрузить компьютер или полностью сбросить конфигурацию сетевого интерфейса через команды:



$ ip addr flush dev enp5s0

$ ip route flush dev enp5s0



Предполагается, что некий загадочный конфигурирующий файл или файл устройства освободится и можно будет произвести настройку.


Так вот, вышеприведенные команды сработают только если все конфигурационные файлы написаны правильно. После выполнения данных команд еще рекомендуется потушить и поднять все интерфейсы командой:



$ ifdown --all && ifup --all



Однако этот способ может не сработать, если в конфигурационных файлах сети есть какие-нибудь неочевидные ошибки, или сама выполняемая команда конфликтует с конфигурационными файлами. Например, можно внимательнее посмотреть на исходную команду, и понять, что в ней может быть не так. Вроде бы все в порядке? Да! Но что если посмотреть на выхлоп:



# ip addr show

2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP>

link/ether ... brd ff:ff:ff:ff:ff:ff

inet 192.168.1.95/24 brd 192.168.1.255 scope global enp5s0

valid_lft forever preferred_lft forever



Оказывается, такой IP с такой маской уже существует. По запарке можно было этого и не заметить. То есть, проблема оказалась в неправильном применении команды.



По непроверенной информации, RTNETLINK расшифровывается как ROUTE NETWORK LINK (иногда используется наименование NETLINK_ROUTE), и под этим "объектом" подразумевается сокет маршрутизации IPv4. Соответственно, если сокет уже существует, а пользователь пытается своей командой косвенно создать такой же сокет, то будет появляеться вышеуказанная ошибка. Так же, подобная ошибка будет появляться, если есть какие-то неполадки в настройках маршрутизации.



Однако, данная ошибка может возникнуть даже, если все конфиги написаны правильно. Эта ситуация часто возникает просто после того, как в файл /etc/network/interfaces (для Debian-подобных дистрибутивов) были внесены изменения, и пользователь хочет применить новые сетевые настройки. В этом случае, можно воспользоваться методом, написанном в статье:



Как перечитать (перезагрузить) настройки сетевого интерфейса в Debian?



Ждем, когда команда ip станет более интеллектуальной, и будет точно говорить в чем проблема, чтобы можно было ее быстро решить.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования