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
또한 "오래된" 시절에는 항상 (우분투에서도) 보았지만 더 이상 사용되지 않는 것 같습니다.
답변1
enp0s31f6
로고를 표시 UP
하지만 표시하지 않음 RUNNING
: 이는 일반적으로 현재 유효한 링크가 없음을 의미합니다.
반면 존재 와 기호가 wlp0s20f3
동시에 존재한다 . 이름 접두사는 이것이 무선 인터페이스임을 나타냅니다. 이는 랩탑이라고 말하는 것과 같습니다. 접두사는 유선 인터페이스를 나타냅니다.UP
RUNNING
wl
en
따라서 인터페이스의 IP 주소 wlp0s20f3
(예: 192.168.0.23
)는 다른 물리적 호스트의 인바운드 SSH 연결에 사용됩니다.
인터페이스 docker0
이며 Docker 컨테이너 및/또는 해당 시스템에서 실행되는 가상 머신 간의 네트워크 연결을 용이하게 하는 데 사용됩니다. 다른 설정에 따라 컨테이너/VM이 호스트 운영 체제 virbr0
와 virbr1
만 통신하도록 허용하거나 NAT 기반 액세스를 허용할 수 있습니다. 이 물리적 호스트 외부에 있습니다. 정확한 목적을 이해하려면 iptables NAT 및 정방향 필터링 규칙(예: sudo iptables -Lvn -t NAT
iptables ) 을 조사해야 할 수도 있습니다 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 주소를 인쇄합니다. 물론아니요호스트 이름 확인에 따라 다릅니다.