저는 네트워킹에 대해 배우고 있으며 집에는 애플리케이션을 테스트하는 데 사용하는 두 개의 물리적 머신과 여러 개의 가상 머신이 있습니다. 각 머신에는 서로 다른 호스트 이름이 있으며 이를 각 /etc/hosts 파일 매핑에 수동으로 추가합니다.
홈 IP 주소(127.0.0.1)와 /etc/hosts에 있는 네트워크에서 제공하는 실제 IP 주소의 차이점이 무엇인지 알고 싶습니다.
예를 들어
내 IP 주소가 192.168.2.20이고 호스트 이름이 naruto라고 가정하면 내 /etc/hosts는 다음과 같습니다.
127.0.0.1 localhost
192.168.2.20 naruto
127.0.0.1 naruto
모든 라인은 동일한 시스템을 가리키고 있습니다. 주요 차이점은 프로그램이 루프백 장치를 사용하여 두 개와 네트워크 카드를 사용하여 각 라인에 연결하는 방식입니다. 제 질문은 이 행을 모두 가져야 합니까?입니다. 아니면 어떤 줄을 세워야 하나요? 각각의 용도는 무엇입니까?
나는 이것을 읽고 있다우편 엽서하지만 도움이 되지 않았고 더욱 혼란스러워졌습니다.
답변1
질문 1
홈 IP 주소(127.0.0.1)와 /etc/hosts에 있는 네트워크에서 제공하는 실제 IP 주소의 차이점이 무엇인지 알고 싶습니다.
127.0.0.1의 2가지 주요 기능:
- 컴퓨터 외부의 인터넷에서는 라우팅될 수 없습니다.
- IP 주소 127.0.0.1은 시스템의 이 인터페이스와 연결된 IP 주소 블록의 일부입니다.
예를 들어 루프백 인터페이스를 살펴보세요 lo
.
$ ip a l lo
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
IP 블록은 다음 줄로 설계되었습니다.
inet 127.0.0.1/8 scope host lo
이 /8
표기법에서 여기에 표시된 32비트 중 8비트는 네트워크 주소이고 나머지 비트(32-8 = 24)는 해당 컴퓨터에서 원하는 모든 주소를 지정하는 데 사용됩니다.
우리는 이것이 범위임을 스스로 확신할 수 있으며, 그 중 몇 개에 ping을 시도하면 모두 우리를 가리킵니다. ping
127.0.0.1, 127.0.0.2 및 127.0.0.3을 사용하겠습니다 .
$ ping -c2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.055 ms
$ ping -c2 127.0.0.2
PING 127.0.0.2 (127.0.0.2) 56(84) bytes of data.
64 bytes from 127.0.0.2: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 127.0.0.2: icmp_seq=2 ttl=64 time=0.052 ms
$ ping -c2 127.0.0.3
PING 127.0.0.3 (127.0.0.3) 56(84) bytes of data.
64 bytes from 127.0.0.3: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 127.0.0.3: icmp_seq=2 ttl=64 time=0.075 ms
노트:우리는 이 모든 것이 루프백 인터페이스를 통해 우리 자신에게 "핑"될 수 있음을 알 수 있습니다.
다음을 사용하여 traceroute
동일한 것을 보여줍니다 .
$ traceroute -n 127.0.0.1
traceroute to 127.0.0.1 (127.0.0.1), 30 hops max, 60 byte packets
1 127.0.0.1 0.032 ms 0.041 ms 0.010 ms
$ traceroute -n 127.0.0.2
traceroute to 127.0.0.2 (127.0.0.2), 30 hops max, 60 byte packets
1 127.0.0.2 0.033 ms 0.009 ms 0.008 ms
$ traceroute -n 127.0.0.3
traceroute to 127.0.0.3 (127.0.0.3), 30 hops max, 60 byte packets
1 127.0.0.3 0.034 ms 0.010 ms 0.008 ms
질문 2
제 질문은 이 행을 모두 가져야 합니까?입니다. 아니면 어떤 라인을 가져야 하나요? 각각의 용도는 무엇입니까?
내 제안은 시스템이 자동으로 할당하지 않는 한 127.0.0.1에 이름을 할당하지 않는 것입니다. 일반적으로 다음과 같은 유형의 항목을 볼 수 있습니다 /etc/hosts
.
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
시스템 호스트 이름에 추가 localhost 유형 IP를 할당하려면 127.0.0.2를 사용하고 기본 설정인 127.0.0.1을 그대로 둡니다.
한 단계 더 나아가 내 호스트에 할당된 실제 IP 주소에 대해 다음과 같이 할당하거나 /etc/hosts
DNS를 사용합니다.
192.168.2.20 naruto.mydom.com naruto
그러나 나는 두 개의 별도 행에 동일한 이름을 지정하지 않을 것입니다. /etc/hosts
파일이 첫 번째 항목에만 응답하고 두 번째 항목에는 도달하지 않기 때문에 이 방법은 결코 작동하지 않습니다 .
일회성 작업의 경우 /etc/hosts
로컬 작업을 사용하기 쉽습니다. 그러나 네트워크에서 이름-IP 매핑에 액세스할 수 있도록 하려면 DNS를 사용하고 /etc/hosts
로컬 IP/이름 확인 이외의 다른 방법을 사용하지 않는 것이 좋습니다.
답변2
배포판이 몇 년 전에 시작한 일 중 하나는 localhost에 127.0.0.1을 사용하고 호스트 이름으로 127.0.1.1을 사용하는 것입니다.
그래서...
/etc/hostname
존재한다-
naruto
/etc/hosts
존재한다-
127.0.0.1 localhost
127.0.1.1 naruto
그게 다야. (필요한 경우 IPv6 콘텐츠 추가) 어떤 이유로 DNS 항목을 가져올 수 없거나 일반적으로 DNS에서 찾을 수 있는 항목을 리디렉션하려는 경우에만 루프백이 아닌 IP를 /etc/hosts에 넣습니다.