글쓴이 : 선 아 (kerygma@chollian.net)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
네트워크로 모든 정보를 교류하는 지금 우리들은 넷맹이라는 새로운 단어를 접하게 됐다. 거대한 네트워크인 인터넷에서 탄생한 리눅스로 우리 모두 넷맹에서 탈출하자. 인터넷의 기본 프로토콜이며, 모든 유닉스 계열의 운영체제는 기본적으로 TCP/IP 프로토콜로 통신을 한다는 사실을 알고 있을 것이다. TCP/IP (Transmission Control Protocol / Internet Protocol) 일단, TCP/IP를 이해하기에 앞서 네트워크 프로토콜의
개념을 이해하는 것이 순서일 것이다.
네트워크 프로토콜 네트워크 프로토콜은 크게 4부분으로 나눌 수
있다. ■ 물리 계층 프로토콜 ■ 네트워크 계층 프로토콜 ■ 트랜스포트 계층 프로토콜 TCP : 연결 지향적인 프로토콜이다. 쉽게 말해서
데이터를 주고받을 때 데이터를 검사하여 이상 유무를 알리는 방식으로,
정확한 데이터를 보낼 수 있다. UDP : TCP 와는 달리 비연결형 프로토콜이다.
TCP 기본구조는 같으나, 데이터가 목적지에 도착하는 것에 대한
보장이 없다. 하지만, TCP와 관련된 overhead가 없으므로, NFS 나
DNS 같은 서비스에 보다 효율적인 인터페이스를 제공한다. ■ 애플리케이션 계층 프로토콜
IP 어드레스(IP Addresses) IP 어드레스는 TCP/IP Protocol을 사용하기 위해서는 반드시 필요한 사항이다. IP 어드레스의 구성 현재 사용하고 있는 IP어드레스의 구성은 IPv4의
규격을 따른다. IP 어드레스는 32비트로 구성이 되어 있으며, 보기
쉽도록 점(.)으로 구별된 4개의 숫자(10진수)로 표시한다. (8비트씩으로
나누기 때문에 표현 가능한 수는 0 부터 255까지 이다.) 하지만 위 영역의 모든 어드레스가 다 사용 가능한
것은 아니다. IP 어드레스 중에는 네트워크를 표시하는 부분이 있고,
호스트를 표시하는 부분이 있다. 어떤 부분이 네트워크와 호스트를
표시하는 지는 “클래스”에 의하여 결정된다.
* 편의상 비트로 표기했지만, 객관적인 용어로는 “flag”가 더 정확하다. A 클래스 - 8 비트 의 네트워크 비트, 24 비트의
호스트 비트로 구성
클래스 현재 사용되고 있는 클래스는 3 가지이다. ■ A 클래스 IP 어드레스 중 가장 왼쪽의 8비트가 네트워크를 표시해 주며, 가장 왼쪽 비트는 0으로 고정되어 있다. 그렇기 때문에 아래와 같이 표시할 수 있으며, - 0NNNNNNN.HHHHHHHH.HHHHHHHH.HHHHHHHH 0.XXX.XXX.XXX ~ 127.XXX.XXX.XXX 에 해당하는 범위를 가지고 있다. A 클래스는128개의 각기 다른 네트워크가 존재하고, 하나의 네트워크에 1600만 여대의 호스트를 가질 수 있다. **아래는 특별한 의미를 가지는 네트워크이다. 네트워크 0.0.0.0 은 디폴트 라우터에서
사용하며, ■ B 클래스 IP 번호 중 가장 왼쪽의 8비트가 네트워크를 표시해 주며, 가장 왼쪽 비트는 10으로 고정되어 있다. 그렇기 때문에 아래와 같이 표시할 수 있으며, - 10NNNNNN.NNNNNNNN.HHHHHHHH.HHHHHHHH 128.XXX.XXX.XXX ~ 191.XXX.XXX.XXX 에 해당하는 범위를 가지고 있다. B 클래스는 16,384개의 각기 다른 네트워크가 존재하고, 하나의 네트워크에 65,000여개의 호스트를 가질 수 있다. ■ C 클래스 IP 번호 중 가장 왼쪽의 8비트가 네트워크를 표시해 주며, 가장 왼쪽 비트는 110으로 고정되어 있다. 그렇기 때문에 아래와 같이 표시할 수 있으며, - 110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH 192.XXX.XXX.XXX ~ 223.XXX.XXX.XXX 에 해당하는 범위를 가지고 있다. C 클래스는 2,097,152개의 각기 다른 네트워크가 존재하고, 하나의 네트워크에 254개의 호스트를 가질 수 있다.
* 인터넷에서 사용하지 않는 네트워크 IP 네트워크를 사용하지만 인터넷에서 사용하지 않는 특별한 주소가 있다. 한 개의 A 클래스 네트워크 - 10.0.0.0
서브넷 마스크 네트워크 마스크라고도 불리 우며, 서브넷 마스크는
네트워크의 크기를 참고하는데 쓰인다. 모든 네트워크 비트를 ‘1’로 바꾸고, 모든 호스트 비트를 ‘0’으로 바꾸면 된다. 그럼, 세 가지 클래스 네트워크의 기본적인 서브넷
마스크를 보자
A 클래스 네트워크의 서브넷 마스크 : 255.0.0.0
네트워크 어드레스, 브로드캐스트 어드레스 네트워크 어드레스는 호스트 비트가 모두 ‘0’
이다. 브로드캐스트 어드레스는 호스트 비트가 모두
‘1’ 이다.
서브넷 서브넷은 아주 쉽게 말해서 하나의 네트워크를 여러 개의 서브 네트워크로 쪼개어 사용하는 기술이다. (서브넷 마스크와 혼돈하지 말 것) ‘왜 서브넷을 사용할까?’라는 의문점이 생길
것이다.. 실제적인 예를 들면, 그래서 서브넷을 이용하여 B 클래스 네트워크를
쪼개어 부서별이나 지사별로 할당한다면, 트래픽을 많이 줄일 수
있어 효율성을 높일 수 있다. 그리고 할당해주고 남는 IP들은 계열사나
고객들에게 나누어주어 사용할 수도 있을 것이다.(ISP 같이) 요즘, 많이 생긴 게임방의 예를 들어보자...
서브넷은 어떤 식으로 나눌까? 의외로 간단하다 모두 서브넷 마스크에서 한다. 호스트 비트를 네트워크 비트로 바꾸어주면 된다. 하지만 서브넷을 나눌 때 주의할 점이 있다.
사용하지(?) 못하는 IP가 생긴다는 것이다. C 클래스 네트워크를 예로 들겠다.
게이트웨이(Gateway) 네트워크상의 정보나 데이터가 지역네트워크가 아닌 외부 네트워크(인터넷이나 다른 서브네트워크)로 가야할 경우 외부 네트워크와 연결이 되어 외부 네트워크로 나가는 통로 역할을 하는 장비이다. 물론 외부네트워크에서 지역 네트워크로 정보가 들어올 수도 있다. 이러한 기능은 라우팅이란 기술을 사용한다.
* 디폴트 게이트웨이(Default Gateway) 디폴트 라우터(Default Router)라고도 한다. 하나의 네트워크에 다수의 게이트웨이를 설치할 수 있다. 기본적으로 외부망을 이용할 때 사용하는 게이트웨이를 디폴트 게이트웨이라 칭한다. 보통, 인터넷과 연결이 되어 있다면, 인터넷과 전용선으로 연결되어 있는 라우터가 디폴트 게이트웨이가 된다. 디폴트 게이트웨이 설정은, route 명령으로도 할 수 있으며, 형식은 route add default gw 디폴트게이트웨이IP
나 호스트명 라우터 명령으로 디폴트 게이트웨이를 추가 할 경우 시스템을 재부팅시킬 경우 다시 입력해주어야 한다. 이러한 경우 재부팅해도 게이트웨이가 바뀌지 않도록, netcfg나 netconf 를 이용하여 디폴트 게이트웨이를 추가 하면 되고, 만일 이러한 프로그램이 설치되지 않은 시스템에서는 /etc/sysconfig/network 파일을 직접 편집하면 된다. GATEWAY=xxx.xxx.xxx.xxx 인터넷과 연결되어
있는 라우터의 IP ex)
라우팅(Routing) 서로 다른 네트워크끼리 통신하는 것을 라우팅이라 칭한다. 라우팅을 하는 장비들은 라우팅 테이블을 가지고 있다. 라우팅 또한 라우팅 테이블을 참조하여 이루어진다. 리눅스 머신의 라우팅 테이블을 보려면 ex) 대개 라우터를 이용하여 라우팅이 이루어지며, 여러분이 가지고 있는 리눅스 머신들도 라우터로 사용할 수 있다. 단, 랜카드는 2장이나 때에 따라서 그 이상을 가지고 있어야 한다. 리눅스에서 라우팅을 가능케 하려면,
DNS (Domain Name Service) TCP/IP를 기반으로 하는 네트웍에서는 호스트로 IP로 찾는다. 하지만 그 수많은 호스트의 IP만 가지고 찾으려 한다면, 대단한 기억력의 소유자가 아닌 이상, 그 수많은 호스트를 외우고 사용한다는 것은 불가능할 것이다. 그래서 나온 방법이 호스트의 이름과 IP를 맵핑하는 방법, 즉 DNS(Domain Name Service)이다. 이 DNS를 수행하는 서버를 DNS 서버 또는 네임 서버라 한다. 하지만 리눅스에서는 DNS 서버보다 네임 서버라는 용어를 더 많이 사용한다. 웹 브라우저를 사용할 때 우리는 URL를 적는다. 물론 그 호스트도 IP를 지고 있지만, 우리들은
IP를 외우면서 사용하지 않는다. /etc/resolv.conf 파일에 사용하는 네임서버의 IP를 적어주면 된다. nameserver 164.124.101.2 * 물론, 네임서버도 호스트명을 가지고 있다. 보통의 경우 ISP에서 라인을 임대하여 사용하는
곳이나, 전화 접속으로 인터넷을 사용하는 곳에선 ISP에 있는 네임
서버를 이용하여 TCP/IP 기반의 네트웍인 인터넷을 사용할 수 있다.
하지만, 독자들이 다니고 있는 학교나, 회사 같은 곳에서도 네임
서버를 구축해놓고 사용하는 곳이 있을 것이다. 중규모 이상의 네트워크에서는
ISP의 네임 서버를 사용하는 것보다, 학교나 사내에 네임 서버를
직접 운용하는 것이 네트워크가 바뀌거나 호스트가 추가될 때 더
능동적으로 대처할 수 있다는 장점이 있다.
ARP (Address Resolution Protocol) 여태까지 IP 주소가 어떻게 만들어지는지 보아왔다. 하지만 TCP/IP 프로토콜도 이더넷 기반 위에서 동작하는 프로토콜이다. 그렇다면 이더넷은 어떻게 디바이스(랜카드 등..)를 인식하고 확인을 할까? 라는 의문이 생길 것이다. 결국, 이더넷 프로토콜은 여섯 개의 옥텟 숫자로 된 이더넷 어드레스라는 것을 이용하여 호스트를 증명하는데, 이것은 IP 어드레스는 다른 성질의 것이다. 이더넷 어드레스는 하드웨어 제조사들 끼리의 약정에 의해서 미리 정해져서 나오는 것이고 이것 또한 서로 중복되는 일이 없다. IP 어드레스는 이더넷 어드레스 위에서 맵핑되는 형태를 가지고 있으며, 이러한 메커니즘을 ARP라고 부른다. 하나의 인터페이스에 여러 개의 IP를 가지고 있을 수 있지만, 이더넷 어드레스는 한 인터페이스에 하나만을 가지고 있다. 이더넷의 특징중의 하나가 브로드케스트로 호스트를 찾는다. 하지만 TCP/IP 기반의 네트워크에서 특정 호스트를 호출(ping 같은 경우)하면, 호스트와 IP 어드레스를 확인하고 그것이 일치한다면 호출하는 조회하는 호스트를 그 대답을 ARP로 보낸다. 그래서 송신측과 수신측의 호스트가 서로의 이더넷 어드레스를 알 수 있다. 이 ARP는 때로, 디스크 없는 클라이언트들이 부팅 할 때 사용되기도 한다. arp 나 arp -a 이라고 입력하면 ARP 캐쉬에 저장되어 있는 목록을 볼 수 있다. ex)
TCP/IP와 관련된 데몬 Linux의 TCP/IP 네트워크 서비스는 많은 데몬에 의해서 지원된다. 이들은 백그라운드로 실행되며, 직접적으로 서비스를 지원하거나 다른 네트워크 프로그램에 의해서 사용되어지는 테이블을 관리한다. 다음은 가장 중요한 데몬들이다.
inetd internet services daemon은 주요 TCP/IP 서버이며,
이것이 대부분의 네트워크 수행을 감독하는 책임을 지고 있다. 또한,
하나의 구체적인 작업을 하는 다른 데몬의 호스트를 감독함으로써
자신의 업무를 수행한다. inetd에 의해서 관리되는 서버들은 /etc/inet.conf
파일에 기술되어 있고, telnet, ftp, rlogin, rsh, rcp, finger
명령어들뿐만 아나라 pcnfs와 원격 talk를 포함한다.
telnet (가장 일반적으로 쓰이는 rloin의 형태이다.) telent은 원격에서 호스트를 사용할 수 있게
해주는 기능이다. ex) Red Hat Linux release 6.0 (Hedwig)
ftp ftp는 원격에 있는 파일을 주고받을 때 사용하는
기능이다. ex) *만일 Windows 환경의 CuteFTP나 WS_FTP 같은 GUI 방식에 익숙한 유저라면 X-Window에서 gftp를 사용하면 된다.
finger 로컬이나 원격의 사용자 정보(마지막 로긴 시간, 로긴 위치, 메일 도착 여부)를 얻을 수 있다. ex)
named 앞서 /etc/hosts 파일은 TCP/IP에 의해서 통신되는 모든 호스트들을 기술하고 있다. 이것의 기능은 name daemon에 의해서 지원 받게 된다. named가 수행되는 중이라면 /etc/hosts 근거리 네트워크상의 호스트들과 자주 접근하는 호스트들에 대한 정보를 가지고 있다. 따라서 사용자의 호스트가 /etc/hosts에 기술되지 않은 시스템의 주소를 필요로 했을 때 그 주소를 위해서 named를 참조할 것이다.
routed와 gated route demon과 gateway routing daemon은 데이터의 어느 경로로 전송할지를 정할 때 사용되어지는 네트워크에 대한 동적인 정보를 관리한다. 이것은 부트 과정에서 많은 route 명령에 의해서 만들어지는 정적인 라우팅 테이블을 대체하게 설계되어진다. 이들 두개의 데몬 만이 하나의 시스템에서 수행되고, routed는 더욱 새로운 gated에 서서히 자리를 넘겨주고 있다.
rwhod remote who daemon은 주기적으로 네트워크에 있는 모든 호스트에게 공중방송(broadcast) 정보를 발송하는 프로그램이다. 이 데몬이 전송하는 정보는 누가 이 호스트에 로그인 했는지를, 얼마나 오랫동안 로그인 했는지 등의 상황을 알려주는 것들이다. 사용자들은 rwho와 ruptime 명령을 가지고 원격 시스템의 상태를 알 수 있다. 불필요한 데몬의 비활성화 시스템 보안이나 성능 측면에서 몇몇 TCP/IP 데몬을 비활성화(disabling)할 수 있다.(각각은 정말 작지만 시스템에서 측정할만한 부하를 갖는다.) 당연히 특정 데몬들을 제거시키기 위한 일련의 순서가 있다. 만약 rwhod를 비활성화하면 rwho와 ruptime 명령은 작동되지 않는다. named를 비활성화하면 /etc/hosts는 사용자 시스템이 TCP/IP를 통해 통신하는 네트워크상의 모든 호스트를 기술해야만 한다. routed 나 gated 를 비활성화 한다면, 라우터끼리의 라우팅 테이블을 교환하는데 쓰이는 RIP을 사용할 수 없고 단순히 정적인(static) 라우팅 테이블을 만들어야 한다. inetd를 비활성화하면 TCP/IP는 작동되지 않는다.
이더넷 인터페이스의 초기화 ifconfig 프로그램으로 이더넷 인터페이스를 형성할 수 있으며 또한 이것을 초기화할 수 있다. ifconfig 만 입력시킬 경우 현재 사용하고 네트웍
인터페이스의 상태를 표시해 준다. ifconfig로 이더넷 인터페이스를 추가시키거나
삭제할 수 도 있다. [root@study /]# ifconfig eth0:0 192.168.1.200 eth0:0 Link encap:Ethernet HWaddr
00:10:4B:43:2F:5C lo Link encap:Local
Loopback 이더넷 인터페이스를 삭제하려면,
네트워크의 상태 보기 netstat 프로그램을 이용하여 TCP/IP 네트워크의 상태(라우팅 테이블, 활성중인 네트워크 연결의 상태, 각 인터페이스 정보)를 점검해 볼 수 있다. netstat 의 명령 인자
NFS 관리 및 활용 여러분은 Network File System 이라는 것을 들어본
적이 있을 것이다. 바로 상대방의 파일 시스템 일부 또는 전체를
마치 자기 자신의 디렉토리인 것처럼 사용할 수 있게 해 주는 것이
NFS이다. 모든 유닉스가 NFS를 지원하며, 리눅스 또한 지원(서버/클라이언트)한다.
NFS를 이용하면, 데이터들을 각각의 호스트에 중복되게 보관할 필요
없이 NFS 서버를 이용하여 관리할 수 있으며, 여러 대의 호스트의
파일시스템을 한데 묶어 저장공간을 최대한 활용할 수 있다. 또한
각각의 클라이언트들은 필요이상의 하드디스크를 가지지 않아도(심지어는
없어도) NFS를 통하여 작업할 수 있다. 물론 충분한 속도가 제공되어야
할 것이다.
리눅스 머신간의 NFS 활용 필자가 가지고 있는 리눅스 머신 sophia가 가지고 있는 파일시스템을 또 다른 리눅스 머신 sunny에서 NFS로 마운트 하겠다. ■ sophia 서버에서의 셋팅 1. /etc/exports 파일의 설정 먼저 /etc/exports 파일을 편집한다... </etc/exports 파일예제> * sunny 라는 호스트명을 가진 원격호스트에 /home 디렉토리(하위 디렉토리포함)를 읽기/쓰기 권한으로 접근할 수 있다. ■ 공유할 디렉토리명 - /home 서버에서 공유하고자 하는 디렉토리를 절대 경로로 기입한다. root 파일 시스템이어도 되고 마운트된 디렉토리여도 상관없다. 즉, NFS 서버 쪽에서 인식 되어 있는 파일시스템이면 클라이언트쪽에서도 NFS로 공유할 수 있다. ■ 접근할 수 있는 서버 - sunny 만일 아무런 이름도 기입하지 않으면 모든 클라이언트에 대해 접근을 허용한다는 이야기이다. 접근을 제어할 경우에는 서버이름을 기입하고 각각 서버별로 다른 옵션을 지정할 수가 있다. 접근 서버는 다음과 같이 와일드카드를 사용할 수 있다.. ex) *.kerygma.co.kr, 192.168.0.* ■ 옵션 - rw 공유 자원에 대한 세부 옵션으로 기입하지 않아도 되나 시스템 보안이나 자원의 보안이나 자원의 보호를 위해 적절한 옵션들을 지정해주는 것이 좋다. exports 옵션목록
* noaccess 위의 표의 noaccess를 보고 “무엇 때문에 접근을 차단할 디렉토리를 /etc/exports에 적어야 하는가?” 라는 의문이 생기는 독자가 있을 것이다. noaccess 옵션을 사용하고자 한다면 exports에 등록하지 않는 것이 정상이다. 그런데 부득이 /home 이라는 디렉토리를 공유해야 할 경우 /home 이하의 디렉토리들은 모두 /home의 옵션이 적용이 된다. 이때 /home/httpd라는 디렉토리는 공개할 수 없는 경우 /home을 공유한 다음, 다시 /home/httpd에 noaccess 옵션을 적용하면 이 같은 문제를 해결할 수 있다. ex) * sunny 라는 호스트명을 가진 원격호스트에 /home 디렉토리(하위 디렉토리포함)를 읽기/쓰기 권한으로 접근 할 수 있도록 하되, /home/httpd 디렉토리는 접근 할 수 없다. ACL(Access Control List) - no_root_squash
* 사실 ACL 설정이 관리자가 신경을 제일 많이
써야하는 부분이다.
nfs 데몬의 실행 NFS 서버로 사용할 리눅스 머신에 클라이언트로부터 들어오는 NFS 자원요청을 처리해주기 위하여 NFS 데몬이 실행되어 있어야 한다. X-Window를 사용하는 유저라면 Control Panel 의 Runlevel Editor를 이용하여 자신이 현재 사용하는 Runlevel에 대한 데몬 설정을 쉽게 할 수 있으면 해당 데몬을 실행/중단 시킬수 있다. 콘솔모드를 사용하는 유저라면 setup 입력하여 system services 란 항목으로 쉽게 데몬 설정을 할 수 있다. 콘솔에서 데몬 실행은 참고로, 데몬을 중지시키려면
exportfs 실행 NFS 데몬을 실행시킨 후 /etc/exports의 내용을
실제로 서버에 적용시켜야 한다. 이제 서버의 설정은 되었고, 클라이언트 설정을 하자.
NFS 클라이언트 설정 NFS 서버로부터의 자원을 공유하는 클라이언트는 단순히 마운트만 하면 된다. 형식- 호스트명 - NFS 서버의 이름을 말한다. ex) mount -t nfs sophia:/home /mnt/nfs
* 참조 시스템 kerygma.co.kr 은 가상의 도메인이다. sophia.kerygma.co.kr sunny.kerygma.co.kr nikky.kerygma.co.kr hosts 파일 127.0.0.1 localhost
localhost.localdoamin
편집자 주) |