- Вопрос или проблема
- Вот мой файл interfaces в качестве примера:
- fom tooley
- Ответ или решение
- 1. Проверка файла конфигурации
- 2. Очистка состояния интерфейса
- 3. Отключение и повторное включение интерфейса
- 4. Проверка состояния интерфейса
- 5. Взаимодействие с /run/network/ifstate
- 6. Обратите внимание на маршрутизацию
- Заключение
Вопрос или проблема
Это содержимое моего файла /etc/network/interfaces
Единственный способ, при котором это вступает в силу, — это перезагрузка системы.
Я пытаюсь применить это вручную. Мои попытки ниже.
auto eth0
iface eth0 inet static
address 192.168.1.57
netmask 255.255.255.0
gateway 192.168.1.1
up ip addr add 192.168.0.57/24 dev eth0 label eth0:1
down ip addr del 192.168.0.57/24 dev eth0 label eth0:1
up ip route add 192.168.0.0/24 via 192.168.0.1 dev eth0:1 metric 20
down ip route del 192.168.0.0/24 via 192.168.0.1 dev eth0:1 metric 20
Сначала я попробовал запустить sudo ifup eth0
и вот что я получил:
RTNETLINK отвечает: Файл существует
Не удалось поднять eth0.
Файл /etc/network/interfaces
работает только когда я перезагружаю систему
Кроме этого, я пробовал
sudo /etc/init.d/networking restart
sudo service network-manager restart
sudo service networking restart
Но ни один из них не применяет изменения в файле interfaces
Единственный вариант был sudo ifup eth0
, который выдает указанную выше ошибку.
Что не так?
Отредактируйте ваш конфигурационный файл, чтобы убрать отступ перед разделом iface
, чтобы он выглядел так:
auto eth0
iface eth0 inet static
address 192.168.1.57
netmask 255.255.255.0
gateway 192.168.1.1
up ip addr add 192.168.0.57/24 dev eth0 label eth0:1
down ip addr del 192.168.0.57/24 dev eth0 label eth0:1
up ip route add 192.168.0.0/24 via 192.168.0.1 dev eth0:1 metric 20
down ip route del 192.168.0.0/24 via 192.168.0.1 dev eth0:1 metric 20
Сообщение, которое вы получаете, просто указывает на то, что интерфейс уже активен, так что вам нужно выполнить ifdown
перед тем, как выполнять ifup
. Однако будьте осторожны, если вы подключены через SSH — вы можете заблокировать себя. Вот как это сделать:
sudo ifdown eth0 && sudo ifup eth0
Обратите внимание, как эти две команды выполняются в одной строке. И просто для предосторожности убедитесь, что вы можете получить доступ к консоли сервера или перезагрузить сервер, если что-то пойдет не так.
Я только что столкнулся с этой проблемой, и ни одно из вышеупомянутых решений не сработало для меня. Я не мог изменить /run/network/ifstate
, потому что он немедленно сбрасывался в прежнее состояние. Также команда sudo ifdown eth0 && sudo ifup eth0
не работала.
Затем я нашел следующую команду:
sudo ip addr flush dev eth0
Это решило проблему.
Попробуйте найти /run/network/ifstate и измените его, добавив eth(n)=eth(0), если вы не видите желаемый eth там.
Например:
$ cat /run/network/ifstate
eth0=eth0
lo=lo
eth3=eth3
eth1=eth1
После этого используйте команду sudo ifdown eth(n)
, а затем sudo ifup eth(n)
.
Для всех остальных, кто оказался здесь, мне пришлось остановить все интерфейсы и мосты, а затем выгрузить модули, прежде чем ошибка RTNETLINK исчезла.
ifconfig eth0 down
ifconfig br0 down
rmmod e1000e # или какой-либо другой модуль, который использует ваш сетевой адаптер
modprobe e1000e
service networking start
или просто перезагрузить.
Я потратил день на решение этой проблемы с моим Pi. Я ничего не менял, только физически переместил устройство. Мой Pi подключен к Wi-Fi через WIFI-переходник Realtek RTL8188CUS. Да, я уже исправил проблемы с отключением с помощью некоторых параметров ядра, в основном “options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1” в файле /etc/modprobe.d/8192cu.conf. Но Pi все равно иногда отключался. Теперь, когда я переместил его, казалось, что он не может подключиться со статическим IP 192.168.1.60. Так в чем была проблема? Для меня “RTNETLINK файл существует” — это ошибка, установленная мной в какой-то момент в моем беспроводном маршрутизаторе. Я ввел запись DNS в маршрутизаторе для 192.168.1.60, но ошибочно с низким значением TTL. Вместо TTL=1200 у меня было TTL=12. Я удалил неправильную запись в маршрутизаторе, и Wi-Fi подключился после перезагрузки. Так что если вы играете со статическими маршрутами с Pi и маршрутизатором одновременно, будьте осторожны, вы можете установить что-то плохое в маршрутизатор. Это не всегда вина сети Pi.
Исправьте меня, если я ошибаюсь…
Но если вы настраиваете конфигурацию для ручного подключения, то почему вы используете:
auto eth0
?
auto = автоматически, а не вручную.
Просто уберите строчку auto из вашего файла interfaces и добавьте:
pre-up /sbin/ip link set eth0 up
post-down /sbin/ip link set eth0 down
и замените ваше устройство на eth0, и если у вас больше одного, добавьте 2 строки для каждого устройства.
ТАКЖЕ
Вы не можете дублировать шлюз
так что указывайте шлюз только один раз
ТАКЖЕ
вы не можете смешивать конфигурацию на одном и том же устройстве
поэтому если вы вручную настраиваете ваш ipv4, то ваш ipv6 для того же устройства также должен быть настроен вручную.
Вот мой файл interfaces в качестве примера:
# Этот файл описывает сетевые интерфейсы, доступные на вашей системе
# и как их активировать. Для получения дополнительной информации смотрите interfaces(5).
source /etc/network/interfaces.d/*
# Сетевой интерфейс loopback
auto lo
iface lo inet loopback
# Основной сетевой интерфейс
iface enp3s1f0 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 1.1.1.1 1.0.0.1
iface enp3s1f1 inet static
address 192.168.0.101
netmask 255.255.255.0
dns-nameservers 1.1.1.1 1.0.0.1
iface enp3s1f1 inet6 static
address 2600:6000:7a00:ab:123:1234:1234:abc
netmask 64
dns-nameservers 2606:4700:4700::1111 2606:4700:4700::1001
iface enp3s1f0 inet6 static
address 2600:6000:7a00:ab:123:1234:1234:abd
netmask 64
dns-nameservers 2606:4700:4700::1111 2606:4700:4700::1001
pre-up /sbin/ip link set enp3s1f0 up
pre-up /sbin/ip link set enp3s1f1 up
post-down /sbin/ip link set enp3s1f0 down
post-down /sbin/ip link set enp3s1f1 down
fom tooley
Я пробовал AntiX Linux с двумя сетевыми картами. NIC eth0 был подключен к Интернету, а eth1 — к локальной подсети. Если оба NIC были активны, маршрутизация останавливалась через примерно 30 секунд, и я терял соединение с Интернетом.
После многих попыток я выяснил с помощью Wireshark, что какой-то старый адрес для eth1 был застрял в конфигурации, и eth0 начинал отправлять запросы по этому адресу на шлюз по умолчанию. Это по какой-то странной причине останавливало маршрутизацию из и в сеть.
Проблема была решена с помощью этой команды, найденной на этой веб-странице:
sudo ip addr flush dev eth0
Я снова включил сетевые карты после выполнения этой команды, и проблема исчезла.
Ответ или решение
Проблема с сообщением "RTNETLINK answers: File exists" обычно возникает, когда вы пытаетесь настроить сетевой интерфейс, который уже активен или имеет конфликты в маршрутизации. Вот несколько шагов, которые помогут вам решить эту проблему на основе вашего файла конфигурации /etc/network/interfaces
.
1. Проверка файла конфигурации
Вы упомянули, что в вашем файле /etc/network/interfaces
настроены статические IP-адреса и маршруты. Убедитесь, что отступы и структура файла правильные. Проверьте, чтобы конфигурация выглядела следующим образом:
auto eth0
iface eth0 inet static
address 192.168.1.57
netmask 255.255.255.0
gateway 192.168.1.1
up ip addr add 192.168.0.57/24 dev eth0 label eth0:1
down ip addr del 192.168.0.57/24 dev eth0 label eth0:1
up ip route add 192.168.0.0/24 via 192.168.0.1 dev eth0:1 metric 20
down ip route del 192.168.0.0/24 via 192.168.0.1 dev eth0:1 metric 20
Обратите внимание, что в первой строке есть auto eth0
, который указывает на автоматическую активацию интерфейса при загрузке. Любые интерфейсы, указанные как auto
, будут автоматически подняты и могут вызывать конфликт, если вы вручную попытаетесь активировать их с помощью ifup
.
2. Очистка состояния интерфейса
Проблема может заключаться в том, что интерфейс уже активен или имеет существующие конфигурации. Прежде чем выполнять ifup eth0
, используйте следующую команду, чтобы сбросить интерфейс:
sudo ip addr flush dev eth0
Эта команда удалит все IP-адреса, назначенные интерфейсу, после чего вы снова сможете его активировать.
3. Отключение и повторное включение интерфейса
Если предыдущая команда не помогла, попробуйте выполнить последовательное отключение и повторное включение интерфейса:
sudo ifdown eth0 && sudo ifup eth0
Если вы подключены к серверу по SSH, это может привести к разрыву соединения, поэтому убедитесь, что у вас есть физический доступ к серверу для его перезагрузки в случае необходимости.
4. Проверка состояния интерфейса
Вы можете проверить текущее состояние интерфейса с помощью команды:
ip addr show eth0
Эта команда покажет вам, какие IP-адреса настроены и активно ли подключение.
5. Взаимодействие с /run/network/ifstate
Если проблема сохраняется, вы можете проверить файл /run/network/ifstate
, который используется для отслеживания состояний интерфейсов. Убедитесь, что там правильно прописан ваш интерфейс. Если интерфейс "завис" в состоянии, вы можете вручную редактором удалить соответствующие линии или использовать:
sudo ifdown eth0
6. Обратите внимание на маршрутизацию
Убедитесь, что не указаны конфликтующие маршруты. Если у вас есть дублирующиеся маршруты или шлюзы, это может также привести к ошибкам.
Заключение
Если все вышеперечисленное не помогло, попробуйте перезагрузить систему, а затем снова активировать интерфейс. Иногда простой перезапуск может решить проблему с сетевыми настройками.
Таким образом, следуя этим рекомендациям, вы сможете устранить проблему "RTNETLINK answers: File exists" и правильно настроить сетевой интерфейс на вашем устройстве.