我在 Odroid HC2 上运行 Armbian Buster。实际上,我的接口名称看起来像这样:enx001e0632c19d
foreth0
和wlx503eaa4a712a
for wlan0
。
我想不是使用预测接口名称改为获取 eth0 和 wlan0。
所以我在以下位置创建了 2 个文件/etc/systemd/network/
:
# ls -l /etc/systemd/network/
total 2
-rw-r--r-- 1 root root 54 Sep 2 00:32 10-eth.link
-rw-r--r-- 1 root root 55 Sep 2 00:32 10-wlan.link
这是 eth0 的内容:
# cat 10-eth.link
[Match]
MACAddress=00:1e:06:32:c1:9d
[Link]
Name=eth0
对于 wlan0 :
# cat 10-wlan.link
[Match]
MACAddress=50:3e:aa:4a:71:2a
[Link]
Name=wlan0
然后,我看到一个话题(为什么我的 systemd 链接文件被忽略?)我必须做的:
update-initramfs -u
然后我重新启动了。
但它仍然不起作用...
[编辑] systemd-networkd 服务未启用。所以我使用以下命令启用它:
systemctl enable systemd-networkd.service
然后我重新启动了。但它仍然无法正常工作,并且接口名称也没有更改为eth0
和wlan0
。
这是输出systemctl status systemd-networkd.service
:
# systemctl status systemd-networkd.service
* systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor
Active: active (running) since Mon 2019-09-02 00:59:54 UTC; 7min ago
Docs: man:systemd-networkd.service(8)
Main PID: 297 (systemd-network)
Status: "Processing requests..."
Memory: 2.3M
CGroup: /system.slice/systemd-networkd.service
`-297 /lib/systemd/systemd-networkd
Sep 02 00:59:54 ohc2 systemd[1]: Starting Network Service...
Sep 02 00:59:54 ohc2 systemd-networkd[297]: Enumeration completed
Sep 02 00:59:54 ohc2 systemd[1]: Started Network Service.
Sep 02 00:59:56 ohc2 systemd-networkd[297]: wlan0: Interface name change detecte
Sep 02 00:59:59 ohc2 systemd-networkd[297]: enx001e0632c19d: Gained carrier
Sep 02 01:00:01 ohc2 systemd-networkd[297]: enx001e0632c19d: Gained IPv6LL
它说wlan0: Interface name change detecte
但是当我跑步时ip addr
,没有任何改变:
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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
2: enx001e0632c19d: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:1e:06:32:c1:9d brd ff:ff:ff:ff:ff:ff
inet6 fe80::9b38:fe20:a87c:287/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlx503eaa4a712a: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 50:3e:aa:4a:71:2a brd ff:ff:ff:ff:ff:ff
谁能帮我 ?谢谢
答案1
对于一个接口,我遇到了完全相同的问题。如果有什么区别的话,那就是使用 asix 驱动程序的 USB 接口。
我的两个界面使用 .link 文件重命名,而这个则没有。仍然使用 udev 重命名的另一个(相同)设置成功重命名了所有三个接口。
Nov 23 22:12:16 xen17 vmunix: [ 7256.680568] asix 1-2:1.0 eth0: register 'asix' at usb-0000:00:14.0-2, ASIX AX88772 USB
2.0 Ethernet, 00:0e:c6:b2:fb:30
Nov 23 22:12:16 xen17 vmunix: [ 7256.680691] usbcore: registered new interface driver asix
Nov 23 22:12:16 xen17 vmunix: [ 7256.684159] systemd-udevd[6406]: Using default interface naming scheme 'v240'.
Nov 23 22:12:16 xen17 vmunix: [ 7256.688004] systemd-udevd[6406]: link_config: autonegotiation is unset or enabled, the
speed and duplex are not writable.
Nov 23 22:12:16 xen17 vmunix: [ 7256.688284] asix 1-2:1.0 enx000ec6b2fb30: renamed from eth0
但即使忽略 .link 文件,它也会得到错误的名称:
root@xen17:/var/log# udevadm test-builtin net_id /sys/class/net/enx000ec6b2fb30 2>/dev/null
ID_NET_NAMING_SCHEME=v240
ID_NET_NAME_MAC=enx000ec6b2fb30
ID_OUI_FROM_DATABASE=ASIX ELECTRONICS CORP.
ID_NET_NAME_PATH=enp0s20u2
应该被称为 enp0s20u2 因为 PATH 优先于 MAC
usbadm 测试表明它应该具有我的 .link 文件中的正确名称:
root@xen17:/var/log# udevadm test /sys/class/net/enx000ec6b2fb30 2>/dev/null
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/net/enx000ec6b2fb30
INTERFACE=enx000ec6b2fb30
IFINDEX=48
ACTION=add
SUBSYSTEM=net
ID_NET_NAMING_SCHEME=v240
ID_NET_NAME_MAC=enx000ec6b2fb30
ID_OUI_FROM_DATABASE=ASIX ELECTRONICS CORP.
ID_NET_NAME_PATH=enp0s20u2
ID_VENDOR=ASIX_Elec._Corp.
ID_VENDOR_ENC=ASIX\x20Elec.\x20Corp.
ID_VENDOR_ID=0b95
ID_MODEL=AX88772A
ID_MODEL_ENC=AX88772A
ID_MODEL_ID=7720
ID_REVISION=0001
ID_SERIAL=ASIX_Elec._Corp._AX88772A_000BAF
ID_SERIAL_SHORT=000BAF
ID_TYPE=generic
ID_BUS=usb
ID_USB_INTERFACES=:ffff00:
ID_USB_INTERFACE_NUM=00
ID_USB_DRIVER=asix
ID_USB_CLASS_FROM_DATABASE=Vendor Specific Class
ID_USB_SUBCLASS_FROM_DATABASE=Vendor Specific Subclass
ID_VENDOR_FROM_DATABASE=ASIX Electronics Corp.
ID_MODEL_FROM_DATABASE=AX88772
ID_PATH=pci-0000:00:14.0-usb-0:2:1.0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_0
ID_NET_DRIVER=asix
ID_NET_LINK_FILE=/etc/systemd/network/10-persistent-net-usblan2.link
ID_NET_NAME=usblan2
USEC_INITIALIZED=7256957740
run: 'bridge-network-interface'
run: 'ifupdown-hotplug'
幸运的是,我在桥接口中使用这个设备,所以我可以告诉它通过所有三个名称导入(两个显然会失败),所以如果有什么变化并且这在将来开始工作,我将不会挠头尝试找出发生了什么变化以及我的网络损坏的原因。
我发现了我的问题:
我使用的是 debian,有:
/lib/udev/rules.d/73-usb-net-by-mac.rules
这似乎优先于 systemd 规则。将整个文件注释掉,现在 .link 文件可以正常工作了。
所以我建议OP在某个地方寻找一个类似的udev规则来击败systemd命名。
我想我会认为这是一个错误。我只是从 udev 规则切换,因为我看到的文档说它们将在下一个稳定版本中消失。但如果您使用 USB 网络设备,则似乎无法轻松切换。
答案2
可以使用以下命令更改接口名称udev
:编辑/etc/udev/rules.d/70-persistent-net.rules:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1e:06:32:c1:9d", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="50:3e:aa:4a:71:2a", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="wlan0"
它可以工作,并且重新启动后,接口名称就改变了。
但我的问题没有解决。我仍然不知道为什么它不能与systemd-networkd
.
答案3
我遇到了类似的问题,这是由于 .link 规则被/etc/systemd/network
默认规则取代而引起的,/lib/systemd/network
根据该规则,不应出现这种情况文档。具体来说,99-default.link
正在取代我,所以我调用了我的文件98-something.link
,它按预期工作。