Я пытаюсь найти информацию о том, почему имя сетевого интерфейса содержит символ at, но в результатах, которые я получаю, слишком много шума (мне не хватает правильной терминологии для поиска).
У меня есть контейнер LXC на хосте Ubuntu. Внутри контейнера я запускаю и получаю:
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:16:3e:37:a0:7a brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.0.3.195/24 brd 10.0.3.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fe37:a07a/64 scope link
valid_lft forever preferred_lft forever
Обратите внимание, чтоeth0@if10
Как называется эта @
часть/к чему она относится?
На хосте такого нет if10
, но у другого контейнера, который у меня есть, есть eth0@if8
... Я должен предположить, что это часть обработки сетевых трансляций LXC/контейнерами, но я раньше не замечал этого и интересно, является ли это дополнением к мостовому соединению, которое может существовать в других сценариях?
решение1
eth0@if10
означает:
- Ваш сетевой интерфейс по-прежнему имеет простое имя,
eth0
и сетевые инструменты и приложения могут ссылаться только на это имя, без добавления @. (Кстати, это, скорее всего, одноранговый узел veth, но имя не обязательно должно это отражать.) @if10
означает:eth0
подключен к некоторому (другому) сетевому интерфейсу с индексом 10 (десятичный). Поскольку также показанlink-netnsid 0
, этот другой сетевой интерфейс находится в другом сетевом пространстве имен (вид виртуального стека IP), предположительно, корневом (также известном как хост) сетевом пространстве имен.
Если вы используете ip link show
в своем хосте, а не в своем контейнере, то один из сетевых интерфейсов, перечисленных там, должен иметь приложение @9
; имя интерфейса, вероятно, будет начинаться с veth...
. Этот интерфейс является одноранговым для eth0@10
интерфейса, о котором вы спрашивали. Интерфейсы Veth поставляются парами, соединенными друг с другом, как виртуальный кабель.
Итак, @...
это приложение, созданное инструментом ip
, и оно не является частью имен сетевых интерфейсов Linux. Число после @ относится к другому сетевому интерфейсу с индексным номером, который отображается после @. Индексные номера печатаются перед именами сетевых интерфейсов, например, в 9: eth0@if10
. Интерфейс одноранговой сети может находиться в другом сетевом пространстве имен.
К сожалению, поиск правильного сетевого пространства имен для link-netnsid ..
довольно сложен, см.как найти сетевое пространство имен veth peer ifindex.
ОБНОВЛЕНИЕ 2023:Siemens теперь выпустилаEdgesharkкак OSS, которая предоставляет удобный графический веб-интерфейс, отображающий взаимосвязи сетевых интерфейсов в контейнерах, хосте и т. д.
решение2
Проверьте наличие файла типа 70-persistent-net.rules в /etc/udev/rules.d или в /lib/udev/rules.d. Там должна быть строка с именем сетевого интерфейса и MAC-адресом. Изменение этого и перезагрузка должны переименовать NIC.