네트워크를 통해 목적지로 패킷이 전송될 경로를 지정해주는 것을 라우팅이라고 한다. 리눅스 시스템은 미리 설정되어 있는 라우팅 테이블이라는 지도를 보고 패킷을 어떤 네트워크를 거치게 할지 결정한다.
라우팅 테이블을 확인하거나 설정하는 명령은 route
이다. 옵션 없이 route 명령을 입력하면 현재 설정되어 있는 라우팅 테이블을 확인한다.
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 0 0 0 eno1
114.108.176.64 0.0.0.0 255.255.255.224 U 0 0 0 eno1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker_gwbridge
라우팅 테이블의 각 필드는 다음을 의미한다.
- Destination: 목적지
- Gateway: 외부 네트워크와 연결하기 위한 게이트웨이 주소
- Genmask: 목적지 네트워크의 넷마스크 주소. 255.255.255.255로 지정되어 있으면 목적지 호스트의 주소, 0.0.0.0으로 지정되어 있으면 기본 게이트웨이 주소를 의미한다.
- Flags: 해당 경로에 대한 정보를 알려주는 기호. U(up)는 이 경로가 살아있는 상태임을, H(host)는 목적지가 호스트 주소라는 사실을, G(gateway)는 게이트웨이를 향하는 경로를 의미한다.
- Metric: 목적지 네트워크까지의 거리
- Ref: 경로를 참조한 횟수
- Use: 경로를 탐색한 횟수
- Iface: 패킷이 오가는 데 사용할 네트워크 인터페이스
라우팅 테이블을 통해 패킷을 전달하는 과정은 다음과 같다.
- 패킷의 목적지 IP를 읽는다.
- 각 행을 순회하면서 Genmask 값을 읽어서 패킷의 목적지 IP와 AND 연산한다.
- 해당 값이 테이블에 저장된 Destination과 같은 값이면 그 행의 Iface가 가리키는 네트워크 인터페이스로 보낸다. 일치하지 않으면 다음 행의 Genmask 값을 읽어서 같은 작업을 되풀이하고 어느 행과도 일치하지 않는다면 패킷을 보내지 않는다.
라우팅 테이블에 기본 게이트웨이를 추가하는 방법은 다음과 같다.
$ sudo route detault gw 192.168.0.1
- 책, 리눅스 서버를 다루는 기술, 길벗, 신재훈