리눅스 라우팅 테이블 보는법 - linugseu lauting teibeul boneunbeob

라우팅이란?

네트워크를 통해 목적지로 패킷이 전송될 경로를 지정해주는 것을 라우팅이라고 합니다.

리눅스에서는 미리 설정해둔 라우팅 테이블을 보고 패킷을 어떤 네트워크 인터페이스를 거쳐 목적지로 보낼지 결정한다.

리눅스 라우팅 테이블 보는법 - linugseu lauting teibeul boneunbeob

위의 명령어를 입력한 결과로 나온 것이 '라우팅 테이블'이다.

의미를 알아본다.

*Kernal IP routing table : 현재 커널의 라우팅 테이블

*Destination : 패킷이 보내질 목적지

*Gateway : 외부 네트워크와 연결 위한 게이트웨이 주소

*Genmask : 목적지 네트워크의 넷마스크 주소( 아래에서 다시 설명)

*Flags : 해당 경로에 대한 정보를 알려주는 기호,

U : 경로가 살아있음 / G : 게이트웨이를 향하는 경로

*Metric : 목적지 네트워크까지의 거리

*Ref : 경로를 참조한 횟수

*Use : 경로를 탐색한 횟수

*Iface : 패킷이 통로로 사용될 네트워크 인터페이스

커널은 패킷을 어딘가로 보내야 할 때마다 라우팅 테이블을 써치한다.

라우팅 테이블 보는 방법을 이야기한다.

과정은 이렇다.

1. 보내고자 하는 패킷 목적지 주소 읽기

2. Genmask 읽기

3. 목적지 주소와 Genmask를 비트 AND연산 진행

만약 비트 AND 연산이 Destination과 같다면, iface 필드에 있는 인터페이스에 패킷을 보낸다.

같지 않다면, 다음 행으로 넘어가 1,2,3 과정을 반복한다.

4. 라우팅 테이블을 다 뒤져도 더 이상 진행할 행이 없다면 패킷을 보내지 않는다.

내가 가진 라우팅 테이블을 예로 들어보자.

ex1) 192.168.111.55라는 주소로 패킷을 보내기로 한다.

1. 목적지 주소를 읽어 들인다(192.168.111.55)

2.Genmask 읽기(255.255.255.0)

3. 비트AND연산 진행(192.168.111.0)

destination(192.168.111.55) = 비트AND연산 결과 비트

두 값이 같으므로 ens33인터페이스를 통해 패킷을 보내게 된다.

ex2) 192.168.123.11라는 주소로 패킷을 보내기로 한다.

1.목적지 주소( 192.168.123.11)

2. genmask(255.255.255.0)

3. 비트AND연산 진행 ( 192.168.123.0)

destination(192.168.111.55) != 비트AND연산 결과 비트

두 값이 다르므로 다음행,다음행 진행하다가 맞는 행이 없을 시 전송하지 않는다.(나는 default 게이트웨이로 간다, 만약 default게이트웨이가 존재하지 않는다면 인터넷이 안될 것이다.나가는 길이 없으니!)

이제 여기서 defualt 게이트웨이에 대한 이야기를 이야기할 수 있다

리눅스 라우팅 테이블 보는법 - linugseu lauting teibeul boneunbeob

.

만약 172.30.1.44(그냥 임의대로 막 정의)로 보낸다. 이는 내부 네트워크에 있지 않고 외부 네트워크를 통해 보내야 한다.

여기서 방금 말한 "default 게이트웨이"를 통해 나갈 수 있다.

위를 보면 Genmask값이 0.0.0.0이고 Destinaton 또한 default(0.0.0.0)이다

어떠한 목적지 주소가 들어와도 Genmask와 AND비트 연산을 통해 0.0.0.0이 되어버린다.(즉, 무조건 성립한다라는 이야기)

172. 30.1.44 AND 0.0.0.0 ====> 0.0.0.0

192.168.1.44 AND 0.0.0.0 ====> 0.0.0.0

168. 32.1.44 AND 0.0.0.0 ====> 0.0.0.0 ... 무조건 0.0.0.0!! 그래서 defualt라 불린다.

외부 인터넷과 연결하려면 이 default gateway가 필요하다.

여튼 플래그에 G가 붙어 있고 Gateway 필드에 실제 게이트웨이 주소가 있다.(나는 현재 _gateway로 되어 있는데 "ip route" 명령어를 적어 확인 가능하다.)

TIP)만약 ip route를 쳤을 때 defuatl gateway가 존재하지 않는다면 인터넷이 되지 않을 것이다.왜? 나가는 길이 없으니!! 설정해주어야 한다.

참고) https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=goduck2&logNo=12555370

리눅스의 라우팅 테이블을 확인하기 위해서는 route 명령어 또는 netstat이라는 명령어를 사용한다 "route"라고 하거나 또는 "netstat -nr"을 실행해 현재 리눅스에 세팅되어 있는 라우팅 테이블을 확인할 수 있다

1. netstat 명령어

 [root@dupont ~]# netstat -nr

 Kernel IP routing table

 Destination          Gateway             Genmask            Flags   MSS  Window  irtt  Iface

 211.214.178.201  0.0.0.0              255.255.255.224 U           40  0             0  eth0

 127.0.0.1             0.0.0.0              255.0.0.0           U           40  0             0  lo

 0.0.0.0                211.214.178.254 0.0.0.0              UG         40  0             0  eth0

위의 명령어를 통해 다음의 정보들을 알 수 있다

 - 기본 게이트웨이: 211.214.178.201

 - 서브넷 마스크   : 255.255.255.224

 - 인터페이스       : eth0

2. route 명령어

 [root@dupont ~]# route

 Kerenl IP routing table

 Destination     Gateway                 Genmask              Flags  Metric  Ref  Use  Iface

 192.168.1.0   *                            255.255.255.0      U       0         0        0   eth0

 168.254.0.0   *                            255.255.0.0          U       0         0        0   eth0

 127.0.0.1      *                             255.0.0.0             U       0         0        0   lo

 default           192.168.1.254         0.0.0.0                 UG     0         0        0  eth0

위의 라우팅테이블을 이해하기 위한 일반적인 규칙

 규칙1 : 위의 첫번째행부터 다음행으로 차례대로 한 행씩 읽어 들여서 처리할 패킷을 보낼 수 있는지를 확인

 규칙2 : default라는 것이 이 리눅스의 기본 게이트웨어 설정행을 의미하며 그 행의 Gateway 항목값이 기본게이트웨이의 IP주소이다. default는 0.0.0.0을 의미

 규칙3 : 보낼 데이터의 목적지 IP주소와 Genmask값(SubnetMask)과의 AND연산을 해서 그 결과가 해당행의 Destination항목과 동일 할 경우에 해당행의 Iface에 잇는 인터페이스로 해당 패킷을 전송하게 된다

 규칙4 : Iface항목의 값이 lo인 행(Destination값이 127.0.0.1인 행)은 이 서버의 루프백(loopback) 데이터를 처리하기 위한 설정이다 즉, 자기자신에게로 데이터를 보낼 때에 처리를 담당하는 인터페이스이다

위의 라우팅테이블을 바탕으로 한 패킷이 전송되는 과정(목적지 주소: 192.168.11.201)

 1. 첫번째 행을 읽어들인다. 보낼 대상패킷의 목적지 주소(192.168.11.201)와 첫번째 행의 Genmask값(255.255.255.0)과 AND 연산을 수행. 그 결과가 첫번째 행의 Destination항목값(192.168.1.0)과 다르므로 다음행으로 넘어간다

 2. 두번째 행을 읽어들인다. 보낼 대상패킷의 목적지 주소(192.168.11.201)와 두번째 행의 Genmask값(255.255.0.0)과 AND연산을 수행. 그 결과가 첫번째 행의 Destination항목값(168.254.0.0)과 다르므로 다음 세번째 행으로 넘어간다

 3. 세번째 행을 읽어들인다. 보낼 대상패킷의 목적지 주소(192.168.11.201)와 세번째 행의 Genmask값(255.0.0.0)과 AND연산을 수행. 그 결과가 첫번째 행의 Destination항목값(127.0.0.1)과 다르므로 다음 네번째 행으로 넘어간다

 4. 네번재 행을 읽어들인다. 보낼 대상패킷의 목적지 주소(192.168.11.201)와 네번째 행의Genmask값(0.0.0.0)과 AND연산을 수행. 그 결과가 첫번째 행의 Destination항목값(0.0.0.0)과 같으므로 네번재 행의 Iface항목값인 eth0으로 해당 패킷을 보내게 된다.

이와 같은 것을 라우팅이라고하며 모든 패킷들은 이와같은 라우팅 과정을 거쳐서 외부와 통신하게 된다