error on gate ip - multiple interface match
그림을 보면, 민트색 칸에 OK와 KO가 섞여 있다.
현재 Goal 4~7이 안되고 있는 상황이다.
Goal 6,7은 foward way 보내는 것 자체가 안되고(H3-> internet) (H4->internet)
Goal 4,5는 reverse way로 돌아오는 경로가 되지 않고 있다. (H1 -> H4, H2->H3)
: H3, H4쪽에 문제가 있는 것으로 유추할 수 있다.
지금부터 돌아가는 상황을 제대로 파악하면서 문제가 뭔지 알아내려고 한다.
Goal 5가 안되는 문제를 살펴보자.
H2 : Host two가 Host three(H3) 와 통신하는 과정이다.
목표: H2->H3
1~6 : H2에서 모든 입력에 대해 165.236.55.1 로 보내도록 했으므로, interface R11으로 들어가 R1으로 packet이 보내진다.
7 : switch 는 모든 곳으로 다 패킷을 보내므로 보내고, H1이 16줄에서 받으나 not for me 라고 하고 처리하지 않고 폐기한다.
8~12 : 라우터1(R1)에서 라우터2(R2)로 interface R13을 통해서 패킷을 보낸다.
15: 무사히 H3에 도착했다.
18~ : reverse way: H3- >H2 : 응답을 보내는 과정이다.
목표 : H3->H2
19~23: H3에서 ingerface H31을 통해 라우터2 (R2)에 패킷을 보낸다.
26,27 : 라우터2에서 R21 interface를 통해 packet을 보내고 R1이 받는다.
28 : R1이 R11 인터페이스로 패킷을 보낸다.
29 : 스위치가 모두 보내서 패킷이 H1, H2에 도달하고, H1은 packet not for me로 폐기하고, H2는 packet accepted로 받는다.
33~ : 29에서 H2가 받고 종료되면 좋았을 텐데 라우터2에서 또다시 R22로 패킷을 보내버린다.
36: 그리고 오류 등장: error on gate ip - multiple interface match !!!
-> 라우터 2에서 R21 인터페이스로 (26줄)보내서 H2를 보내고 여기서 끝나야함에도 불구하고
또 R22 인퍼페이스로(33줄) 패킷을 보낸다.
-> 즉 두 인터페이스 간의 서브넷이 구별이 안되고 있는 문제다.
왜 이런 문제가 생길까?
해당 네트워크 망에서 구분되어야 하는 서브넷은 4개이다. 그걸 크게 표현해보면 다음과 같다.
1. 인터넷 연결망의 라우팅 테이블이 하나이므로, 여기에 인터넷과 연결되는 모든 IP주소는 하나의 ip주소로 표현할 수 있어야 한다.
2. 이미 정해진 값(회색 글자)에서 H2의 라우팅 테이블을 보면 165.236.55.1이다. 즉 R11의 IP주소와 같고,
서브넷1은 ip 주소가 165.236.55.X인 꼴임을 알 수 있다.
이 때 subnet Mask 가 255.255.255.128이라서 165.236.55.0 ~ 165.236.55.127의 IP주소를 모두 가져간다.
3. 서브넷 2도 H4의 라우팅 테이블이 165.236.55.129로 고정되어있으므로, R3의 IP주소가 165.236.55.129임을 알 수 있고,
서브넷 2의 IP주소는 자동으로 지정되는데 그 값은 subnetmask의 값이 255.255.255.192 이므로,
0~63
64~127
128~191
192~255
에서 3번째에 해당하고,
165.236.55.128 ~ 165.236.55.191 까지의 값을 가져간다고 알 수 있다.
4. 서브넷 3의 주소는 모두 내가 지정할 수 있는 IP주소인데, 나는 여기서 165.236.55.193 과
165.236.55.194를 지정해두었다.
subnetmask 는 /26으로 해두었으므로 = 255.255.255.192이고
3번의 목록에서 4번째에 해당하므로
255.255.255.192~ 255.255.255.255 까지의 값을 갖는 것으로 만들었다.
5. 서브넷 4는 이미 라우터 간에 IP주소로 165.236.55.254 를 라우터 1이, 165.236.55.254를 라우터 2가 갖고 있는 것이 보인다.
그런데 여기서 문제가 보인다.
이미 4번에서 서브넷 3이 192~255까지 가져왔으므로 , 서브넷이 겹치게 되는 문제가 생기는 것이다.
이를 해결하기 위해서는 어떻게 해야할까?
서브넷 3이 255까지 가져가지 않고 덜 가져가도록 만들어야 한다.
/27이면 (255.255.255.224)면 어떻게 될까? 이때는 목록이
0~31
32~63
64~95
96~127
128~159
160~ 191
192~223
224~255
가 되므로, 이번에는 193, 194가 223, 224와 겹치지 않고 괜찮을 것이다!
/27로 고친 후 모두 맞은 모습
맞는 답:
******* Goal ID 5 ********
forward way : H2 -> H3 (165.236.55.221)
on H2 : packet accepted
on H2: destination does not match any interface. pass through routing table
on H2 : route match default
on H2: send to gateway 165.236.55.1 through interface H21
on switch S1: pass to all connections
on R1 : packet accepted
on R1: destination does not match any interface. pass through routing table
on R1 : route match 165.236.55.222/27
on R1: send to gateway 165.236.55.253 through interface R13
on R2 : packet accepted
on R2: send to R22
on H3 : packet accepted
on H3: destination IP reached
on H1 : packet not for me
on H2 : loop detected
reverse way : H3 -> H2 (165.236.55.3)
on H3 : packet accepted
on H3: destination does not match any interface. pass through routing table
on H3 : route match 0.0.0.0/0
on H3: send to gateway 165.236.55.222 through interface H31
on R2 : packet accepted
on R2: destination does not match any interface. pass through routing table
on R2 : route match 0.0.0.0/0
on R2: send to gateway 165.236.55.254 through interface R21
on R1 : packet accepted
on R1: send to R11
on switch S1: pass to all connections
on R1 : loop detected
on H1 : packet not for me
on H2 : packet accepted
on H2: destination IP reached
'CS(computer science)' 카테고리의 다른 글
linux [Dockerfile shell script]( nginx cofiguring for docker using sed command in shell in Dockerfile) sed 명령어로 특정 문자열 뒤의 모든 문자열 치환하기, 주석처리하기, 문자열 추가하기. (0) | 2023.07.04 |
---|---|
linux - waitpid 뜯어보기 (0) | 2023.04.18 |
[42 NetPractice] - 2 오류 모음(2/2) - invalid IP (0) | 2023.02.04 |
[minishell] - setenv 함수 구현하기 (0) | 2023.01.13 |
[linux] - 새로운 명령어 만들기 (0) | 2023.01.12 |