Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.24 0.0.0.0 255.255.255.252 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
0.0.0.0 192.168.1.25 0.0.0.0 UG 0 0 0 eth0
Linux 라우팅이 어떻게 작동하는지 알고 싶습니다.
패킷은 장치/인터페이스로 들어오고 나갑니다. 이 경우에는 eth0
, eth1
. eth2
따라서 IP 패킷은 이러한 장치 및 다른 장치 tun
(예:
IP 패킷이 도착했다고 가정해 보겠습니다 eth1
. IP 소스: 192.168.1.1, IP 대상: 199.178.167.431. 주소가 Genmask 외부에 있으므로 eth1
Linux는 기본 게이트웨이를 통해 주소를 보내려고 시도합니다.
IP 패킷이 도착했다고 가정해 보겠습니다 eth1
. IP 소스: 192.168.1.1, IP 대상: 192.168.1.2. 이 주소가 genmask에 있으므로 eth1
Linux는 이 패킷을 어디로 보낼까요? 어떤 장치에서?
IP 패킷이 도착했다고 가정해 보겠습니다 eth0
. 두 개의 항목이 있는데 eth0
Linux는 이 패킷을 라우팅하는 데 어느 항목을 사용합니까? 또한 이 패킷의 소스와 목적지가 무엇인지 알 수 없습니다. 누구든지 예를 들어 줄 수 있습니까?
답변1
먼저 TCP/IP와 라우팅 테이블에 대한 기본 내용을 읽어보시길 권합니다.
IP 패킷이 eth1에 도착했다고 가정합니다. IP 소스: 192.168.1.1, IP 대상: 199.178.167.431. 주소가 eth1의 Genmask 외부에 있으므로 Linux는 기본 게이트웨이를 통해 주소를 보내려고 합니다.
대상 IP가 인터페이스 정의와 일치하지 않기 때문에 패킷이 삭제됩니다.
IP 패킷이 eth1에 도착했다고 가정합니다. IP 소스: 192.168.1.1, IP 대상: 192.168.1.2. 이 주소가 eth1의 젠마스크에 있으므로 Linux는 이 패킷을 어디로 보낼까요? 어떤 장치에서?
대상 IP가 인터페이스 정의와 일치하지 않기 때문에 패킷이 삭제됩니다.
IP 패킷이 eth0에 도착했다고 가정합니다. eth0 항목이 두 개 있는데, Linux는 이 패킷을 라우팅하는 데 어느 항목을 사용합니까? 또한 이 패킷의 소스와 목적지가 무엇인지 알 수 없습니다. 누구든지 예를 들어 줄 수 있습니까?
단 하나의 항목만이 인터페이스의 레이어 3 구성을 정의하므로( 192.168.1.24 0.0.0.0 255.255.255.252 U 0 0 0 eth0
) 모호함이 없습니다. 또한 기본 게이트웨이가 인터페이스의 로컬 IP 주소에 매핑되어 있지만 eth0
이는 다른 모든 경로가 실패할 때 사용되는 경로이므로 문제와 완전히 일치하지 않습니다.
라우팅 프로세스 중에 커널은 항상 보다 구체적인 경로 정의부터 덜 구체적인 경로 정의까지 일치시킵니다. 따라서 패킷이 전달될 예정이고 과 에 10.1.2.3
2개의 경로가 정의되어 있는 경우 패킷은 목적지와 일치하는 가장 구체적인 경로이기 때문에 이를 통해 떠납니다.10.1.0.0/16
eth3
10.1.2.0/24
eth4
eth4
답변2
Linux에만 국한된 것이 아니며 단지 IP 라우팅 규칙일 뿐입니다.
나는 가장 간단한 사례인 eth1과 eth2부터 시작했습니다.
192.168.0.0
대상 및 netmask와 함께 eth1에 제공된 커널 라우팅 테이블을 사용하십시오 255.255.255.0
. 이는 eth1이 주소 1부터 254까지의 네트워크에 있음을 의미합니다. 192.168.0
네트워크의 각 컴퓨터는 주소 1부터 254까지를 가지며, 255는 특별한 의미를 갖습니다. 네트워크의 첫 번째 주소는 네트워크 주소이고 마지막 주소는 네트워크 주소입니다. 방송 주소. 따라서 모든 컴퓨터에는 완전한 주소 "네트워크 주소"가 있습니다. "컴퓨터 주소": 예를 들어 192.168.0.45 및 255.255.255.0 넷마스크는 192.168.0 네트워크의 컴퓨터 주소 45입니다. 이 인터페이스에 게이트웨이가 없으면 인터페이스는 이 형태의 IP 패킷만 허용합니다. 따라서 소스 IP 192.168.1.1에 대한 패킷 라우팅이 없습니다. 해당 주소는 192.168.0.0 네트워크에 없으며 IP 패킷이 삭제됩니다.
네트워크 주소가 192.168.25.0이라는 점을 제외하면 eth2와 동일합니다.
eth0에는 2개의 경로가 있습니다. 첫 번째(대상 192.168.1.24, 마스크 255.255.255.252, 게이트웨이 없음)는 로컬 네트워크용이고, 두 번째(대상 0.0.0.0, 마스크 0.0.0.0, 게이트웨이 192.168.1.25)는 "기본" 경로입니다. 이 경로는 "특정 패킷으로 무엇을 해야할지 모르는 경우 192.168.1.25를 통해 보내십시오"를 의미합니다. 네트워크 마스크는 255.255.255.252입니다. 252는 바이너리 11111100입니다. 이 네트워크에는 4개의 주소가 있습니다: 192.168.1.24(네트워크 주소), 192.168.1.25(게이트웨이 주소, 라우팅 테이블에서 확인), 192.168.1.26(유휴 주소), 192.168.1.27(브로드캐스트 주소) . eth0의 IP 주소가 192.168.1.26이라고 추측하는 것은 어렵지 않습니다.
어쨌든, 이 경로는 내부적으로 "이 패킷을 어디로 보내나요?"라는 질문에 대답하는 데 사용됩니다. 커널에 라우팅이 활성화되어 있다고 가정하면( /proc/sys/net/ipv4/ip_forward
1로 설정) 다음과 같은 다양한 시나리오를 볼 수 있습니다.
- 소스 IP가 있는 패킷이
192.168.1.1
eth1(네트워크 192.168.0.0)에 도착합니다. - IP 소스가 있는 패킷은
192.168.0.45
IP 대상이 있는 eth1(네트워크 192.168.0.0)에 도착합니다192.168.25.32
. 패킷은 커널에 의해 승인되고 라우팅 테이블에 따라 eth2를 통해 출력됩니다. - IP 소스가 있는 패킷은
192.168.0.45
IP 대상이 있는 eth1(네트워크 192.168.0.0)에 도착합니다97.67.25.49
. 패킷은 커널에 의해 승인되지만 커널은 이 특정 네트워크에 대해 알지 못하며 라우팅 테이블에 따라 eth0을 통해 192.168.1.25(게이트웨이)에 대한 IP 패킷을 보냅니다. - IP 소스가 있는 패킷은
192.168.0.45
IP 대상이 있는 eth1(네트워크 192.168.0.0)에 도착합니다192.168.1.1
. 패킷은 커널에 의해 승인되지만 커널은 이 특정 네트워크에 대해 알지 못하고(그는 192.168.1.1을 포함하지 않는 192.168.1.24/30에 대해 알고 있음) 라우팅 테이블에 따라 192.168.1.25(게이트웨이)를 보냅니다. ) eth0을 통한 IP 패킷.
답변3
패킷 라우팅은 패킷이 들어오는 인터페이스에 따라 달라지지 않습니다(적어도 일반적인 "비고급" 라우팅을 사용하지 않음). 패킷은 호스트의 프로세스에 의해 생성되었을 수 있으며, 이 경우 패킷은 네트워크에서 전혀 수신되지 않습니다. 라우터 역할을 하는 호스트만 패킷을 전달합니다. 즉, 수신 패킷이 목적지가 아닌 경우 다시 보냅니다. 서버와 워크스테이션은 종종 전달이 비활성화되어 있으며, 이 경우 목적지가 아닌 수신 패킷을 삭제합니다.
패킷이 로컬에서 생성되거나 전달되는지 여부에 관계없이 나가는 패킷은 동일한 방식으로 라우팅됩니다. 즉, 라우팅 테이블을 참조하고 최상의 경로("가장 긴 접두사 일치" 포함)가 선택됩니다. 대상 호스트가 직접 연결된 네트워크에 있으면 패킷은 대상 호스트로 직접 전송되고, 그렇지 않으면 패킷은 로컬 네트워크의 라우터로 전송됩니다. 라우터의 주소는 라우팅 테이블에서 일치하는 행의 "게이트웨이" 열에서 찾을 수 있습니다.
IP 패킷이 eth1에 도착했다고 가정합니다. IP 소스: 192.168.1.1, IP 대상: 199.178.167.431. 주소가 eth1의 Genmask 외부에 있으므로 Linux는 기본 게이트웨이를 통해 주소를 보내려고 합니다.
귀하의 예는 약간 인위적입니다. 실제 세계에서는 이 소스 주소를 가진 패킷이 eth1
인터페이스에 연결된 네트워크에 속하기 때문에 인터페이스에 들어 가지 않습니다 eth0
. 이런 일이 발생하면 뭔가 심각하게 잘못된 구성이 있는 것입니다. 이것이 패킷이 삭제되는 이유이기도 합니다.
들어오는 인터페이스(귀하의 예에서는)의 네트워크 넷마스크 eth1
도 패킷이 라우팅되는 방식에 영향을 주지 않으며 라우팅 테이블만 역할을 합니다. 일반적으로 말하면, "클래식" 라우팅에서 다음 홉의 선택은 패킷의 과거 기록(예: 패킷이 들어간 인터페이스(있는 경우))보다는 항상 예상을 기반으로 합니다.