다음 이전 차례

5. Configuring TCP/IP Networking

이 장에서는 여러분의 컴퓨터에서 TCP/IP 네트워킹 설정에 필요한 모든 사항들을 다루어 불 생각이다. IP 주소 할당을 시작으로 해서, 천천히 TCP/IP 네트워킹 인터페이스의 환경구 성을 해나갈 것이다. 그리고 여러분이 네트워크 설치를 할 때 발생하는 여러 가지 문제를 해결하기 위해 유용하게 사용할 수 있는 몇가지 도구도 소개할 생각이다.

이 장에서 하는 대부분의 작업은 일반적으로 한번은 해야 할 작업이다. 여러분의 네트워 크에 새로운 시스템을 추가시키거나 시스템 전체를 재구성할 때, 대부분의 구성파일들을 손 봐주어야 한다. TCP/IP를 구성하기 위해 사용하는 어떤 명령들은 시스템이 부팅되는 시간 에 실행된다. 시스템 부팅시 실행되는 파일들은 /etc/rc 스크립트에서 불러온다.

이 스크립트에서 네트워크와 관계되어 있는 내용을 기술해 놓은 파일을 rc.net 또는 rc.inet라고 한다. 때때로, 여러분은 rc.inet1rc.inet2라고 하는 두 개의 스크립트를 볼 수 도 있을 것이다. 전자가 커널의 네트워킹 부분을 초기화 시키는 반면, 후자는 기본적인 네트워킹 서비스와 어플리케이션을 실행시키는 역할을 한다. 지금 부터는 후자와 관계된 내용만을 다룰 생각이다.

이 장에서는 rc.inet1 스크립트가 수행하는 작업에 대해 다룰 것이고, 다음 장(6장)에서 는 그것과 관계되어 있는 어플리케이션에 대해 다룰 것이다. 여러분이 이 장을 다 읽어 본 다 면, 여러분의 컴퓨터에 TCP/IP 네트워킹을 적절하게 구성할 수 있을 것이다. 그럼 먼저, rc.inet1에 있는 예제 명령을 사용해서 스크립트를 구성하라. 그리고 나서, 시동 시간에 rc.inet1이 실행되는지 확인하고 컴퓨터를 재부팅하라. 여러분이 좋아하는 리눅 스 배 포본에 rc 스크립트와 관련되어 있는 좋은 예제 파일이 있을 것이다.

5.1 Setting up the proc Filesystem

Net-2 배포본의 몇몇 구성 도구는 proc 파일시스템에 의존하고 있다. 이것은 파일시스템과 같은 메카니즘을 통해서 커널로 run-time 정보를 엑세스하게 하는 인터페이스이다. 마운트 되면, 여러분은 다른 파일시스템에서와 같이 파일을 나열하거나 그 내용을 볼 수 있다. 시스 템 평균 적재량을 나타내는 loadavg 파일과 meminfo를 포함하고 있는 항목들은 현재 core 메모리와 스왑 사용법을 나타내 준다.

여기에 사용되는 네트워킹 코드는 net 디렉토리를 추가한다. 이 디렉토리에는 커널 ARP 테이블, TCP/IP 연결 상태, 그리고 라우팅 테이블과 같은 몇 개의 파일을 포함한다. 대부분 의 네트워크 관리 도구들은 이들 파일로부터 그와 관련되어 있는 정보를 얻는다.

proc 파일 시스템 (또는 procfs 로도 알려져 있다.)은 대개 부팅시간에 /proc와 마운트된 다. 가장 좋은 방법은 /etc/fstab에 다음과 같은 라인을 추가시켜 주는 것이다.

     # procfs mont point:
     none /proc proc defaults

그리고, /etc/rc 스크립트에서 "mount /proc"를 실행시킨다.

요즈음에 와서 procfs는 대부분의 커널에서 기본값으로 설정되어 있다. 만약 procfs가 여 러분의 커널에 있지 않다면, 여러분은 "mount: fs type procfs not supported by kernel" 과 같은 메시지를 얻을 것이다. 이럴 때는 커널을 재 컴파일하고 그 과정에서 procfs 지원 여 부를 묻는 질문에, 'y'라고 답해야 한다.

5.2 Installing the Binaries

만약 여러분이 이전에 패키지화된 리눅스 배포본을 사용하고 있다면, 그것은 아마도 네트워 킹 어플리케이션과 유틸리티에 따라오는 예제파일을 포함할 것이다. 그러한 경우에만, 여러 분이 새로운 커널 배포본을 설치하고자 할 때, 새로운 유틸리티를 구하던지 다시 설치를 해 주어야 한다. 새로운 커널은 때때로 변경된 커널 네트워킹 층에 관한 정보를 포함하는 경우 도 있다. 이러한 경우에 여러분은 기본 구성 도구를 갱신해주어야 한다. 어쩌면, 커널을 재 컴파일 하는 경우에만 최신 바이너리 패키지가 필요한 경우도 있다. 이것들은 대개 커널과 함께 net-XXX.tar.gz라는 이름으로 압축되어 배포된다. XXX는 버전 번호이다. 리눅 스 1.0 에 맞는 배포본은 0.32b이며, 1.1.12버전 이후의 커널은 0.32d를 필요로 한다.

여러분 힘으로 표준 TCP/IP 네트워크 어플리케이션을 설치하고 컴파일하고자 한다면, 여러분은 대부분의 리눅스 FTP 사이트에서 커널 소스를 구할 수 있다. Net-BSD 또는 다 른 소스에서는 다소 심하게 패치한 것도 있다. Xmosaic, xarchie 또는 Gopher과 IRC 클라 이언트와 같은 어플리케이션들은 개별적으로 구해야 한다.

Net-3의 공식 FTP 사이트는 sunsite.unc.edu 이며, 그 아래 system/Network/sunacm에 미러되어 있는 sunacm.swan.ac.uk도 있다. 최신 Net-2e 패치 킷과 바이너리들은 ftp.aris.com 에서 찾아 볼 수 있다. BSD에서 파생된 Matthias Urlichs의 네트워킹 코드는 ftp.ira.uka.de에 있는 /pub/system/linux/netbsd에서 구할 수 있을 것이다.

5.3 Another Example

이 책의 나머지 부분에서는 Groucho Marx University보다 조금 더 단순한 예를 들기로 하 겠다. 그리고 여러분이 실제로 부딪치게될 작업에 조금더 가까이 가보기로 하겠다. virtual beer를 양조하는 Virtual Brewery라고 하는 조그마한 회사가 있다고 가정하자. 그들의 사업 을 더욱더 효과적으로 관리하기 위해서, virtual 양조자가 그들의 컴퓨터를 네트워크에 연결 하려고 한다. 그리고 네트워크에 연결하고자 하는 컴퓨터는 리눅스 1.0을 구동시키려 한다.

양조장 건물 건너편에는 그와 비슷한 일을 하는 Virtual Winery가 있다. 여기서는 그들 자체내에 이더넷을 가지고 있다. 두 회사는 경영상의 목적으로 그들만의 네트워크를 구성하 려고 한다. 첫 단계로써, 두 서브넷 사이에서 데이터를 전송하기 위해 게이트웨이 호스트 컴 퓨터를 설정할 것이고, 메일과 뉴스를 교환하기 위해, UUCP를 바깥 세상에 링크시키려 할 것이다. 그리고 가끔 인터넷과의 연결을 위해서 SLIP 연결을 설정하려 할 것이다.

5.4 Setting the Hostname

비록 전부다 그렇다고 할 순 없지만, 대부분의 네트워크 어플리케이션은 로컬 네트워크명에 의존하고 있으며, 이치에 맞는 값으로 설정되어 있다. 이것은 대개 부팅할 동안 hostname 명령을 실행시킴으로써 설정된다. hostname에 이름을 설정하기 위해서는 다음과 같이 해야 한다.

     # hostname name

이것을 위해서는 도메인네임없는 호스트명 (unqualified hostname)을 사용하는 것이 실 용적이다. 이를테면, Virtual Brewery에 있는 호스트는 vale.vbrew.com 또는 vlager.vbrew.com을 사용할 수도 있다. 이것들은 공식적으로 사용 하는 이름이며, fully qualified domain name (FQDN)이다. 그들의 로컬 호스트네임은 vale 와 같은 첫 번째 이름이 될 것이다. 하지만 로컬 호스트네임은 호스트의 IP 주소를 찾아내 는데에 자주 사용되기 때문에, 여러분은 resolver library가 호스트의 IP 주소를 찾아낼 수 있는지를 확인해야 한다. 즉, 이것은 여러분이 /etc/hosts에 그 이름을 입력해 주어야 된다 는 의미이다.

몇몇 사람들은 FQDN의 나머지 부분에 도메인 네임을 설정하기 위해서, domainname이 라는 명령어를 사용하라고 제안하기도 한다. 이 방법으로 여러분은 hostname과 domainname에서 나오는 결과물을 조합해서, 다시 FQDN을 얻을 수 있다. 하지만 이것이 최고의 방법은 아니다. 호스트의 NIS 도메인을 설정하기 위해서 일반적으로 domainname 명령을 사용한다. 이 도메인은 여러분이 속해 있는 도메인과는 다르다. NIS는 10장에서 다 루기로 하겠다.

5.5 Assigning IP Addresses

여러분의 호스트에서 standalone operation (이를테면, INN 넷뉴스 소프트웨어를 실행할 수 있어야 한다.)을 위한 네트워킹 소프트웨어를 구성한다면, 이절을 읽지 않아도 된다. 왜냐하 면, 여러분에게 필요한 것은 루프백 인터페이스 (항상 127.0.0.1이다.)를 위한 IP 주소만을 필요로 하기 때문이다.

이더넷과 같은 실제 네트워크에서는 좀더 복잡한 작업을 필요로 한다. 여러분의 호스트 를 실제 존재하고 있는 네트워크에 연결하기 하고자 한다면, 접속하고자 하는 네트워크에서 IP 주소를 받을 수 있는지 관리자에게 물어 보아야 한다. 여러분이 직접 모든 네트워크를 설정한다면, 이전에 설명한 대로 여러분 자신에게 IP 주소를 할당해 주어야 한다.

로컬 네트워크에 있는 호스트들은 대개 같은 논리적인 IP 네트워크와 주소를 공유해야 한다. 즉 여러분이 IP 네트워크 주소를 할당해 주어야 한다. 만약 여러분이 여러 가지 물리 적인 네트워크를 가지고 있다면, 다른 네트워크 번호를 그것들에게 할당해 주거나, 하나의 IP 주소를 여러 서브네트워크로 쪼개기 위해 서브네트워킹을 사용해야 한다. 여러분의 네트 워크가 인터넷에 연결되어 있지 않다면, 네트워크 주소를 마음대로 선택할 수 있다. 여러분 이 클래스 A, B 또는 C 중 하나를 선택하지 않았다면, 그 네트워크는 정확하게 작동하지 않을 것이다. 하지만, 여러분이 가까운 미래에, 인터넷을 사용할 생각이라면, 공식 IP 주소를 구해야 한다. 가장 최선의 방법은 여러분의 네트워크 서비스 프로바이더에게 물어보는 것이 다. 여러분이 인터넷에 접속할 경우에만 네트워크 번호를 구하고자 할 경우, hostmaster@internic.net으로부터 Network Address Application Form을 구해야 한다.

여러 가지 이더넷을 운영하기 위해서는 여러분의 네트워크를 서브넷으로 갈라놓아야 한 다. 서브넷팅은 단지 여러분이 하나 이상의 broadcast network를 가지고 있을 때만 필요하 다는 것을 알아 두어라; 여기서 point-to-point 링크는 생각하지 않는다. 예를 들어, 여러분 이 이더넷을 가지고 있고, 하나 이상의 SLIP를 바깥세상과 연결시키고자 한다면, 여러분의 네트워크를 서브넷으로 갈라 놓지 않아도 된다. 그 이유는 7장에서 설명하기로 하겠다.

한가지 예로, 양조장의 네트워크 관리자가 클래스 B에 해당하는 네트워크 번호를 NIC에 게 요청하고 나서 192.72.0.0을 부여받았다. 두 개의 이더넷을 수용하기 위해서, 관리 자는 추가적으로 서브넷 비트에 있는 호스트 부분에 해당하는 8 비트를 사용하기로 결정한다. 이 렇게 되면, 각 서브넷에 254개의 호스트를 부여할 수 있는 8 비트를 또 다시 가지게 된다. 그리고 나서, 관리자는 서브넷 번호로 brewery에게 1을, winery에게 2라는 번호를 할당한 다. 그러면, 각 네트워크 주소는 191.72.1.0191.72.2.0이 되며, 서브넷 마스크는 255.255.255.0이 될 것이다.

두 개의 네트워크에서 게이트웨이 역할을 하고 있는 vlager은 그것들 중 1이라는 호스 트 번호를 할당받았으며, IP 주소로는 각각 191.72.1.1과 191.72.2.1을 주었다. 그림 5.1은 두 개의 서브넷과 게이트웨이를 보여준다.

       Figure 5.1: Virtual Brewery and Virtual Winery - the two subnets.

이 예제에서 나는 쉽게 이것을 유지하기 위해 클래스 B 네트워크를 사용하고 있다; 클래 스 C 네트워크가 조금더 현실적이다. 새로운 네트워킹 코드를 가지고 있는 서브넷팅은 바이 트 바운더리에 제한되어 있지 않다. 그래서, 심지어 클래스 C 네트워크를 여러개의 서브넷 으로 나누기도 한다. 이를테면, 여러분은 넷마스크에서 호스트 부분에 해당하는 2비트를 사 용할 수 있다. 그렇게 되면, 각 네 개의 서브넷에 64개의 호스트를 부여할 수 있게 된다. - 각 서브넷의 마지막 숫자는 브로드캐스트 주소로 예약되어 있다. 그래서 사실상 각 서브넷마다 63개의 호스트를 부여할 수 있다.

5.6 Writing hosts and networks Files

여러분의 네트워크를 서브넷으로 나눈후, /etc/hosts 파일을 사용하기 위해서 몇가지 호스트 네임 리솔루션(hostname resolution)을 준비해야 한다. 만약 DNS나 address resolution을 위 한 NIS를 사용할 생각이 아니라면, hosts 파일에 모든 호스트를 넣어 두어야 한다.

비록 여러분이 정상작동하에서 DNS나 NIS를 실행하고자 하는 경우에라로, /etc/hosts에 있는 모든 호스트네임의 서브넷을 가지고 싶어할 지도 모른다. 한가지 예를 들어, 부팅시에 아무런 네트워크 인터페이스가 실행되고 있지 않다 하더라도, 여러분은 name resolution을 가지고 싶어 할 것이다. 이것이 매우 편한 것일 뿐만아니라, rc.inet 스크립트에서 상징화된 호스트네임을 사용하도록 허락해 준다. 그래서, IP 주소들을 변경하고자 할 때, 거대한 rc 파일을 개별적으로 편집하는 대신, 갱신된 hosts파일을 모든 컴퓨터에 복사하고 나서, 재부 팅해야 한다. 대개, 여러분은 hosts에 모든 로컬 호스트네임과 주소를 넣어 둘 것이다. 그리 고 만약 사용한다면, 게이트웨이와 NIC 서버도 추가시켜야 한다. - 만약 여러분이 Peter Eriksson의 NYS를 사용한다면, 어떤 NIS 서버의 주소가 필요 할 것 이다. ypbind를 사용한 다른 NIS 수행작업은 실행시간에 그들의 서버에 위치한다.

초기화 테스트동안에, 여러분의 resolver가 오직 hosts 파일에서 정보를 사용하는지 확인 해야 한다. 여러분의 DNS 또는 NIS 소프트웨어는 그것들이 사용되었을 때, 이상한 결과를 초래하는 예제파일과 같을지도 모른다. 호스트의 IP 주소를 찾을 때, 오직 /etc/hosts를 사 용하는 모든 어플리케이션을 만들기 위해서는, 여러분이 직접 /etc/host.conf 파일을 편집해 주어야 한다. 프롬프트 다음에 다음과 같은 라인을 추가하라.

     order hosts

resolver 라이브러리의 설정은 6장에서 상세하게 다룰 것이다.

hosts 파일은 각 라인에 IP 주소, 호스트명, 그리고 추가적으로 오는 호스트명의 가명 목 록을 가지고 있다. 각 필드는 공백이나 탭으로 구분지으며, 주소 필드는 첫 번째 칸에서 시 작해야 한다. 첫 번째 칸에 해쉬표시 (#)를 가지고 있는 라인은 명령행에서 주석 처리된다.

호스트명은 FQDN이나 로컬 도메인으로 사용할 수 있다. vale를 예로 들어 보자. 여러분 은 대개 vale.vbrew.com과 같이 완전하게 자격을 갖춘 이름을 입력했을 것이다. vale 자체 는 hosts 파일을 의미한다. 그래서 vale라는 이름을 공식적인 이름과 단축형 로컬 네임으로 사용할 수 있다.

다음은 Virtual Brewery에서 hosts 파일이 어떻게 구성되어 있는지를 보여주는 예제 파 일이다. 이 파일에는 두 가지 특별한 이름 즉, vlager-if1과 vlager-if2가 포함되어 있는데, 이것들은 vlager에서 사용되는 인터페이스로써, 각각의 주소를 가지고 있다.

     #
     # Hosts file for Virtual Brewery/Virtual Winery
     #
     # IP            local        fully qualified domain name
     #
     127.0.0.1       localhost
     #
     191.72.1.1      vlager       vlager.vbrew.com
     191.72.1.1      vlager-if1
     191.72.1.2      vatout       vstout.vbrew.com
     191.72.1.3      vale         vale.vbrew.com
     #
     191.72.2.1      vlager-if2
     191.72.2.2      vbeaujolais  vbeaujolais.vbrew.com
     191.72.2.3      vbardolino   vbardolino.vbrew.com
     191.72.2.4      vchianti     vchianti.vbrew.com

여러분은 때때로 호스트의 IP 주소에 있는 네트워크 번호를 심볼릭네임으로 사용하고 싶 어할 것이다. 그렇게 되면, hosts 파일은 /etc/networks라고 하는 파일을 가지게 될 것이다. 그 파일은 네트워크 이름을 네트워크 번호에 대응시켜주는 역할을 한다. Virtual Brewery에 다음과 같은 networks 파일을 설치할 수도 있다:

     # /etc/networks for the Virtual Brewery
     brew-net     191.72.1.0
     wine-net     191.72.2.0

5.7 Interface Configuration for IP

4장에서 설명한 대로 하드웨어를 설정하고 나면, 커널 네트워킹 소프트웨어라고 알려진 장 치를 만들어야 한다. 여기에서는 네트워크 인터페이스를 구성하고, 라우팅 테이블을 초기화 시키는 명령을 사용한다. 이러한 작업은 대개 시스템이 부팅될 때, rc.inet1 스크립트 파일에 서 수행된다. 여기에서는 ifconfig와 route라는 명령을 사용한다.

ifconfig라는 명령어는 커널 네트워킹 층에 접근할 수 있는 인터페이스를 만들 때 사용된 다. 그리고 IP 주소와 또 다른 변수의 할당작업과 인터페이스를 활성화 시키는데에도 사용 하며, 이러한 작업을 "taking up"이라고 부른다. 여기에서 활성화 한다는 것은 커널이 인터 페이스를 통해서 IP 데이터그램을 송수신 한다는 의미이다. 다음 명령은 이러한 작업을 수 행할 때 사용하는 가장 간단한 방법이다.

     ifconfig interface ip-address

즉 이것은 ip-address를 interface에 할당하고 이것을 활성화 시킨다는 의미이다. 다른 모 든 변수들은 초기값으로 설정된다. 이를테면, 클래스 B 주소에 해당하는 255.255.0.0과 같은 IP 주소의 네트워크 클래스를 초기 서브넷 마스크로 간주하기도 한다. ifconfig는 이장의 마 지막 부분에서 상세하게 다룰 것이다.

route는 여러분이 커널 라우팅 테이블에서 라우트를 추가하거나 삭제할 때 사용하는 명 령어이다. 이것은 다음과 같이 사용한다.

     route [add|del] target

여기서 add와 del은 target에 라우트를 추가할지 삭제할지를 결정하는 변수이다.

The Loopback Interface

첫 번째로 반응하는 인터페이스는 루프백 인터페이스이다.

     # ifconfig lo 127.0.0.1

간혹 여러분은 IP 주소 대신에 사용하는 호스트명으로써 localhost라는 것을 볼수 있을 것이다. ifconfig는 hosts 파일에서 그 이름을 찾을 것이며, 그 파일에서 그 호스트명에 해당 하는 IP 주소 로써, 127.0.0.1을 선언할 것이다.

     # Sample /etc/hosts entry for localhost
     localhost      127.0.0.1

인터페이스의 구성정보를 보기 위해서는, ifconfig 다음에 다음과 같이 인터페이스명을 적 어 주면 된다:

     # ifconfig lo
     lo       Link encap Local Loopback
              inet addr 127.0.0.1  Bcast [NONE SET]  Mask 255.0.0.0
              UP BROADCAST LOOPBACK RUNNING MTU 2000 Metric 1
              RX packets 0 errors 0 dropped 0 overrun 0
              TX packets 0 errors 0 dropped 0 overrun 0

보시다시피, 루프백 인터페이스의 주소 127.0.0.1이 클래스 A에 속한다음 부터는 그것 의 넷마스크는 255.0.0.0으로 할당되었다. 여러분도 알다시피, 인터페이스는 브로드캐스트 주소 를 가질 수 없게 되어 있다. 어쨌든 간에 이것은 루프백을 위해서도 그리 유용한 것은 아니 다. 하지만, 여러분의 호스트에 rwhod라고 하는 데몬프로그램을 실행시킨다면, rwho를 적절 하게 사용하기 위해서는 루프백 장치의 브로드캐스트 주소를 설정해 주어야 한다. 브로드 캐스트를 설정하는 방법은 "5.8 All about ifconfig" 절에 설명되어 있다.

현재 여러분은 작은 규모의 네트워크 정도는 설정할 수 있을 것이다. 그래도 빼먹은 것 이 있다면, IP를 말해주는 개체를 라우팅 테이블에 아직 추가하지는 않았다. 127.0.0.1이라는 목적지 주소를 라우트 해줌으로써, 여러분은 이 인터페이스를 사용할 수 있을 것이다. 방금 설명한 내용은 다음과 같이 해주면 된다.

     # route add 127.0.0.1

또 다시, 여러분은 IP 주소 대신에 localhost라는 호스트명을 사용할 수 있게 되었다.

그런 다음에, 여러분은 모든 작업이 올바르게 작동중인지를 확인 해 보아야 한다. 이러한 작업에는 ping라는 도구를 사용하면 된다. ping은 sonar device와 맞먹는 네트워킹을 해주 며, 주어진 주소가 실제로 도착되었는지, 데이터그램을 보낼때나 그것을 다시 되돌려 보낼 때 발생하는 지연시간을 측정하는 등의 여러 가지 작업을 할 때 사용한다. 그 지연시간을 대개 "round-trip time"이라고 부른다.

     # ping localhost
     PING localhost (12.0.0.1): 56 data bytes
     64 bytes from 127.0.0.1: icmp_seq=0 ttl=32 time=1 ms
     64 bytes from 127.0.0.1: icmp_seq=1 ttl=32 time=0 ms
     64 bytes from 127.0.0.1: icmp_seq=2 ttl=32 time=0 ms
     ^C

     --- localhost ping statistics ---
     3 packets transmitted, 3 packets received, 0% packet loss
     round-trip min/avg/max = 0/0/1 ms

위에서 보여진 것처럼, ping을 실행시켰을 때, 사용자가 인터럽트를 걸지 않는한 그것은 영원히 패킷을 내보낼 것이다. 여러분이 직접 Ctrl-C를 타이프 하게 되면, 위와 같이 ^C가 표시된다.

윗 예제는 127.0.0.1에 해당하는 패킷이 ping을 사용함과 동시에 적절하게 전송되고 다 시 되돌아 왔다는 것을 보여준다. 이것은 여러분이 첫 네트워크 인터페이스를 성공적으로 설정했다는 것을 의미한다.

만약 ping을 해서 얻은 출력이 위 예제와 전혀 다르게 보인다면, 문제가 조금 있다는 것 을 의미하는 것이다. 이런 경우에는 그 출력물이 제대로 설치되고 있지 않은 몇몇 파일을 가리키고 있는지 확인해 보아라. 즉 ifconfig와 route가 여러분이 실행시키고 있는 커널 배포 본과 호환되고 있는지 확인해 보아라. 결국 커널 컴파일시 네트워킹을 할 수 있게 만들어 놓아야 한다. (/proc/net 디렉토리에서 여러분은 이러한 정보를 볼 수 있다.) route 명령을 잘못 입력한 경우, 여러분의 모니터에는 "Network unreachable"이라고 하는 에러 메시지가 뜰 것이다. 이런 경우, 혹시라도 ifconfig에서 부여한 것과 똑같은 주소를 입력했는지 확인해 보아라. 위에서 설명한 것만으로도 스탠드 얼론 호스트에서 충분히 네트워킹 어플리케이션 을 구동시킬 수 있다. 위에서 사용한 명령을 rc.inet1에 추가 시킨후 rc.inet1 스크립트들이 /etc/rc로부터 실행되고 있는지 확인해 보아라. 실행되고 있다면, 여러분의 컴퓨터를 재부팅 시켜라. 그리고 나서 여러 가지 어플리케이션을 한번 사용해 보아라. 이를테면, "telnet localhost"라는 명령은 telnet이 여러분의 호스트에 접속을 시도하고 있음을 뜻한다.

그리고, 루프백 인터페이스는 이 책에서 보인 예제 뿐만아니라 실제로 몇몇 어플리케이 션에서 사용되고 있다. 그러므로, 여러분의 네트워크가 접속되었는지 그렇지 않은지를 개의 치 말고, 항상 루프백 인터페이스를 설정해 두어야 한다.

Ethernet Interfaces

이더넷 인터페이스 설정 또한 루프백 인터페이스와 매우 유사하다. 즉 여러분이 서브넷을 사용할 때, 몇가지 변수를 더 사용할 뿐이다.

Virtual Brewery에서 우리는 IP 네트워크를 여러개의 서브넷으로 나누어 보았다. 그것은 근본적으로 클래스 B에 해당하는 네트워크를 클래스 C에 해당하는 서브넷으로 이러한 환 경을 인식시키기 위한 인터페이스를 만들기 위해서는, 다음과 같은 명령을 주면 된다.

     # ifconfig eth0 vstout netmask 255.255.255.0

즉, 이것은 vstout (191.72.1.2)라는 인터넷 주소를 eth0 인터페이스에 할당하는 작업이 다. 여기서 여러분이 넷마스크를 설정해 두지 않았다면, ifconfig는 IP 네트워크 클래스로부 터 넷마스크를 분류할 수 없을 것이다. 즉, 넷마스크를 255.255.0.0으로 인식하는 결과를 초 래하게 된다.

     # ifconfig eth0
     eth0    Link encap 10Mps Ethernet HWaddr 00:00:C0:90:B3:42
             inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
             UP BROADCAST RUNNING MTU 1500 Metric 1
             RX packets 0 errors 0 dropped 0 overrun 0
             TX packets 0 errors 0 dropped 0 overrun 0

지금 여러분은 ifconfig가 브로드캐스트 주소 (위에서 보는 Bcast)를 일반적인 값으로 설 정해 준다는 것을 볼 수 있다. 이 값은 호스트 비트의 모든 설정값을 가진 호스트 네트워크 번호이다. 또한, message transfer unit (커널이 이 인터페이스로 전송할 수 있는 이더넷 프 레임의 최대 크기)는 1500 바이트 최대값을 가진다. 이러한 모든 값들은 추후에 설명하게 될 특별한 옵션으로 override되어 있다.

루프백 설정작업 때와 유사하게, 지금부터 여러분은 라우팅 엔트리를 설치해야 한다. 이 작업은 eth0를 통해서 커널에 도달할 수 있는 네트워크를 통보해 주는 역할을 한다. Virtual Brewer에서 여러분은 다음과 같은 명령을 줄 수 있다.

     # route add -net 191.72.1.0

route가 어떤 경로를 거쳐서 인터페이스를 감지해 내지는 못하지만 이러한 작업이 오히 려 간단할지도 모른다: 커널은 구성되어 있는 모든 인터페이스를 검사하고 목적 주소 (이 경우에는 191.72.1.0)를 인터페이스 주소의 네트워크 부분 (인터페이스와 넷마스크의 비트 부분)과 비교를 한다. 여기에서 인터페이스는 단지 eth0와 일치된다.

그런데, 여기서 -net 옵션은 무엇일까? 이것은 route가 네트워크로 가는 경로와 단독 호 스트 (위에서도 보았듯이 이것은 localhost가 된다.)로 가는 경로, 두가지 다를 처리하기 때 문에 이 옵션을 사용한다. 주소가 dotted quad notation으로 주어질 때, route는 호스트 부분 의 비트가 네트워크 부분인지 호스트명 부분인지를 추적할 것이다. 만약 주소의 호스트 부 분이 0으로 되어 있다면, route는 그 주소가 네트워크를 나타내고 있다고 가정한다. 그래서, route는 191.72.1.0이 네트워크 번호 보다 오히려 호스트 주소라고 가정할 것이다. 왜 냐하 면, route가 지금 서브넷을 사용하고 있는지 알 수 없기 때문이다. 그러므로, -net 옵션을 줌으로써, 그것이 네트워크를 나타내고 있다고 명백하게 말해 주어야 한다.

물론, 위에서 준 route 명령은 어쩌면 조금 지루한 작업일 수도 있지만, 철자를 잘못 치 는 경우를 막을 수 있다. 이것보다 조금 더 편리한 방법이라면, /etc/networks에 네트워크 이름을 정의해 둘 수도 있다. 이것은 명령을 조금더 읽기 쉽게 하기 위한 명령이다; 심지어 -net옵션을 나타내 줄 수도 있다. 왜냐하면, route가 191.72.1.0이 네트워크를 가리키고 있 다는 것을 알고 있기 때문이다.

     # route add brew-net

지금까지 여러분은 기본적인 설정작업을 끝마쳤으며, 여러분의 이더넷 인터페이스가 실 제로 작동하고 있는지 알고 싶다. 여러분의 이더넷에서 vlager과 같은 호스트를 선택하라.

     # ping vlager
     PING vlager: 64 byte packets
     64 bytes from 191.72.1.1: icmp_seq=0, time=11. ms
     64 bytes from 191.72.1.1: icmp_seq=1, time=7. ms
     64 bytes from 191.72.1.1: icmp_seq=2, time=12. ms
     64 bytes from 191.72.1.1: icmp_seq=3, time=3. ms
     ^C

     ----vstout, vbrew.com PING Statistics----
     4 packets transmitted, 4 packets received, 0% packet loss
     round-trip (ms)  min/avg/max = 3/8/12

만약 여러분이 이와 다른 출력을 보았다면, 그것은 시스템이 깨졌다는 것을 의미한다. 만 약 평상시 보다 패킷 손실율이 지나치게 많다면, 그것은 하드웨어 문제일 가능성이 높다. 예 를들어, 터미네이터가 불량이라던지... 여러분이 만약 어떤 패킷도 받을 수 없다면, netstat로 인터페이스 구성환경을 검사해 보아야 한다. ifconfig에서 나타나는 패킷의 상태는 인터페이 스로 어떻게 패킷이 전달되는지를 알려준다. 만약 여러분이 원격 호스트로 접속하고 있다면, 그 기계 또한 인터페이스 상태를 검사해 보아야 한다. 이러한 방법으로 손실된 패킷이 어디 에 있는지를 알 수 있다. 게다가 여러분은 그 두 개의 호스트가 올바른 라우팅 엔트리를 가 지고 있는지를 알아 보기 위해서는 route라는 명령을 주어서 라우팅 정보를 살펴보아야 한 다. 아무런 옵션없이 route만 주어도 완전한 커널 라우팅 테이블을 출력한다. (-n 옵션은 호 스트 명을 사용하는 대신에 도트로 구분되어 있는 주소를 출력하는데에 사용한다.)

     # route -n
     Kernel routing table
     Destination  Gateway  Genmake          Flags  Metric  Ref  Use    Iface
     127.0.0.1    *        255.255.255.255  UH     1       0    112    lo
     191.72.1.0   *        255.255.255.0    U      1       0     10    eth0
이러한 필드가 가지고 있는 의미는 'Checking with netstat' 절에서 설명한다. Flag는 각 인터페이스에 대한 일련의 플래그이다. U는 언제나 활동중인 인터페이스를 보여주는 것이 고, H는 그 목적 주소가 호스트를 가리키고 있다는 것을 뜻한다. 만약 H 플래그가 네트워크 라 우트로 설정되어 있다면, 반드시 route 명령 다음에 -net 옵션을 붙여주어야 한다. 라우트가 제대로 작동하고 있는지 알아보려면, Use 필드가 두 개의 ping 호출사이에서 증가하고 있는 지를 확인해 보아라.

Routing through a Gateway

앞절에서는 하나의 이더넷 상에서 호스트를 설정하는 경우를 살펴보았다. 게이트 웨이를 통 해 또 다른 곳으로 연결되어 있는 네트워크를 많이 볼 수 있을 것이다. 이러한 게이트웨이 들은 단순하게 두 개 이상의 이더넷과 연결되어 있는 경우도 있지만, 인터넷과 같은 외부세 계와 연결되는 경우도 있다. 게이트웨이를 사용하기 위해서는 네트워킹 층에 추가적으로 라 우팅 정보를 제공해 주어야 한다.

이를테면, Virtual Brewery와 Virtual Winery의 이더넷들은 vlager이라고 하는 게이트웨 이에 연결되어 있다. vlager이 이미 구성되어 있다고 가정하자. 우리는 단지 vstout의 라우 팅 테이블에 또 다른 엔트리를 추가 시켜 주기만 하면 된다. 이렇게 하게 되면, 이 라우팅 테이블이 커널에 이야기 해서, vlager을 통해 Winery 네트워크에 있는 모든 호스트와 연락 할 수 있게 해준다. 이러한 작업에서 route에 적합한 incantation은 아래와 같다: gw 키워 드 는 다음 변수가 게이트웨이를 가리키도록 해주는 역할을 한다.

     # route add wine-net gw vlager

물론, 여러분이 이야기 하고 싶은 Winery 네트워크에 있는 어떤 호스트라도 Brewery 네 트워크에 일치하는 라우팅 엔트리가 있어야 한다. 그렇지 않으면, 여러분이 직접 vstout에 서 vbardolino로 데이터를 보낼 수도 있을 것이다. 하지만 vbardolino에서 돌아온 응답은 더 큰 버킷으로 보내질 것이다.

다음 예제는 두 개의 고립된 이더넷 사이에서 패킷을 교환하는 게이트웨이를 나타내준 다. 현재 vlager이 SLIP 링크를 통해서 인터넷과 연결되어 있다고 가정하자. 우리는 vlager에서 처리되는 데이터그램이 Brewery 이외의 목적 네트워크로 가길 원할 것이다. 이 러한 작업은 vstout를 디폴트 게이트웨이로 만들어 줌으로써 해결할 수 있다.

     # route add default aw vlager
0.0.0.0이라는 주소를 가지고 있으며, 네트워크 이름으로 default라고 하는 것은 디폴트 라 우트를 나타내는 것이다. 이 이름은 route에 내장되어 있기 때문에 /etc/networks에 추가할 필요는 없다.

만약 호스트를 ping했을 때, 하나 이상의 게이트웨이를 거치면서 패킷의 거대한 손실이 발생된다면, 현재 혼잡한 네트워크에 있다는 것을 의미한다. 패킷 손실은 기술 부족면 보다 는 일시적인 과부하 때문에 발생하는 것이다. 그런 경우 들어오는 데이터가 지연되거나 감 소되기도 한다.

Configuring a Gateway

두 개의 이더넷 사이에서 패킷을 교환하기 위해 컴퓨터를 구성하는 작업은 매우 간단하다. 다시, vlager로 돌아와서 이것이 두 개의 이더넷 보드를 갖추고 있으며, 두 개 중의 하나의 네트워크로 연결하고 있다고 가정하자. 여러분은 각각의 인터페이스를 구성해 주어야 하며, 그 인터페이스에 그것들만의 IP 주소를 할당해 주어야 한다.

두 개의 인터페이스에 관한 정보를 아래와 같은 방법으로 hosts 파일에 추가시켜 주는 것이 유용하다. 그렇게 되면, 그 인터페이스에게 이름을 부여해 주는 작업이 용이해 지기 때 문이다:

     191.72.1.1      vlager       vlager.vbrew.com
     191.72.1.1      vlager-if1
     191.72.2.1      vlager-if2

다음과 같은 순차적인 명령으로 두 개의 인터페이스를 설정해 줄 수 있다:

     # ifconfig eth0 vlager-if1
     # ifconfig eth1 vlager-if2
     # route add brew-net
     # route add wine-net

The PLIP Interface

두 대의 컴퓨터를 PLIP 링크를 시킬때는 이더넷을 사용할 때 해야 하는 작업과는 약간 다 르다. 전에는 브로드캐스트 네트워크와는 정 반대로, 단지 두 대의 호스트를 연결시켰기 때 문에 point-to-point라고 불렀다.

예를 들어, Virtual Brewery에 있는 몇몇 근로자들이 그들의 랩톱 컴퓨터를 PLIP을 사 용해서 vlager에 연결한다고 가정하자. 랩톱 그 자체를 vlite라고 부르며, PLIP에서는 단지 하나의 패러랠 포트만이 필요하다. 부팅시에, 이 포트는 plip1으로 등록될 것이다. 이 링크를 활성화 시키기 위해서는, 다음과 같은 명령을 사용해서, plip1 인터페이스를 구성해 주어야 한다.

     # ifconfig plip1 vlite pointopoint vlager
     # route add default gw vlager

첫 번째 명령어는 인터페이스를 구성하는 것이다. 즉, vlager의 주소를 가지고 있는 원 격지 주소로 point-to-point 연결을 한다고 커널에게 말해주는 역할을 한다. 그리고 두 번째 명령어는 게이트웨이 역할을 하는 vlager을 사용해서 디폴트 라우트를 설치하는 것이다. vlager상에서, ifconfig가 하는 역할은 링크를 활성화시키는 데에 꼭 필요하다. (route는 그 다지 필요하지 만은 않다.):

     # ifconfig plip1 vlager pointopoint vlite

흥미로운 점은 vlager에 있는 plip1 인터페이스가 꼭 IP 주소를 가지고 있어야 될 필요 는 없지만 실제로 191.72.1.1이라는 주소를 가지고 있을 수도 있다.

현재 우리는 랩톱 컴퓨터에서 Brewery의 네트워크로 경로를 지정해 주어야 한다; Brewery의 호스트에서 vlite로 경로를 배정하는 과정에서 빼먹은 부분이 있다. 약간은 귀찮 은 방법이지만, 모든 호스트의 라우팅 테이블에 vlager이름의 게이트웨이를 vlite로 다시 경로를 배정해 주는 것이다:

     # route add vlite gw vlager

임시적인 라우트에 직면했을 때, 그에 대한 좋은 해결책으로는 동적 라우팅을 사용하는 방법이 있다. 즉 라우팅 정보를 동적으로 분배하기 위해서는 모든 네트워크에 있는 호스트 에 라우팅 데몬인 gated를 설치해야 한다. 그러나 초기 시절에는 proxy ARP를 사용했었다. 그당시, proxy ARP를 가지고 있는 vlager은 그 자체의 이더넷 주소를 보냄으로써, vlite로 오는 어떤 ARP 질의에도 응답할 수 있었다. 이러한 효과로 vlite에 있는 모든 패킷들이 vlager로 완벽하게 전송되고, 그런다음 그 패킷들은 랩톱 컴퓨터로 다시 전송될 수 있었다. proxy ARP에 관한 자세한 사항들은 'Checking tht ARP Tables'에서 다루기로 하자.

미래의 Net-3 배포본에서는 plipconfig라고 하는 도구를 포함할 것이다. 이 도구는 여러 분이 프린터 포트의 IRQ를 설정할 수 있도록 만들어 준다. 어쩌면 이것이 일반적으로 사용 하는 ifconfig 명령 대신에 사용될 수도 있을 것이다.

The SLIP and PPP Interface

비록 SLIP와 PPP 링크가 PLIP 연결 때 처럼 단순하게 point-to-point 링크를 사용하고는 있지만, 이 두가지에 대해 이야기 할 것이 더 많다. 대개, SLIP 연결을 성립하기 위해서는 먼저 여러분의 모뎀을 통해서 원격지로 다이얼링 업을 해야하고, SLIP 모드에 맞게 시리얼 라인을 설정해 주어야 한다. PPP는 단순히 유행에 따라 사용된다. SLIP와 PPP 링크를 설정 할 때 필요한 도구는 7장과 8장에서 자세히 설명하겠다.

The Dummy Interface

더미 인터페이스는 정말 색다른 것이지만 매우 유용하게 쓰인다. 이것은 스탠드얼론 호스트 와 IP 네트워크 연결해서 다이얼 업 링크를 지원해 준다. 사실 후자도 스탠드얼로 호스트라 고 할 수 있다.

스탠드 얼론 호스트에서는 단독 네트워크 장치와 대개 주소가 127.0.0.1로 할당된 루프 백 장치를 활성화 시키는 일을 한다. 어떤 경우에는, 여러분이 로컬 호스트의 공식 IP 주소 로 데이터를 보낼 필요도 있다. 이를테면, vlite라고 하는 랩톱 컴퓨터가 있다고 가정 하자. 그것은 오랜동안 연결되어 있는 어떤 네트워크의 연결을 끊는 경우도 있다. vlite에 있는 어 플리케이션이 같은 호스트상에 있는 또 다른 어플리케이션으로 어떤 데이터를 보내고 싶어 할 지도 모른다. /etc/hosts에 있는 vlite가 191.72.1.65라는 IP 주소를 찾은 다음, 그 어플 리케이션은 이 주소로 데이터를 보내려고 시도할 것이다. 그 컴퓨터에서 활성화된 인터페이 스라고는, 루프백 인터페이스밖에 없으며, 실제로 커널은 이 주소가 그 인터페이스를 참조하 고 있는지는 알지 못한다. 결과적으로 볼 때, 커널은 그 데이터그램을 폐기처분하고 어플리 케이션으로 어떤 에러를 보내줄 것이다.

이러한 곳에 더미 디바이스가 필요하다. 이것은 단지 루프백 인터페이스를 변경시켜 줌 으로써 이러한 딜레마를 해결해 준다. vlite의 경우에, 여러분은 단순히 191.72.1.65라는 주소를 할당해 주고, 호스트의 라우트가 그 주소를 가리키도록 해 주기만 하면 된다.

191.72.1.65를 위한 모든 데이터그램은 지역적으로 전송될 것이다.

     # ifconfig dummy vlite
     # route add vlite

5.8 All About ifconfig

ifconfig에는 우리가 위에서 설명한 것보다 훨씬 더 많은 변수가 있다. 일반적으로 사용하는 옵션으로는 다음과 같은 것이 있다.

     ifconfig interface [[-net | -host] address [parameters]]

interface는 인터페이스명 이고, address는 인터페이스로 할당된 IP 주소이다. dotted quad notation로 표기되어 있는 IP 주소나 그 이름은 ifconfig가 /etc/hosts와 /etc/networks 에서 찾을 것이다. -net와 -host 옵션은 ifconfig가 네트워크 번호나 호스트 주소를 개별적 인 주소로 다룰 때 사용한다.

만약 ifconfig가 단지 인터페이스 이름만을 가지고 있다면, 그것은 인터페이스의 구성환경 을 나타낼 것이다. 아무 변수 없이 ifconfig만을 입력하였을 때는, 여러분이 설정한 모든 인 터페이스를 나타낼 것이다; -a 옵션은 활동하고 있지 않은 인터페이스의 목록을 보여줄 것 이다. 이더넷 인터페이스인 eth0는 다음과 같이 보여질 것이다:

     # ifconfig eth0
     eth0     Link encap 10Mbps Ethernet HWaddr 00:00:C0:90:B3:42
              inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
              UP BROADCAST RUNNING  MTU 1500  Metric 0
              RX packets 3136 errors 217 dropped 7 overrun 26
              TX packets 1752 errors 25 dropped 0 overrun 0

MTU와 Metric 필드는 현재 MTU와 인터페이스의 미터값 (metric value)을 보여준다. 미 터값 (metric value)은 전형적으로 라우트의 량을 계산하기 위해 몇몇 운영 체제에 의해서 사용되었다. 리눅스는 이러한 값을 사용하진 않지만, 호환성을 가지고 있기는 하다.

RX와 TX 라인은 얼마나 많은 패킷을 받고 있는지, 전송되었는지, 얼마나 많은 에러가 발 생했는지, 또는 메모리 부족으로 얼마나 많은 양의 패킷이 손실되었는지, 오버런으로 인해 얼마나 많은 피해가 있는지를 보여준다. 리시버 오버런 (receiver overrun)은 대개 커널이 인터럽트를 거는 속도보다 패킷이 더 빠르게 전송될 때 발생한다. 아래 설명은 ifconfig에 속해 있는 옵션을 보여주고 있으며, 각 옵션이 하는일이 무엇인가를 나타내 주고 있다.이러 한 옵션은 항상 ifconfig 다음에 (-) 대쉬를 붙여서 사용한다.

UP

이것은 인터페이스를 "up"하라는 표시이다. 즉, IP 층 (layer)로 접근가능하게 만들 때 사용한다. 이 옵션은 address가 명령어로 주어질 때 수행된다. 이것은 또한 인터페이스를 재사용할 때 쓰이며, 이것은 down 옵션을 일시적으로 사용가능하게 만들어 준다. (이 옵션은 UP RUNNING 플래그와 일치한다.)

down

이것은 인터페이스를 "down"하라는 표시이다. 즉, IP 층(layer)으로 접근하지 못하게 만들 때 사용한다. 이것은 실제로 그 인터페이스를 통해서 어떤 IP 트래픽을 사용 하지 못하게 만든다. 이것이 이 인터페이스를 자동으로 사용할 수 있게 해주는 모든 라우팅 엔트리들을 지워버리는 것이 아님을 기억해 두라. 만약 여러분이 그 인터페이스를 영원히 사용하지 못하게 만들어 버릴것이라면, 이러한 라우팅 엔트리들을 지워버림과 동시에, 경로를 지정해 주어야 한다.

netmask mask

이것은 인터페이스로 사용되고 있는 서브넷 마스를 할당해 준다. 이것은 0x와 같이 32비트 16진수로 표시하거나, 도트로 구분하는 네 개의 십진수로 표시한 다.

pointopoint address

이 옵션은 두 개의 호스트를 point-to-point IP 링크를 위해 사용된다. 예를 들어 SLIP 또는 PLIP 인터페이스를 구성할 때 이 옵션이 필요 하다. (만약 point-to-point 주소가 설정되어 있다면, ifconfig는 POINTOPOINT 플래그를 표시해 줄 것이다.)

broadcast address

브로드캐스트 주소는 대개 호스트 부분의 모든 비트를 설정함으로 써, 네트워크 번호를 구성한다. 몇몇 IP implementation들은 다른 스키마를 사용한다; 이 옵션 은 이러한 이상한 환경을 사용할 수 있게 해준다. (만약 브로드캐스트 주소가 설정되어 있다면, ifconfig는 BROADCAST 플래그를 표시 해 줄 것이다.)

metric number

이 옵션은 인터페이스가 만들어진 라우팅 테이블 엔트리의 미터값을 할당하는데에 사용될지도 모른다. 이 metric는 네트워크를 위한 라우팅 테이블을 만들기 위해 Routing Information Protocol (RIP)에 의해 사용된다. ifconfig에 사용되는 디폴트 미터값은 0이다. 만약 여러분이 RIP 데몬을 실행하지 않고 있다면, 이 옵션을 사용할 필요는 없다; 만약 RIP 데몬을 실행시켰다면, 이 미터값을 변경 시킬 필요는 거의 없다.

mtu bytes

이것은 Maximum Transmission Unit, 즉 인터페이스가 하나 의 트랜잭션에서 처리할 수 있는 최대 옥텟수를 설정할 때 사용한다. 이더넷에서 MTU 디폴트값은 1500이며, SLIP 인터페이스에서는 296이 된다.

arp

이것은 이더넷이나 패킷 라디오와 같은 브로드캐스트 네트워크를 명시하는데에 사용 하는 옵션이다. 이것은 또한 호스트의 물리 주소가 네트워크로 접근하는 것을 감지해내기 위해 사용되는 ARP, Address Resolution Protocol을 사용할 수 있게 해준다. 브로드 캐스트상에서는 디폴트로 설정되어 있다. (ARP를 사용하고 있지 않다면, ifconfig는 NOARP라고 표시해 줄 것이다.)

-arp

인터페이스에서 ARP사용을 할 수 없게 해 주는 옵션이다.

promisc

promiscuous 모드로 인터페이스를 설정해준다. 브로드캐스트 네트워크상에서, 이것은 패킷이 다른 호스트에 묶여 있음에도 불구하고, 모든 패킷을 받아 주는 인터페이스 를 만들어 준다. 이것은 또한 네트워크 트래픽이 Ethernet snooping와 같은 패킷 필터를 사용할 수 있게끔 만들어 준다. 대개 이 옵션은 네트워크의 문제를 해결하는 좋은 기술이다 다른 한편으로, 이것은 칩입자들이 여러분의 패스워드를 알아내기 위해 네트워크 트래픽을 넘기거나 다른 성가신 일을 하게 만들 수도 있다. 이러한 칩입에 대항하는 한 방편으로는 여러분의 컴퓨터로 칩입자들이 직접 들어올 수 없게끔 하는 것이다. Kerberos와 SRA와 같은 인증 프로토콜을 사용하는 것이다. (이 옵션은 PROMISC와 일치한다.)

-promisc

promiscuous 모드를 꺼 놓는다.

allmulti

멀티캐스트 주소는 같은 서브넷에 있을 필요가 없는 호스트 그룹을 브로드캐스트한다. 멀티캐스트 주소는 아직 커널에서 지원하지는 않는다. ( 이 옵션은 ALLMULTI 플래그와 일치한다.)

-allmulti

멀티캐스트 주소를 사용하지 않게 한다.

5.9 Checking with netstat

다음으로, 나는 여러분의 네트워크 환경을 검사하고 활성화 시킬 때 유용하게 사용하는 도 구를 설명할 것이다. 이것은 netstat라고 부르며, 사실 여러 가지 도구와 함께 사용한다. 그 도구의 각 기능들은 다음절에서 설명하겠다.

Displaying the Routing Table

-r 플래그와 netstat를 같이 사용하게 되면, 위에서 route를 설명할 때와 마찬가지로 커널의 라우팅 테이블을 표시해 준다. vstout에서는 다음과 같이 나타난다:

     # netstat -nr
     Kernel routing table
     Destination    Gateway     Genmask          Flags  Metric Ref Use  Iface
     127.0.0.1      *           255.255.255.255  UH     1      0    50  lo
     191.72.1.0     *           255.255.255.0    U      1      0   478  eth0
     191.72.2.0     *           255.255.255.0    UGN    1      0   250  eth0

-n 옵션은 netstat가 심볼릭 호스트와 네트워크 이름대신에 도트로 구분된 네 개의 IP 숫자로 주소를 표시하게끔 해준다. 이것은 여러분이 네트워크를 통해서 주소를 찾는 작업을 피하고 싶을 때 유용하게 사용된다. (예를 들어, DNS 또는 NIS 서버)

netstat의 출력에서 두 번째 칼럼은 게이트웨이가 라우팅 엔트리를 가리키고 있는지를 보여준다. 만약 게이트웨이를 사용하고 있지 않다면, 위와 같이 아스트릭 문자 (*)가 표시된 다. 그 다음 세 개의 칼럼은 라우트의 "일반성(generality)"를 보여준다. 주어진 IP 주소가 그와 적합한 라우트를 발견했을 때, 커널은 모든 라우팅 테이블 엔트리를 거쳐서, genmask 와 목적 라우트를 AND 연산자로 비교한다.

네 번째 칼럼은 아래와 같이 여러 가지 플래그 표시해 준다:

G

라우트가 게이트웨이를 사용한다.

U

인터페이스가 사용되고 있다.

H

오직 단독 호스트만이 라우트를 거쳐서 접근할 수 있다. 예를들어, 이러한 경우의 루프백 엔트리는 127.0.0.1이다.

D

테이블 엔트리가 설정된 경우, ICMP 리다이렉트 메시지에 의해 운영되고 있다.

M

테이블 에트리가 설정된 경우, ICMP 리다이렉트 메시지에 의해 수정되고 있다.

netstat 출력에서 Ref 칼럼은 이 라우트를 참조하는 번호를 나타낸다. 즉, 얼마나 많은 라우트가 이 라우트에 의존하고 있는지를 나타낸다. 마지막 두 칼럼은 라우팅 엔트리가 사 용되었는지, 얼마나 많은 데이터 그램이 인터페이스로 전송되었는지를 나타내준다.

Displaying Interface Statistics

-i 플래그와 netstat를 함께 사용하면, 현재 구성되어 있는 네트워크 인터페이스의 상태를 보여준다. 거기에 다가 -a 플래그를 주게 되면, 커널에 존재하는 것 뿐만 아니라, 현재 구성 되어 있는 모든 인터페이스를 보여 줄 것이다. vstout에서, netstat의 출력은 다음과 같다:

     $ netstat -i
     Kernel Interface table
     Iface  Mtu  Met    RX-OK RX-ERR   RX-DRP RX-OVR  TX-OK   TX-ERR 
TX-DRP TX-OVR Flags
     lo       0   0    3185      0      0      0   3185      0      0      0 BLRU
     eth0  1500   0  972633     17     20    120 628711    217      0      0 BRU

MTU와 Met 필드는 인터페이스의 현재 MTU와 미터값 (metric value)을 보여준다. RX 와 TX 칼럼은 얼마나 많은 패킷과 에러가 전송되고 보내졌는지 (RX-OK/TX-OK), 그리고 손상을 입었는지 (RX-ERR/TX-ERR), 얼마나 많은 양의 패킷이 감소되었는지 (RX-DRP/TX-DRP), 오버런 으로 인해 손실된 양은 얼마나 되는지 (RX-OVR/TX-OVR)를 나타내 준다.

마지막 칼럼은 이러한 인터페이스가 어떻게 설정되었는지를 나타내주는 플래그이다. 이 러한 형태의 긴형태의 플래그 이름은 여러분이 ifconfig로 인터페이스 구성환경을 잡아줄 때 출력된다.

B

브로드캐스트 주소가 설정되어 있다.

L

이 인터페이스는 루트백 인터페이스이다.

M

모든 패킷이 전송되고 있다. (promiscuous 모드)

N

Trailer은 피한다.

O

이 인터페이스를 위한 ARP가 꺼져 있다.

P

이것은 point-to-point 연결이다.

R

인터페이스가 실행되고 있다.

U

인터페이스가 up상태임

Displaying Connections

netstat는 활동하고 있는 소켓을 표시해 주기 위한 옵션을 가지고 있다. -t, -u, -w 그리고, -x 옵션은 활동중인 TCP, UDP, RAW 또는 UNIX 소켓 연결을 보여준다. 여기에 -a 옵션 을 추가한다면, 현재 연결을 기다리는 소켓을 표시해 준다. 현재 여러분의 시스템에서 실행 되고 있는 모든 서버의 목록을 보여 줄 것이다.

vlager에서 netstat -ta는 다음과 같은 화면을 출력한다.

     $ netstat -ta
     Active Internet connections
     Proto  Recv-Q  Send-Q  Local Address    Foreign Address     (State)
     tcp         0       0  *:domain         *:*                 LISTEN
     tcp         0       0  *:time           *:*                 LISTEN
     tcp         0       0  *:smtp           *:*                 LISTEN
     tcp         0       0  vlager:smtp      vbardolino:1040     ESTABLISHED
     tcp         0       0  *:telnet         *:*                 LISTEN
     tcp         0       0  localhost:1046   vbardolino:telnet   ESTABLISHED
     tcp         0       0  *:chargen        *:*                 LISTEN
     tcp         0       0  *:daytime        *:*                 LISTEN
     tcp         0       0  *:discard        *:*                 LISTEN
     tcp         0       0  *:echo           *:*                 LISTEN
     tcp         0       0  *:shell          *:*                 LISTEN
     tcp         0       0  *:login          *:*                 LISTEN
이것은 대개 연결을 기다리는 모든 서버를 보여준다. 하지만 네 번째 라인은 vstout에서 들어오는 SMTP연결을 보여준다. 그리고 여섯 번째 라인은 vbardolino로 telnet을 이용한 외부연결이 있음을 나타낸다.

-a 플래그를 사용하면, 모든 집단의 모든 소켓을 보여준다.

5.10 Checking the ARP Tables

어떤 경우에는 커널의 ARP 테이블의 내용을 보거나 변경시키는 것이 유용할 때도 있다. 예 를 들어, 여러분이 똑 같은 인터넷 주소가 하나 더 있다고 의심하는 경우, 복잡한 네트워크 문제를 발생시킬 수도 있다. 이러한 문제를 해결하기 위해 만들어진 것이 바로 arp이다. 명 령행에서 옵션은 다음과 같이 쓰인다.

     arp [-v] [-t hwtype] -a [hostname]
     arp [-v] [-t hwtype] -a hostname hwaddr
     arp [-v] -d hostname [hostname...]

모든 hostname 변수는 심볼릭 호스트 네임이나 dotted quad notation으로 표기된 IP 주 소를 말하는 것이다.

첫 번째 명령행은 만약 그것이 no hostname으로 주어졌다면, 알려진 모든 호스트와 IP 주소 그리고 특별한 호스트의 ARP 엔트리를 보여준다. 예를 들어, vlager에서 arp를 사용 하게 되면 다음과 같은 출력이 나타난다.

     # arp -a
     IP address       HW type                   HW address
     191.72.1.3       10Mbps Ethernet           00:00:C0:5A:42:C1
     191.72.1.2       10Mbps Ethernet           00:00:C0:90:B3:42
     191.72.2.4       10Mbps Ethernet           00:00:C0:04:69:AA

vlager, vstout 그리고 vale의 이더넷 주소를 보여주고 있다.

-t 옵션을 사용하면, 특별한 형태의 하드웨어 출력을 제한할 수 있다. 이것은 각각 ether, ax25, 또는 pronet, 10Mbps 이더넷을 기본으로 하고있는 하드웨어, AMPR AX.25, 그 리고 IEEE 802.5 token ring 방식의 하드웨어가 될 수도 있다.

-s 옵션은 ARP 테이블에 hostname의 이더넷 주소를 영구히 추가시키고자 할 때 사 용한 다. hwaddr 변수는 하드웨어 주소를 명시한다. 기본적으로는 이더넷 주소를 나타낸다. 그리 고 이것은 각각 콜론 (:)으로 구별되어 있는 여섯 개의 16진수로 구성되어 있다. 여러분은 어쩌면 -t 옵션을 사용해서, 다른 형태의 하드웨어 주소를 설정할 수도 있다.

원격 호스트가 ARP 질의를 거부하는 경우에는, ARP 테이블에 IP 주소를 수동으로 잡아 주라는 메시지가 뜬다. 이러한 현상이 발생하는 원인이라면, ARP 드라이버에 버그가 발생 했다던지, 호스트의 IP 주소를 잘못 인식한 네트워크에 또 다른 호스트가 있을 경우 이러한 문제가 발생한다. ARP 테이블에 있는 hard-wiring IP 주소는 여러분의 이더넷 상에서 여러 분의 호스트를 보호할 수 있는 도구이다.

-d 스위치와 함께 arp를 사용하게 되면, 주어진 호스트와 연관되어 있는 모든 ARP 엔트 리들을 삭제해 버린다. 이것은 인터페이스로 하여금 문제시 되고 있는 IP 주소에 대한 이더 넷 주소를 가지게끔 하기위해 강제로 재시도 하는데에 사용되기도 한다. 이것은 또한 잘못 구성되어 있는 시스템이 잘못된 ARP 정보를 브로드캐스트하는데에도 유용하게 쓰인다. (물 론 이러한 작업을 하기 전에, 여러분이 깨진 호스트를 재구성해야 한다.)

-s 옵션은 proxy ARP를 구현하는데에도 사용된다. 이것은 gate라고 하는 호스트 를 fnord라고 하는 또 다른 호스트 게이트웨이로 작동하도록 만들어 주는 기술로써, 두 개의 주소가 이름하여 gate라고 하는 같은 호스트를 참조하도록 만들어 준다. 즉, 그것은 그 자 체의 이더넷 인터페이스를 가리키는 fnord를 위한 ARP 엔트리를 사용함으로써 그렇게 할 수 있다. 호스트가 fnord를 위한 ARP 질의를 보내고자 할 때, gate는 이더넷 주소를 포함 하고 있는 응답을 되돌려 줄 것이다. 질의를 하고 있는 호스트가 gate로 모든 데이터그램을 보내 고자 할 때에는 의무적으로 fnord에 그 자료들을 전송할 것이다.

이를테면, 여러분이 TCP도 구현하지 못하고, 라우팅도 그다지 이해하지 못하는 DOS 머 신에서 fnord로 엑세스하고자 할 때에는 이러한 곡예도 필요하다. 여러분이 proxy ARP를 사용한다면, 마치 fnord가 로컬 서브넷에 있는 것처럼, 여러분이 DOS 머신에 접속한 것처 럼 보일 것이다. 그래서, 게이트웨이를 통해 라우트를 하는 방법은 알필요가 없다.

proxy ARP에서는 매우 유용하게 사용할 수 있는 또 다른 어플리케이션이 있다. 즉, 다 이얼 업 링크를 사용해서, 여러분의 호스트를 일시적으로 게이트웨이처럼 동작하게 만들어 주는 것이다. 이전에, 우리는 이따금 PLIP 링크를 거쳐서, vlager에 연결되어 있는 랩톱 vlite를 보았다. 물론 여러분이 proxy ARP를 제공하고자 하는 호스트의 주소는 게이트웨이 에 있는 같은 서브넷 상에서 동작할 것이다. 이를테면, proxy ARP를 사용하고 있는 vstout 는 Brewery 서브넷 (191.72.1.0)에서는 호스트가 될 수 있지만, Winery 서브넷 (191.72.2.0) 에서는 절대로 호스트가 될 수 없다.

fnord에게 proxy ARP를 제공하는 적절한 방법은 다음과 같다; 물론 gate는 이더넷 주 소를 가지고 있어야 한다.

     # arp -s fnord 00:00:c0:a1:42:e0 pub

다음과 같은 방법으로 proxy ARP 엔트리를 제거할 수도 있다.

     # arp -d fnord

5.11 The Future

리눅스 네트워킹은 여전히 진화하고 있다. 커널에서 주요 변화라고 한다면, 구성환경을 전보 다 매우 유연하게 변경시킬 수 있다는 것이다. 즉, 커널은 여러분이 실행시간에 네트워크 장 치를 구성하게 해준다. 이를 테면, ifconfig 명령은 IRQ와 DMA 채널과 같은 변수를 설정 해준다.

또 다른 변화라고 한다면, route 명령에 mtu 플래그를 추가 시킨 점이다. 이 명령으로 특 별한 라우트를 위해 최대 전송 단위 (Maximum Transmission Unit)를 설정해 줄 수 있다. MTU가 설정된 라우트는 인터페이스에 명시되어 있는 MTU를 무효화 시킬 수 있다. 여러 분은 전형적으로 게이트웨이와 매우 낮은 MTU를 필요로 하는 목적 호스트를 연결하고 있 는, 게이트웨이를 통해 라우트를 사용할때에는, 이 옵션을 사용할 것이다. 예를 들어, 호스트 wanderer이 SLIP 링크를 통해서 vlager에 연결되어 있다고 가정하자. vstout에서 wanderer 로 데이터를 보내고자 할 때, wanderer에 있는 네트워킹 층 (layer)은 패킷들이 이더넷을 거 쳐서 보내지기 때문에, 최고 1500 바이트 패킷을 사용할 것이다. 한편, SLIP 링크는 296 바 이트 MTU로 운영되어야 하고, vlager의 네트워크 층은 IP 패킷들을 296 바이트씩 쪼개어 서 보내야 한다. 대신에 여러분이 vstout에서 라우트를 설정할 때, 시작시 296 바이트 MTU 를 사용하게끔 설정해 놓았다면, 상대적으로 조각을 나눌 때 드는 비용을 줄일 수 있다.

     # route add wanderer gw vlager mtu 296

여러분이 직접 설정할 수 있는 mtu 옵션또한 'Subnet Are Local' 정책 (SNARL)의 결 과로 취소되었다는 것을 명심하라. 이 정책은 커널 환경 구성 옵션에도 영향을 주었으며, 3 장에서 설명했었다.


다음 이전 차례