运行 20.04 我试图找出我的笔记本电脑上的 LAN IP。如果我跑步,ifconfig
我会得到(精简):
$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
...
enp0s31f6: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
...
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
...
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
...
virbr1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.39.1 netmask 255.255.255.0 broadcast 192.168.39.255
...
wlp0s20f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.23 netmask 255.255.255.0 broadcast 192.168.0.255
...
以上哪一个是我的 IP - 例如,当我从 LAN 上的另一台 PC 通过 SSH 连接到这台笔记本电脑时,我会使用哪个 IP?
同样在“旧”时代我总是寻找eth0
(也在ubuntu上)但似乎不再使用:
答案1
enp0s31f6
显示标志UP
但不显示RUNNING
:这通常意味着它目前没有有效的链接。
另一方面,wlp0s20f3
同时存在UP
和RUNNING
标志。名称前缀wl
表明这是一个无线接口,正如您所说的这是一台笔记本电脑,这是有道理的。前缀en
表示有线接口。
因此,接口的 IP 地址wlp0s20f3
(即192.168.0.23
)将用于来自其他物理主机的入站 SSH 连接。
接口docker0
、virbr0
和virbr1
用于促进在该系统上运行的 Docker 容器和/或虚拟机之间的网络连接:根据其他设置,它们可能允许容器/VM 仅与主机操作系统通信,或者它们可能允许基于 NAT 的访问在此物理主机之外。要了解它们的确切用途,可能有必要研究 iptables NAT 和转发过滤规则(即sudo iptables -Lvn -t NAT
和sudo iptables -Lvn
)。
如果您的笔记本电脑的固件中嵌入了适当的数据记录,则其集成有线网络接口应标识为eno1
,无线网络接口应标识为wlo1
。但显然你的笔记本电脑的固件不包含这些记录。如果您愿意,您可以通过创建两个简单的文件来更改接口名称/etc/systemd/network/*.link
。
首先,您需要使用例如sudo udevadm info -q all -p /sys/class/net/enp0s31f6 | grep -e ID_NET_NAME -e ID_PATH
来识别硬件路径和自动检测到的网络接口候选名称。输出可能如下所示:
# udevadm info -q all -p /sys/class/net/enp0s31f6 | grep -e ID_NET_NAME -e ID_PATH
E: ID_NET_NAME_MAC=enx0123456789ab
E: ID_NET_NAME_ONBOARD=eno1
E: ID_NET_NAME_PATH=enp0s31f6
E: ID_PATH=pci-0000:00:1f.6
E: ID_PATH_TAG=pci-0000_00_1f_6
E: ID_NET_NAME=enp0s31f6
如果ID_NET_NAME_ONBOARD
没有出现该行,则确认您的系统固件未正确地将网络接口识别为板载接口。您可能希望通过重命名接口以使用理想情况下分配给它们的名称来解决此问题。要重命名此接口,您需要记下该ID_PATH=
行,并使用它来编写配置文件,例如/etc/systemd/network/70-eno1.link
包含以下内容:
[Match]
Path=pci-0000:00:1f.6
[Link]
Name=eno1 #or whatever you want
无线接口也是如此。
Name=
您还可以使用NamePolicy=
设置来选择任何预先生成的ID_NET_NAME_*
候选者,或者设置选择预先生成的名称的优先顺序,而不是设置显式。请参阅man 5 systemd.link
了解更多详情。
创建这些文件后,您应该更新 initramfs ( sudo update-inintramfs -u
) 并重新启动。重新启动后,您应该会找到具有您选择的名称的接口。
请注意,这enp0s31f6
是一个基于 PCI 设备路径的名称:它表示它引用 PCI 设备00:1f.6
为 31 = 0x1f。同样,wlp0s20f3
将是 PCI 设备00:14.3
(20 = 0x14)。
答案2
除其他外,您可以使用该hostname
命令来实现此目的。这里有两个选项可以帮助您:
hostname -i
或hostname --ip-address
:只有当主机名可以解析时这才有效(如果您使用主机名 ssh 进入该主机,这可能是一件好事)。请注意,下面的下一个选项是首选。
hostname -I
或hostname --all-ip-addresses
:这将打印主机的所有 IP 地址。确实如此不是取决于主机名解析。