강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

ARP를 이용해 두 랜 연결하기

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle85.gif

배철수 / 리눅스월드 발행인

 

1. 군더더기 이야기

10월호는 리눅스 월드가 창간 3 주년을 돌파한 월이다. 97년 10 월이 창간호이니 벌써 3 년이 경과한 것이다. 3 주년 돌파 기념으로 이번 호에는 리눅스 네트워킹 중 기존의 HOWTO 나 문서에 소개되지 않은 비장의(?) 네트워크 기법을 소개한다.

비장이라고 해서 이 기법이 어떤 새로운 기술을 사용하는 건 아니다. 단지 설정이 까다롭고 네트워킹에 관한 상당한 지식이 없으면 이해가 힘들어 일반인 들이 사용을 못하고 있을 따름이다.(이미 알고 있는 독자도 있을 것이다. 이 글은 이 방법을 아직 모르는 독자를 위한 것이다.)

필자가 이 방법을 알게 된 시기는 공사 근무 때인 1996년 경이다. 그때 모 ISP 업체의 리눅스 서버에 PPP 서버를 설치해 주고 이를 관리해 주는 조건으로 TT선을 한 개 받아 집에서 인터넷을 사용할 수 있게 되었다. 그런데 집에는 피시가 리눅스와 윈도우 두 대인데 TT선이 리눅스에 연결되므로 리눅스에만 공인 IP가 부여되고 윈도우 피시에는 내부 IP를 사용해야 했다. 리눅스와 윈도우 피시는 물론 랜으로 연결되어 있었다.

물론 리눅스에 IP Masq 를 사용해서 윈도우에서는 리눅스의 IP를 공유해 인터넷을 사용하고 있었지만 이왕이면 윈도우에도 공인 IP를 부여해 보고 싶었다. PPP 서버에는 공인 IP가 많이 남아 있으므로 집으로 가져오는 방법만 알아내면 되는데 그게 간단치가 않았다.

여러가지 방법을 검토한 결과 가장 확실한 방법은 서브네팅과 gated를 사용하는 것이었다. 즉 PPP 서버가 속한 네트워크 주소를 서브네팅으로 분할 한 후 이 중 한 개의 서브 네트를 집의 네트워크에 넘겨 주는 것이다. 그런데 이 방법을 사용하려면 PPP 서버가 속한 네트워크를 서브네팅을 해야 하므로 IP 주소가 허비되고 랜에 연결된 다른 피시들의 네트워크 설정도 모두 바꾸어야 한다. 또 서브네팅은 2의 배수로만 가능하므로 사장되는 주소가 발생할 수도 있다. 또 gated 설정도 상당히 까다롭다.

Gated를 사용하는 것은 일단 마지막 수단으로 제쳐 놓고 라우팅 테이블 설정으로 해 보기로 하고 자료를 찾다 뉴스그룹에서(COLN) 누군가가 route 명령만으로도 이런 식의 방법이 가능하다는 글을 올린 것을 발견했다. 그래서 그 사람에게 어떻게 세팅하는지 알려 달라고 했으나 답장이 없었다.

그래서 누군가 사용하고 있다면 나도 할 수 있다는 생각으로 리눅스에서 네트워킹에 관한 모든 하우투와 관련 문서를 읽어 가면서 피시 두 대로 수없는 세팅을 반복하기를 한 달만에 드디어 그 방법을 찾게 되었다. 필자가 리눅스에서 한 가지 문제를 해결하기 위해 그렇게 많은 시간을 소모한 건 처음이었다.

이 방법은 실제로 필자가 몇 군데에 설치해 준 적이 있다. 최근에는 삼홍사와 삼홍통상을 연결하는데 이 방법을 썼다. 즉, 구로동에 있는 삼홍사의 본사에 연결된 인터넷을 강남의 삼홍통상 사무실로 연장하는데 이 방법을 사용했다.

삼홍통상에는 피시가 6대 정도 있었는데 인터넷이 연결되어 있지 않았다. 그래서 삼홍사와 삼홍통상을 56k 전용선으로 연결하고 두 사무실의 리눅스 서버의 시리얼 포트에 DSU와 RAC56을 사용해 이 라인을 연결하고 PPP를 가동해서 삼홍사의 랜에 부여된 공인 IP를 삼홍통상의 랜에 연결된 윈도우 피시에 넘겨 주었다.
쉽게 생각하면 이 방법은 라우터를 사용하지 않고 원격지의 두 랜을 연결하는 방법이다. 즉 라우터 대신에 리눅스 서버를 사용하는 방법이다. 다른 유닉스로도 가능하겠지만 필자는 리눅스에서만 사용해 보았다.

라우터를 사용하는 경우와 다른 점은 우선 지원하는 프로토콜이 TCP/IP에 한한다는 것이고 또 하나는 두 랜의 네트워크 어드레스가 같다는 점이다.(라우터를 사용하는 경우는 두 랜의 네트워크 어드레스가 달라야 한다.) 두 랜의 네트워크 어드레스가 같다는 점에서는 브리지와 유사하나 IP 를 넘겨 주는 방식에서 브리지와는 전혀 다르다.

 

2. 사전 지식

이 글을 이해하려면 우선 이더넷에서 데이터를 전송하는데 사용되는 ARP라는 기법을 이해해야 한다. 또 Proxyarp라는 기법도 알아야 한다. 이를 이해하지 못하고 필자가 쓴 글을 기계적으로 따라 하면 설치는 되겠지만 나중에 문제가 발생했을 때 그 원인을 알지 못해 손을 쓸 수가 없다.

전 세계에서 생산되는 모든 이더넷 카드는 48비트로 구성된 하드웨어 어드레스(MAC 어드레스라고 부른다.) 를 갖고 있으며 이 주소는 그 카드에 고유하다. 즉 다른 카드와 중복되지 않는다. 그래서 이더넷에서 데이터를 원하는 컴퓨터로 보내기 위해서는 이 MAC 어드레스를 알아야 한다.

예를 들어 여러분 회사의 네트워크가 이더넷이고 윈도우 피시의 주소는 192.168.1.11 리눅스서버는 192.168.1.1 이라고 하자. 여러분이 윈도우 피시에서 리눅스 서버로 telnet 연결을 할 때 윈도우의 telnet 프로그램에서는 리눅스 서버의 MAC 어드레스를 알고 있지 않다. 단지 192.168.1.1 이라는 주소로 연결해야 된다는 사실을 알 따름이다. 그러면 윈도우 피시는 랜에 연결된 모든 피시에 192.168.1.1 주소를 갖는 피시는 응답하라는 방송을 한다. 그러면 192.168.1.1 주소를 갖는 리눅스 서버가 내가 192.168.1.1 이니 나의 MAC 어드레스로 그 데이터를 보내라고 응답한다.

telnet 프로그램에서 왜 MAC 어드레스를 사용하게 만들지 않느냐고요? 랜에도 여러 종류가 있어 사용하는 하드웨어주소 표기도 다 다르니까요. 또 랜과 랜을 연결하는 라우터도 MAC 어드레스로 상대를 찾도록 모두 고쳐야겠죠.

 

3. 설치 절차

설명을 위해 가상의 예를 들겠다. ㈜갑을병 회사는 본사가 서울에 있는데 전용선으로 인터넷을 연결하였고 인터넷 주소로 C 클래스 한 개(공인 IP 256개)를 받았다. 그런데 피시가 150대 이므로 IP 주소는 100개 정도 여유가 있다. 회사 내에는 리눅스 서버가 한 대 있고 이 서버는 웹서버 및 DB 서버(MySQL)로 사용되고 있다.

대전에는 사무소가 있는데 윈도우피시가 10 대, 파일 서버 및 프린터 서버로 사용되는 리눅스 서버가 한 대 있다. 사무소는 아직 인터넷에 연결되어 있지 않다. 본사와 사무소 간에는 한국통신의 하이네트피 전용선이 연결되어 있다. 이 전용선은 본사에는 리눅스 서버의 시리얼 포트에 연결되어 있고 대전 사무소에는 윈도우피시의 시리얼 포트에 연결되어 있다.

용도는 본사의 리눅스 서버에 데이터를 입력하기 위해서 이다. 즉, 사무소의 윈도우 피시에서 하이퍼터미널을 가동하여 본사의 리눅스 서버에 로그인한 후 서버에서 텍스트 방식의 입력 프로그램을 가동해 데이터를 입력하는 것이다.

이제 위의 전용선과 리눅스 서버 두 대를 사용해 지사의 모든 피시에 인터넷 주소를 배분하기로 한다. 우선 사무소의 윈도우 피시에 연결된 전용선을 리눅스로 옮긴다. 네트워크 구성 및 IP 주소는 아래 그림과 같다.(192.168.1.X 는 공인 IP 가 아니다. 설명의 편의상 이 주소를 사용했다.) 주의할 것은 서브네팅을 필요로 하지 않는다는 점이다. 따라서 사무소에 필요한 숫자만큼만 본사에서 보유 중인 IP 주소를 넘겨 줄 수 있다.

설명의 편의상 본사의 리눅스 서버를 PPP 서버로 사무소의 서버는 PPP 클라이언트라고 부른다.

 

3.1  PPP 서버 설정

본사의 PPP 서버의 네트워크 설정은 따로 설명하지 않는다. 즉 랜카드(eth0) 에 IP 주소를 부여하는 것은 다른 연결과 같다. PPP 서버에는 192.168.1.0 네트워크에 대한 라우팅 테이블이 설정 되야 하고 인터넷에 연결하여 있다면 디폴트게이트웨이도 설정돼야 한다.

여기서는 설명을 간략하게 하기 위해 본사에서 보유 중인 IP 중 2개(192.168.1.101, 192.168.1.102)를 사무소의 윈도우피시에 할당하는 경우만 설명한다.(PPP 클라이언트는 PPP 연결만 하면 19주소가 부여되므로 별도 작업이 필요없다.)

1) 두 리눅스를 PPP로 연결해 리눅스 클라이언트에 192.168.1.100 주소가 할당 되야 한다.

이 부분은 여기서 설명하지 않는다. 지난호의 PPP 기사를 참고해서 설정해야 한다.

2) PPP 서버의 MAC 어드레스를 찾아 낸다.

Ifconfig 명령으로 가능하다.
 

eth0   Link encap:Ethernet HWaddr 00:60:97:BC:8F:11
inet addr:211.192.XX.170 Bcast:211.192.XX.175
Mask:255.255.255.248
         UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
         RX packets:1488915 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1469615 errors:0 dropped:0 overruns:0 carrier:0
         Collisions:0
         Interrupt:12 Base address:0xb000

 

위에서 Hwaddr 다음이 MAC 어드레스이다.(48비트이나 8비트 4 개로 끊어서 16진법으로 표시한다. 중간의 : 은 구분 문자이다.) :

3) PPP 서버의 부팅시 아래 명령이 실행되게 한다....

/usr/sbin/arp -s 192.168.1.101
/usr/sbin/arp -s 192.168.1.102

이 명령이 필요한 이유는 아래와 같다. 만약 192.168.1.10 주소의 리눅스 서버가 사무소에 있는 101번 피시로 데이터(패킷)를 보내려면 우선 랜에다가 101번 주소를 갖는 피시는 응답하라고 방송할 것이다. 그런데 본사의 랜에는 101 주소를 갖는 피시가 없으므로 아무런 응답이 없을 것이다. (사무소의 랜은 본사의 랜과 별개다.) 결국은 서버를 찾지 못한다는 메시지가 나올 것이다. 그러나 위의 명령을 주면 101번이나 102번을 찾는 요청이 오면 192.168.1.1 서버가 대신 응답해서 데이터를 가져온다.

4) PPP 서버의 /etc/ppp/ip-up 파일에 아래 명령을 추가한다.

PPP 연결을 많이 해 본 사람도 ip-up 스크립트가 어떤 경우에 사용되는지 잘 모를 것이다. 이제 이 파일의 위력을 보게 될 것이다.

#!/bin/bash
/sbin/route add -host 192.168.1.101 gw $5
/sbin/route add -host 192.168.1.102 gw $5

여기서 $5가 무엇을 의미하는지 궁금할 것이다.
Ip-up 스크립트에 있는 설명을 보자

# This script is called with the following arguments:
# Arg Name Example
# $1 Interface name ppp0
# $2 The tty ttyS1
# $3 The link speed 38400
# $4 Local IP number 12.34.56.78
# $5 Peer IP number 12.34.56.99
# $6 Optional ``ipparam’’ value foo

여기서 $5는 Peer IP 주소를 말한다. PPP 연결에서 peer 이란 바로 상대방의 주소이다. 여기서는 PPP 클라이언트에 할당한 Ip 주소 즉 192.168.1.100 이다. $5 자리에 이 주소를 직접 넣어도 된다. 그러나 $5를 넣는게 확실하다. 이유는 묻지 마시길

이 명령이 의미하는 바는 이렇다. 192.168.1.101이나 102 주소로 가는 패킷을 받으면 192.168.1.100 주소로 무조건 보내라는 뜻이다. 이제 거의 완성이 되었다. 192.168.1.10번 주소로 가는 패킷이 사무소의 PPP 클라이언트(192.163.1.100)에 도달한 것이다.

 

3.2  PPP 클라이언트 설정

이제 사무소의 리눅스 서버 설정을 설명할 차례다.

사무소의 리눅스 서버의 라우팅 테이블은 아래처럼 설정한다. 랜카드의 라우팅 테이블은 네트워크 라우팅으로 하지 말고 호스트 라우팅으로 한다. 즉 일반적으로는 사무소의 리눅스 서버에는 아래처럼 라우트 명령이 들어갈 것이다.

route add -net 192.168.1.0 dev eth0

대신 아래처럼 지정한다.

route add -host 192.168.1.100 dev eth0
route add -host 192.168.1.101 dev eth0
route add -host 192.168.1.102 dev eth0

첫번째처럼 지정해도 문제될 것은 없다. 그러나 2 번째 방법이 낫다. 그 차이는 미묘하므로 여기서는 설명하지 않는다.
(이 방법은 이 글에서의 설정을 위해서 이다. 일반적인 경우라면 첫 번 설정을 사용해야 한다.)

이제는 PPP 클라이언트가 받은 101번으로 가는 패킷이 101번 까지 도달할 것이다. 192.168.1.10 번 리눅스에서 192.168.1.101번으로 ping 을 쏘면 패킷이 도달할 것이다.

이제 완성되었다. 본사가 인터넷에 연결되어 있다면 사무소에서도 인터넷 사용이 가능하다.
너무 쉽고 간단해 이상하다고요? 원래 그런 거에요.

 

3.3  사무소 윈도우피시의 설정

사무소의 윈도우피시(192.168.1.101) 는 디폴트게이트웨이를 192.168.1.100으로 설정해야 한다.

 

3.4  추가 설명

한가지 빠진게 있네요. 사무소의 윈도우피시(192.168.1.101)에서 telnet 192.168.1.10 명령을 주면 어떤 현상이 발생할까요?

답) 서버를 찾을 수 없음이라고 나옴.

사무소에서 본사 랜에 연결된 서버를 억세스하려면 모두 연결이 안된다. 그런데 본사 외의 인터넷 쪽의 서버는 연결에 전혀 문제가 없을 것이다. 참으로 이상하다.

Arp 를 이해한다면 바로 그 원인을 알아 차릴 것이다.

192.168.1.101에서 192.168.1.10 서버를 찾으려면 이 둘이 같은 네트워크에 속하므로(192.168.1.0) 사무소의 랜에 방송을 한다. 즉 192.168.1.10 피시는 응답하라고 외칠 것이다. (네트워크가 다르면 게이트웨이에 패킷을 보낸다.) 그런데 응답이 오지 않을 것은 당연하다. 192.168.1.10 피시는 사무소의 랜에 연결돼 있지 않고 본사 랜에 연결돼 있기 때문이다.

이를 수정하는 방법은 아래와 같다.

리눅스 클라이언트에 아래 명령을 준다.

/usr/sbin/arp -s 192.168.1.10 하드웨어주소-클라이언트 pub

이렇게 해 놓으면 사무소의 윈도우 피시가 192.168.1.10 서버를 연결하려고 패킷을 보내면 PPP 클라이언트가 이를 받아서 본사 랜의 PPP 서버로 보내고 PPP 서버는 이를 다시 192.168.1.10으로 보낸다.

따라서 본사에 여러 대의 서버가 있으면 각 서버 마다 이를 실행해 주어야 한다. 윈도우 피시는 이렇게 하지 않아도 된다. 윈도우피시로 연결할 경우는 없기 때문이다. 단 ping 을 본사의 윈도우피시로 쏠 때 ping 이 안된다는 것은 알아 두자.

[ 주의 ]  3.2의 route 설정은 데비안은/etc/initid/network 파일에서 수정하면 된다.
             그러나 레드햇이라면 간단치가 않다. etc/sysconfig 이하에서 수정하면 되나,
             여의치 않으면 route 명령을 아예 rc.local에서 실행하는 방법을 사용하기 바란다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,070 명
  • 현재 강좌수 :  35,986 개
  • 현재 접속자 :  428 명