Section 3. 네트워크 설정 스크립트
3.1 리눅스의 네트워크 기능
리눅스는 다양한 네트워크 접속 형식을 지원하지만, 여기에서는 이더넷과 무선 LAN에 접속한 PC를 다뤄볼 것이다.
이더넷은 컴퓨터 간 네트워크를 구성하는 규격으로, 기업이나 일반 가정에서 널리 이용하고 있다. 일반 가정에서는 광케이블 라우터나 ADSL 라우터와 PC를 LAN 케이블로 연결하여 PC를 인터넷에 접속하고 TCP/IP 프로토콜을 사용해 멀리 떨어진 컴퓨터에 접속하여 데이터 통신을 실시한다.
리눅스 환경의 통신에서는 먼저 애플리케이션이 데이터를 커널에 보낸다. 리눅스 커널은 TCP/IP에 따라 네트워크 패킷을 생성, LAN 케이블이 꽂혀 있는 이더넷 어댑터 칩에 패킷을 보낸다. 칩은 LAN 케이블에 패킷을 전기 신호로 바꾸어 흘려보낸다. LAN 케이블을 타고 전기 신호가 흐르면 LAN 케이블에 꽂혀 있는 포트의 이더넷 어댑터 칩이 신호를 수신하고 리눅스 커널은 신호를 데이터로서 받고 다시 애플리케이션에 건네면 데이터의 송신이 완료된다.
LAN 케이블을 사용하지 않는 이더넷 통신이 무선 LAN이다. 일반적으로는 Wi-Fi나 IEEE 802.11이라고 부른다. 이더넷 어댑터가 무선 LAN 어댑터로 바뀐 것뿐으로, 기본적인 데이터 송신 흐름은 이더넷과 마찬가지이다.
3.2 TCP/IP
TCP/IP란?
PC가 서로 통신하기 위해서는 정해진 절차에 따라 대화를 실행해야 한다. 이 절차를 프로토콜이라고 한다.
현재 이더넷을 구성하는 기본 프로토콜로는 TCP(Transmission Control Protocol)와 IP(Internet Protocol)가 있다. 이 두 가지를 합쳐 TCP/IP라고 하며 현재 인터넷 표준으로 사용되고 있다.
이전에는 해당 벤더의 기기로 네트워크를 한 번 구축해 놓으면 사실상 그 벤더의 장비나 서비스를 기준으로 개발, 운용을 해야만 하는 이른바 벤더 종속(vendor lock-in)이 만연하던 때도 있었으나, TCP/IP의 보급으로 다른 벤더, 다른 OS가 탑재된 PC 간에도 통신이 가능해지면서 사용자가 해방되는 계기가 되기도 했다. 이때 MAC주소의 앞쪽 6개의 16진수(ex. 00-60-97)가 벤더, 즉 생산자를 나타내는 코드(OUI : Organizational Unique Identifier)가 된다. 그래서 이 코드로 어느 회사에서 만든 제품인지를 알 수 있다.
PC의 통신 기능은 계층 구조 모델을 채택하고 있다.
위 계층 구조는 아래로 내려갈수록 하드웨어 구현에 가까워진다는 것을 의미한다.
Application Layer은 HTTP가 대표적인 프로토콜이다.
Transport Layer은 TCP와 UDP(User Datagram Protocol) 등이 있으며, 주로 이 두 개가 상대 PC에 대한 데이터 제어를 담당한다. TCP는 상대방과의 포트 번호로 통신하여 데이터 결손이 없도록 정리, 재전송 요구, 오류 검출 등을 실시하여 자신의 능력 허용 범위 내에서 처리할 수 있도록 통신 흐름을 제어한다. UDP에서는 포트 번호로 통신은 실시하지만, 그 외 기능은 보장하지 않는다.
Internet Layer은 통신 상대를 향해 패킷을 보내기 위한 관리를 한다. 통신 상대에게 전송하기 위해 어떤 네트워크를 경유할 것인가(Routing), 어떤 프로토콜을 이용할 것인가(IPv4, IPv6) 등을 고려한다.
Network Interface Layer은 물리적인 네트워크에 패킷을 보내는 층이다. LAN에서 이용하는 이더넷이나 전화선을 통한 PPP 등을 이용하여 상대에게 패킷을 전송한다.
네트워크가 이처럼 계층화되어 있는 이유는 각 계층이 다른 것으로 대체되더라도 대응할 수 있게 만들기 위해서이다. Network Interface Layer은 이더넷을 쓸 것인지 PPP를 쓸 것인지가 달라지듯이 모든 계층에서 같은 것을 사용하지 않아도 환경 간 접속이 가능하게 하는 것, 이것이 바로 계층화의 목적이다.
IP주소
IP주소는 네트워크상의 단말기를 식별할 수 있게 해주는 독특한 ID이다. 네트워크에서 배웠던 기억을 되살려보자면, MAC주소는 Physical 주소, IP주소는 Logical 주소였다. 그리고 그냥 IP주소가 있어도 통신에서는 MAC(Media Access Control)주소가 사용된다. IPv4(Internet Protocol Version 4)는 192.168.121.190처럼 0~255의 숫자가 4개 나열된 주소를 단말기에 설정한다. IP주소는 사람이 읽기 쉽도록 1~255까지의 10진수로 표현한다. 반면 PC는 '00000001', '11111111'와 같이 2진수로 표현된 8비트 4개, 즉 32비트로 다룬다.
ipcalc Address/Netmask
로 네트워크 어드레스를 계산할 수 있다. 넷마스크(Netmask)는 IPv4의 IP 주소에서 네트워크 주소와 호스트 주소를 구분하는 32비트로 된 마스크로써, 네트워크 어드레스를 산출하는 데 사용된다. IP주소에서 마스크 비트가 '1'인 위치의 비트만 선택하고, 나머지에는 임의의 비트를 넣으면 호스트 주소의 범위가 구해지며, 호스트 주소에 따라 3가지 급(class)이 있다. Class A의 IP 주소는 0∼127로 시작되고, 호스트 수는 최대 (256x256x256)개, Class B의 IP 주소는 128∼191로 시작되고, 호스트 수는 (256x256)개, Class C의 IP 주소는 192∼223으로 시작되고, 호스트 수는 256개가 된다. 주소와 넷마스크를 AND연산 처리한 것이 네트워크 어드레스이다.
3.3 네트워크 설정 동작
RPM계열(CentOS or Red Hat) 네트워크 인터페이스 설정 파일의 주요 파라미터
- BOOTPROTO - none(부트 프로토콜을 사용하지 않는다), bootp(BOOTP를 사용한다), dhcp(DHCP를 사용한다)
- BROADCAST - 브로드캐스트 어드레스를 지정한다.(필수 아님)
- IPADDR - IP주소
- DEVICE - eth0과 같은 물리 장치명을 지정한다.
- GATEWAY - 기본 게이트웨이의 IP주소를 지정한다.
- HWADDR - MAC 어드레스를 지정한다.
- NETMASK - 넷마스크 값을 지정한다.
- NETWORK - 네트워크 주소를 지정한다.(필수 아님)
- ONBOOT - yes(부팅 시 유효화됨), no(부팅 시 유효화되지 않음)
- USERCTL - yes(root가 아닌 사용자도 장치를 제어할 수 있다), no(root 사용자만 장치를 제어할 수 있다)
3.4 이름 분석 조회용 DNS 서버를 지정(/etc/resolv.conf)
이름 분석(Name Resolution)의 필요성
네트워크에 연결된 단말기가 인터넷상의 서버에 접근하려면 서버의 IP주소를 알아야 한다. 하지만, 이런 서버의 IP주소를 사람이 일일이 기억하기는 어렵다. 이 때 IP주소와 호스트 이름을 이어주는 것을 DNS(Domain Name System)이라 부르며, 인터넷의 기본 개념이다. 도메인은 인터넷상에서 중복되지 않게 관리되는 네트워크상의 이름을 말하며, kr이나 com을 톱 레벨 도메인(TLD), co.kr는 세컨드 레벨 도메인이라고 한다.
도메인은 ISP(Internet Service Provider)나 레지스트러(도메인을 판매하는 업자)로부터 구입할 수 있다. 도메인을 구입한 후 DNS서버를 마련하여 해당 도메인으로 운용하는 공개 서버의 이름 분석 서비스를 제공하게 된다. DNS 서버는 IP주소와 호스트 이름 리스트를 가진 서버로, 인터넷상의 단말기에서 질의가 오면 이름 또는 IP주소, 호스트의 별명 등을 반환한다. DNS는 전 세계의 DNS 서버를 통해 분산된 데이터베이스로 가동되고 있다. DNS의 특징상 도메인은 한곳에서 집중적으로 관리하는 것이 아니라 분산되어 관리된다. 범용 IP 도메인인 .kr을 예로 들면, .kr 자체는 한국인터넷진흥원(KISA)가 관리하고 있다. ~.co.kr은 KISA로부터 도메인 관리 권한을 양도받은 것이므로 해당 도메인은 KISA가 아닌 다른 DNS 서버가 관리하는 셈이다.
DNS의 종류(콘텐츠 서버, 캐시 서버)
DNS 서버에는 권한을 양도받아 도메인 정보를 제공하는 콘텐츠 서버와 다른 DNS를 조회하여 도메인 정보를 캐시하는 캐시 서버가 있다.
ISP에서는 캐시 서버가 해당 계약자의 네트워크 내, 조직이나 가정에서는 해당 LAN 내에서만 접근되는 것이 바람직하지만, Google Public DNS와 같이 광범위한 캐시 서비스를 제공하는 DNS도 있다. DNS에서는 악성 DNS 서버가 잘못된 정보를 캐시 서버에 보내어 해당 캐시 서버를 이용하는 사용자에게 가짜 서버로 접속시키는 'DNS Cache Poisoning Attack'이 있으므로 상당히 엄격한 보안 운용이 필요하다. 정말 필요한 경우가 아니라면 캐시 서버를 외부에 제공하는 것은 삼가는 것이 좋다.
이름 분석 방법
단말기는 캐시 서버에 타깃 서버의 호스트 이름이나 IP주소를 조회한다.
예를 들어 브라우저에 abcdef.co.kr를 지정하면,
- 이 호스트 이름의 IP주소를 조회한다.
- 캐시 서버가 이 정보를 갖고 있지 않으면 abcdef.co.kr의 도메인을 관리하는 DNS 서버에 질의한다.
IANA(Internet Assigned Numbers Authority)에서는 오픈소스 DNS 데몬 bind용으로 http://www.internic.net/zones/named.root를 공개하고 있다.
보통 DNS 서버는 두 개의 관리 서버를 두도록 권장한다. 메인 DNS를 'Primary DNS 서버', 다른 하나를 'Secondary DNS 서버'라고 한다. 관리 서버가 여러 개여야 하나가 장애를 일으켜 다운되더라도 대처할 수 있다.
resolv.conf의 서식
리눅스를 단말기로 이용할 때 시스템 라이브러리의 libc에 있는 resolver라는 리졸버 루틴이 /etc/resolv.conf에 기재된 DNS 서버를 이름 분석을 위한 캐시 서버로 이용한다.
/etc/resolv.conf의 주요 파라미터는 다음과 같다.
- domain - 도메인 이름
- search - 검색할 도메인 이름
- nameserver - 이름 분석을 위한 DNS 서버를 지정