![인터페이스 범위(글로벌 대 링크)의 목적은 무엇입니까?](https://linux55.com/image/52529/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EB%B2%94%EC%9C%84(%EA%B8%80%EB%A1%9C%EB%B2%8C%20%EB%8C%80%20%EB%A7%81%ED%81%AC)%EC%9D%98%20%EB%AA%A9%EC%A0%81%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
라우팅 테이블 항목에는 속성이 있습니다 scope
. global
에서 으로(또는 그 반대로) 변경이 link
네트워크 시스템에 어떤 영향을 미치는지 알고 싶습니다 .
답변1
NIC 설정에 3개의 서로 다른 IP 범위가 있다고 가정해 보겠습니다.
14: ens160: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 36:ee:4c:d0:90:3a brd ff:ff:ff:ff:ff:ff
inet 172.22.0.1/24 scope host ens160
inet 172.21.0.1/24 scope link ens160
inet 172.20.0.1/24 scope global ens160
라우팅 테이블에 ens160 경로가 있다고 가정합니다.
172.20.0.0/24 dev ens160 proto kernel scope link src 172.20.0.1
보시다시피 NIC 및 라우팅에 범위 설정이 있습니다.
경로가 src를 지정하는 경우 이 경우 Linux는 경로 및 NIC 설정의 범위 설정을 완전히 무시합니다. 그것은 그것을 완전히 무시합니다. 그리고 리눅스는 NIC에서 나가는 패킷에 src ip=172.20.0.1을 사용합니다.
다른 경로가 있다고 가정해 보겠습니다.
4.4.4.4 scope link
src ip가 경로에 지정되지 않은 경우 Linux는 경로의 범위를 확인합니다. 우리의 경우 범위 = 링크입니다. 그런 다음 Linux는 NIC 설정으로 이동하여 동일한 범위의 IP를 검색합니다. 이 예에서는 IP 범위 = 링크 = 172.21.0.1/24입니다.
따라서 dst ip = 4.4.4.4의 경우 Linux는 src ip = 172.21.0.1을 사용합니다.
경로에 범위가 지정되지 않으면 범위 = 전역을 의미합니다.
예
35.35.35.35 dev ens160
다음. 기본 경로를 살펴보겠습니다.
default via 172.16.102.1 dev ens160 onlink
범위를 지정하지 않습니다. 이는 범위 = 전역을 의미합니다.
기본 경로는 src를 지정하지 않기 때문에 이는 Linux가scope=global에서 ens160 IP를 검색하여 이를 src IP로 사용함을 의미합니다.
다음. 경로에 하나의 범위가 있고 NIC IP에 다른 범위가 있다고 가정합니다. 예
네트워크 카드
14: vasya2: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 36:ee:4c:d0:90:3a brd ff:ff:ff:ff:ff:ff
inet 172.22.0.1/24 scope host vasya2
경로
14.14.14.14 scope link
14.14.14.14 ping을 하면 무슨 일이 일어나는가?
경로에는 범위=링크가 있지만 NIC에는 범위=호스트인 IP만 있습니다. 중요한 점은 범위 = 호스트인 IP는 범위 = 호스트인 경로의 백엔드 역할만 할 수 있다는 것입니다. 다른 경우에는 Linux가 그러한 IP를 사용할 수 없습니다. 따라서 Linux는 src ip = 0.0.0.0을 dst ip 14.14.14.14로 사용합니다.
(실제로 네트워크 카드가 실제 물리적인지 가상인지 여부에 따라 달라집니다. 네트워크 카드가 가상이면 이 경우 Linux는
범위=글로벌인 다른 네트워크 카드의 다른 IP를 사용합니다)
일반 규칙: 경로가 src를 지정하지 않으면
- 범위=호스트인 IP는 범위=호스트인 경로의 백엔드 역할만 할 수 있습니다.
- 범위=링크인 IP는 범위=호스트 또는 범위=링크인 경로의 백엔드로만 사용할 수 있습니다.
- 범위=글로벌인 IP는 모든 범위의 경로에 대한 백엔드 역할만 할 수 있습니다.
이런 불편한 건축물에 많이 놀랐어요
이 모든 "범위 항목"을 잊어버리려면 라우팅 테이블의 경로에 있는 src 필드를 사용하세요.
답변2
route scope
다음의 정의를 살펴보겠습니다 Linux
.
The scope of a route in Linux is an indicator of the distance to the
destination network.
Host
A route has host scope when it leads to a destination address on the local host.
Link
A route has link scope when it leads to a destination address on the local network.
Universe
A route has universe scope when it leads to addresses more than one hop away.
따라서 경로의 범위를 변경하면 컴퓨터가 더 이상 해당 경로의 네트워크에 연결하지 못할 수도 있습니다. 라우터는 로컬 네트워크에 속한 대상으로 전송된 패킷을 전달하지 않습니다.
범위에는 라우팅할 수 없는(개인) 주소와 라우팅할 수 있는(공용) 주소 간의 차이가 반영되지 않습니다.
10.0.0.1(개인 - 라우팅 불가능) 및 8.8.8.8(공개 - 라우팅 가능) 모두 링크 또는 유니버스 범위를 지정할 수 있습니다. 시스템 관리자가 구성합니다.
답변3
범위는 소스 주소 선택에 영향을 미칩니다.
소스 주소가 아직 고정되지 않은 연결/연결의 경우(예: TCP 연결이 시작되지만 수신 패킷에 반응할 때는 시작되지 않음) 소스 주소는 패킷이 도달하려는 경로 범위에 따라 선택됩니다.
이것이 바로 주소에도 범위 속성이 있는 이유입니다.
소스 주소 선택이 발생하지 않는 예:들어오는 TCP 연결 시작 또는 핑 패킷은 반대 IP 주소(소스 → 대상, 대상 → 소스)로 응답됩니다. 그렇지 않으면 다른 호스트가 해당 패킷을 응답으로 인식하지 못합니다.
소스 주소 선택이 발생하는 예: ping xyz
또는 telnet xyz
. 일반 프로그램은 사용할 소스 주소를 운영 체제에 알려주지 않습니다(이는 좋은 습관입니다). 운영 체제는 하나를 선택하고 그렇게 할 준비를 해야 합니다. 경로에 대해 잠재적인 나가는 패킷을 테스트합니다(일반 라우팅은 대상 주소만 사용하며, 고급 라우팅을 사용하는 경우 패킷에는 아직 소스 주소가 없습니다!). . 결과 범위는 가능한 경우 나가는 인터페이스의 해당 범위에 있는 주소로 선택을 줄입니다.