배철수/리눅스월드 발행인 |
|||||||||||||||||||||||||||||||
필자가 아는 장난감 업체가 인터넷으로 전자상거래를 하고 있다. 웹서버는 모 ISP의 웹호스팅 서비스를 이용하고, 동대문 근처 사무실에서 인터넷으로 웹서버를 연결해서 데이터를 입력해 왔다. 전에는 홈페이지의 데이타를 갱신하기 위해 피시 한 대에서 다이얼업 PPP로 인터넷을 연결해 사용해 왔는데 속도도 느리고 전화비도 많이 나와 한국통신의 ADSL을 신청해 연결했다.(선 나오는데 2 달 걸렸다 함) 그래서 필자가 리눅스 피시에 ADSL 라인을 연결하고 리눅스와 윈도우 피시 5 대에 랜을 설치해 윈도우 피시가 ADSL 라인을 공유하여 동시에 인터넷을 사용하게 하는 작업을 하였다. 리눅스 호스트에 부여된 공인 IP 한 개를 랜에 연결된 여러 대의 피시에서 내부 주소로 공유하는 방법을 IP Masquerade(또는 NAT : Network Address Translation)라고 하는데, 윈도우에서는 sygate라는 비슷한 역할을 하는 프로그램이 있다. 하지만 IP Masquerade가 sygate에 비해 안정성이나 지원하는 서비스 범위 등에서 훨씬 낫다. ADSL 라인을 공유하는 것도 IP Masquerade 설정까지는 다른 인터넷 연결을 공유하는 것과 동일하다. 단지 인터넷을 연결하는 프로그램 설정 부분만 다르다. 이 글은 이러한 설정을 처음 하는 사람들을 위해 리눅스 설치부터 IP Masquerade, 커널 컴파일, ADSL 연결 프로그램 설치까지의 전 과정을 소개한다. 아래 글은 필자가 위 업체에서 실제 작업한 순서를 기준으로 했기 때문에 중복되거나 필요 없는 부분도 있다. 그러나 모든 컴퓨터 작업이 이상적인 순서로 진행되는 경우는 없으므로 조금 지루하더라도 순서대로 읽는게 필요하다.
I. 사견 : IMHO(In My Humble Opinion) 아래는 필자의 개인적 의견이니 건너 뛰어도 상관없다. ADSL 라인을 여러 대의 피시에서 공유하는게 불법이 아니냐는 질문을 하는 사람이 있는데 우리나라의 법 어디에도 ADSL 라인 1 개를 여러 대의 피시에서 동시에 사용하면 법 위반이란 구절이 없다. 또 어떤 사람은 한국통신의 내부 규정에 ADSL 라인을 여러 대의 피시에서 공유할 수 없도록 규정하고 있다는 말도 있다. 그러나 필자가 주위에서 ADSL 설치하는 사람을 아무리 보아도 ADSL 라인 신청시 이 라인을 피시 한 대에서만 사용하겠다는 계약을 했다는 말을 듣지 못했다. 혹시나 그런 계약을 했다면 아래 방법을 사용하지 말기 바란다. 아래 설치 방법은 커널을 패치하고 컴파일해야 한다. 초보자는 커널 컴파일이라면 무척 겁을 내는데 커널을 컴파일해야 한다고 C 언어에 대한 이해를 필요로 하지 않는다. 리눅스에 대한 기본만 알아도 충분히 가능하다. 요즘은 커널 컴파일 대신에 커널모듈을 사용하는 경향이 있으나 커널모듈로는 안되는 경우가 많다. 이 기회에 커널 패치 및 컴파일에 대해 확실하게 배워 두기 바란다. 아래 글은 여러 다양한 환경에서 작동하도록 최대한 주의를 기울였다. 하지만 수많은 다양한 사용자 환경을 다 고려할 수는 없으므로 혹시 아래 방법대로 따라 했는데도 잘 안된다고 머리카락 빠진 것이나 밤잠 설친 것, 또는 피시를 발로 걷어차 발가락 삔 부분 등에 대해 필자를 원망하지 말기 바란다. 비록 작동이 안되더라도 다른 많은 좋은 지식을 얻게 될 터이니까. 이 글대로 해도 잘 안되면 일차로 필자가 알려준 사이트를 잘 살피면 분명 어딘가에 해답이 있다. 다음에 comp.os.linux.networking 이라는 뉴스 그룹에 질문을 하면 전 세계에서 답변이 쏟아질 것이다. 단 여기는 영어만 된다. 영어가 안되면 han.comp.os.linux.networking 에 올려보기 바란다. 필자에게 메일로 질문하는 것은 별로 원하지 않는다. 필자가 메일이 마음에 들면 답변을 해 주겠지만 메일이 마음에 안 들거나 필자가 바빠서, 또는 기타등등의 이유로 답변을 안해 주면 보낸 사람이 무척 속상해 할 터이니까. 단 잘못된 부분을 지적하거나 다른 더 좋은 방법을 제시하는 메일은 환영한다. 그러나 역시 답장은 기대하지 마시길. 필자의 메일 주소 : bae@linuxlab.co.kr
II. 참고 사이트 이 글을 쓰는데 참고한 사이트를 소개한다. 먼저 Jamal Hadi Salim 씨에게 감사를 드리고
싶다. PPPoE를 구현하는 여러 방법 중 필자가 이 글에 소개한 설치법은
이 분이 개발한 프로그램을 사용했다. Jamal씨의 사이트 주소는
http://www.davin.ottawa.on.ca/pppoe/ 이다. 여기에서 pppoed 프로그램(ADSL
연결 프로그램)을 다운 받았다.
< 그림 1 : Jamal 씨의 사이트 > 리눅스에서 PPPoE를 구현하는 다른 프로그램들도 많이 있으나 이들이 한국통신의 ADSL 라인에 적용 가능한지는 알지 못한다. 다른 PPPoE 관련 프로그램에 대한 자세한 정보를 알려면 http://www.rodsbooks.com/network/network-dsl.html 를 참고 하기 바란다. Kal Lin 씨의 사이트 [ http://www.cs.toronto.edu/~kal/hse/resource.html ]도 큰 도움이 되었다. 이 사이트는 주로 레드햇 6.1을 위주로 커널 컴파일부터 전체적인 개요를 설명하고 있다.
< 그림 2 : Kal Lin 씨의 사이트 > Bruce Best<bestb@sympatico.ca>씨의 사이트[http://www3.sympatico.ca/bestb/]는
데비안에서 PPP 버전 관련 부분 및 MTU 문제에 대한 해답을 주었다.
< 그림 3 : SuSE 사 PPPoE 웹 페이지 > 레드햇에서 커널을 컴파일하지 않고 PPPoE를
사용할 수 있게 해주는 사용자 프로그램으로는 Roaring Penguin
Software사의 pppoed 프로그램이 있다. 필자도 이 프로그램을 한국통신
ADSL에서 사용 가능한지를 시험해 보려고 한다. PPPoE에 대해서 전문적인 내용을 알고 싶으면 아래 사이트를 방문하기 바란다. PPPoE Presentation, White Papers, FAQ, RFC: http://www.redback.com/solutions/presentation/default.asp
III. PPPoE란? ADSL로 인터넷을 연결하는 경우 사용하는 외장형 장비를 보통 ADSL 모뎀이라 하는데 엄밀한 의미에서 이는 모뎀이 아니다. 모뎀은 시리얼포트에 연결하지만 ADSL 모뎀은 랜카드에 연결한다. ADSL 라인의 전송속도는 한국통신의 주장은 최대 2.5 mbps(라이트)라 하지만 필자가 외국의 사이트에서 본 바로는 1 mbps 정도가 일반적인 속도라고 한다. 어쨌든 속도가 1 mbps라고 해도 시리얼포트에는 연결이 불가능하다. 현재 피시에 기본으로 장착되는 시리얼포트의 최대 전송속도는 115k 이기 때문이다. 패러랠 포트(프린터 포트)도 역시 1 mbps 전송속도를 지원하지 못한다. 결국 가능한 다른 장치는 USB와 랜카드 밖에 없다. USB의 최대 전송속도는 얼마인지 모르나 랜카드는 모든 컴퓨터에 장착이 되어 있거니 장착이 가능하고 어느 운영체제나 다 지원한다. 그러나 USB는 아직 일반화되지 않았다. 그래서 앞으로도 피시에 직접 연결하는 고속 인터넷 연결 장치는 거의 랜카드에 연결하는 방식을 사용할 것 같다. 시리얼포트에 모뎀을 사용해 인터넷을 연결하는 경우는 PPP라는 프로토콜을 사용한다. 윈도우에서 전화접속 네트워킹이 바로 이것이다. 인터넷에서는 컴퓨터간의 데이터 전송에 TCP/IP라는 프로토콜을 사용한다고 하는데 그러면 PPP와 TCP/IP는 어떤 관련이 있는가? TCP/IP는 화물이고 PPP는 이 화물을 싣고 가는 기차라고 보면 된다. PPP라는 기차에는 꼭 TCP/IP 라는 화물만 실을 수 있는게 아니다. 노벨 네트웨어에서 사용하는 IPX 등 다른 프로토콜도 동시에 실을 수 있다. 랜투랜으로 인터넷을 연결한 경우는 ISP의 랜과 사용자 랜 양 쪽에 라우터라는 장비가 사용되는데 이 두 라우터의 시리얼포트를 연결하는 라인(보통 전화선 2 회선을 사용함. 즉 4 가닥임.)에는 HDLC나 PPP를 사용한다. 여기에 사용하는 PPP도 위의 피시의 전화접속에서 사용하는 PPP와 같다. 단지 피시에서는 어싱크(async) PPP를 사용하나 라우터에서는 싱크(sync) PPP를 사용한다. 싱크와 어싱크의 차이는 싱크 쪽이 속도가 빠르다는 정도다. PPP 는 전화선(시리얼 라인)에 TCP/IP 프로토콜을 싣는데 가장 적합하다.(원래 이 용도로 설계되었다) 시리얼 포트에 전화선을 사용해 PPP로 두 컴퓨터를 연결하는데는 거의 거리 제한을 받지 않는다. 거리 제한을 없애는 거대한 통신 인프라가 이미 만들어져 있기 때문이다. 회사나 빌딩 내부처럼 근거리에서 TCP/IP 프로토콜로 컴퓨터 간에 데이터를 교환한다면 주로 이더넷을 사용한다. 물론 랜에는 이더넷 외에도 토큰링, ARCnet, FDDI 등 많다. 랜(이더넷)은 속도는 빠르나(10 mbps 이상) 최대 거리가 1 키로 미터 정도에 불과하다는게 단점이다. ADSL 모뎀에서 사용하는 PPPoE(PPP over Ethernet)라는 용어를 보면 누구나 이게 이더넷과 PPP 둘과 관계가 있다는 것을 알 수 있을 것이다. 즉 PPP를 이더넷에 싣는다는 뜻이다. 이것이 왜 필요한가? 컴퓨터 한 대를 전화선으로 인터넷에 연결하는 경우는 PPP를 쓰는 것이 가장 적합하다. 그런데 리눅스에서 사용하는 PPP 프로그램은(윈도우의 전화접속 네트워킹도 마찬가지다.) 시리얼포트에서만 작동하도록 되어 있다. ADSL 모뎀은 컴퓨터 한 대를 전화선을 통해 인터넷에 연결해 주는 장비이므로(즉 IP 주소를 한 개만 준다는 뜻임) PPP를 사용하는게 적당하나 속도가 빨라 시리얼포트에 연결할 수 없고 랜카드(이더넷 카드)에 연결하므로 PPP를 직접 사용할 수 없기 때문이다. 그래서 PPP 프로그램을 사용하기는 하되 그 방향을 이더넷 쪽으로 바꾸어 주는 다른 프로그램의 도움이 필요하다. PPPoE가 바로 그 역할을 한다. 그래서 PPPoE를 구현하는 프로그램을 redirector라고도 부른다. 이 설명을 들었으면 PPP를 리눅스에 설치 해본 사람이라면 리눅스에서 PPPoE 프로그램을 사용하려면 다음 몇 가지 조건이 충족되어야 한다는 것을 알아차렸을 것이다. 첫째로 커널에 PPP 지원이 포함되어야 한다. 하나 더 추가하자면 PPP가 싱크 PPP를 지원해야 한다는 점이다. 이 부분에 대해서는 어싱크만으로도 가능하다는 이론도 있지만 한국통신에서는 싱크 PPP를 쓰는게 맞는 것 같다. 필자도 PPP 옵션에 sync를 넣었으니까. 그런데 PPP에서 sync를 지원하려면 PPP 버전 2.3.7 이상을 써야 한다. 결론은 PPPoE를 사용하려면 우선 PPP를 설치하는 방법부터 알아야 한다. 필자도 PPP 서버라면 무수하게 설치해 보았으므로 이번 연결 때도 PPP 설명 부분은 건성으로 보았다. 그런데 필자가 설치한 데비안에 들어 있는 PPP 버전이 2.3.5 였다. 결국 sync 옵션을 무시했다가 설치에 몇 시간을 더 허비했다. 그래서 얻은 교훈은 RTFM.(Read The Fine Manual) 참고로 PPP는 서버와 클라이언트란 구분이 없다. 서버와 클라이언트란 구분은 단지 설명의 편의를 위해서 존재할 뿐이다. 예를 들어 리눅스 피시를 한국통신의 ADSL 모뎀 공유를 위해 사용하면서 이 피시를 모뎀과 TT선으로 집의 윈도우 피시에 PPP로 연결해 집에서도 인터넷을 사용하도록 설정했다면 일반적인 용어로 리눅스 피시는 PPP 서버 및 클라이언트 두 역할을 하고 있다. 그런데 PPP에 설정한 옵션은 그 피시에 연결된 모든 장치에 적용된다.(물론 이를 특정한 장치에만 적용케 하는 방법이 있다). 그래서 PPP 연결이 여러 개인 경우 옵션 설정 시에는 주의를 해야 한다. 예를 들어 ADSL 연결에서는 옵션에 sync가 필요하지만 모뎀에는 이 옵션을 쓰면 안된다.
IV. 설치 환경 및 작업 순서 아래는 필자가 설치한 환경이다. 피시나 배포본을 꼭 같이 할 필요는 없다. 필자는 단지 예산 절감을 위해 아래 사양을 썼을 뿐이다. 피시 및 랜카드 모두 있던 것 썼다. - 배포본은 데비안 2.1을 사용하였다. 리눅스 서버야 순전히 ADSL 공유를 위해서만 사용하므로 중고 486이면 충분하고 하드디스크도 큰 용량이 필요 없으므로 사무실에 굴러 다니는 270 메가 하드를 사용했다. 그런데 레드햇은 200 메가 용량의 하드에 까는게 너무 힘들어서 이다. 가능은 하겠지만 시행착오를 많이 거칠 것 같아서 이다. 데비안의 경우 리눅스 기본만 설치하는데 디스켓 6장이면 족하다. 디스켓에 압축돼 있으므로 3메가라 해도 18 메가이면 기본적인 시스템 가동에는 문제가 없다. 예전에 데비안 1.2에서는 CD 설치가 지원이 안되어 6 장의 베이스 디스켓 만드느라 고생했던 기억이 난다. 하지만 2.1부터는 그럴 필요가 없다. 디스켓 없이 CD에서 기본 시스템 설치가 되기 때문이다. 데비안은 패키지를 중요도에 따라 분류해 놓았으므로 하드 용량에 따라 적절한 선택이 가능하다. 필자는 비록 데비안이 업데이트 속도가 느려 불편한 점도 있지만 여러 면에서 데비안을 선호한다. 우선 안정성이 높다는 것이다. 다른 배포본은 자주 새 버전을 내느라 가끔씩 버그도 있지만 데비안은 버그가 거의 없다. - 데비안을 설치할 486에는 CD-ROM 드라이브가
없어 다른 펜티엄 피시(IBM Aptiva)에 리눅스를 설치할 펜티엄(IBM Aptiva)도 구닥다리여서 CD 부팅이 지원이 안되어 데비안에서 부팅 디스켓을 만들어 설치를 시작했다. 펜티엄에 연결된 CD-ROM 드라이브는 SCSI 방식이고 SCSI 콘트롤러는 advansys 제품이었으나 다행히 데비안 설치용 부팅디스켓에 있는 커널이 advansys scsi 콘트롤러를 제대로 인식했다. Advansys scsi 콘트롤러는 예전에 HP SureStore CD writer 구입 때 받은 것이다.
V. 준비 사항 1. 전체 구성도 아래가 대략적인 구성도이다. 그림을 보면 이해가 가리라고 본다. < 그림 4> 위의 그림을 보면 어떤 준비물이 필요한지 감이 올 것이다.
2. 리눅스 서버 사양 필자가 서버로 사용한 피시는 아래와 같다. 이보다 더 낮은 사양의 피시로도 가능한지는 알 수가 없다. 단 메모리는 이 보다 낮추면 ADSL 속도에 문제가 발생한다. 마더보드 : 대만제 저가 보드인데 플로피를 제대로
인식하지 못해 애를 먹었다. 리눅스를 ADSL 공유로 사용하기 위해서는 랜카드 하나로도 가능하나 설정도 복잡하고 또 한 개보다는 두 개가 속도 면에서 유리하므로 랜카드는 두 개를 사용했다.
3. 랜 관련 장비 ADSL 모뎀 및 이 모뎀과 랜카드를 연결하는 케이블은 한국통신에서 준다. 따라서 리눅스에 꼽을 랜카드를 제외하면 두 번째 랜카드를 허브에 연결하기 위해 허브에 한 개의 포트가 필요하다. 또한 랜 케이블도 필요하다. 윈도우 피시들은 이미 랜이 구성되어 있다고 가정한다.
4. 소프트웨어 필자는 데비안을 사용했으므로 아래 소프트웨어들이 필요했다. 레드햇(영문)의 경우 6.1 이상이라면 PPP 버전이 2.3.7이므로 ppp_2.3.11은 필요 없다. 물론 바꾸어도 상관 없다. 1) 데비안 2.1 R2 : CD Cheapbytes 제품을 사용했다.
VI. 데비안 설치 1. 하드디스크 구성 하드디스크는 11H/50S/959C 이므로 용량이 270 메가이다. 파티션은 아래처럼 구성했다. /dev/hda1(65메가) : swap 아래가 fdisk 화면이다.
스왑을 많이 잡은 이유는 메모리가 16 메가이기 때문에 스왑을 사용하게 될 가능성이 있기 때문이다.
2. 패키지 선택 198 메가에 데비안을 깔아야 하므로 일단 최소로
설치해야 한다. 그래서 important에 속한 것은 거의 깔고 standard에
속한 것은 중요한 것만 깔았다. X-window, doc, tex 등은 모두 설치하지
않았다. man도 설치하지 않았다. 이렇게 설치하니 하드 사용은 72
메가에 불과했다. 190 메가 중 40%만 쓴 것이다.
3. 메모리 메모리가 16 메가이고 늘릴 수도 없다. 4 메가를
4 개 꼽아서 더 이상 꼽을 수도 없기 때문이다. 메모리를 최대로
절약하기 위해 필요하지 않는 데몬은 모두 지웠다. 데비안의 경우도
패키지를 설치 않으면 데몬도 올리지 않으나 설치 후에 보니 NFS와
PPP는 올라와 있다. 그래서 /etc/rc2.d에서 그 둘을 지웠다. 다음에
버츄얼 터미널도 올리면 메모리를 사용하므로 tty1, tty2 두 개만
남기고 모두 막았다. 즉 /etc/inittab에서 아래처럼 지정했다.
- 이렇게 한 후 올라와 있는 프로세스를 보니
아래와 같다.
위에서 sendmail은 남아 있는데 이유는 나중에 ADSL 연결 시에 유동 IP가 부여되면 그 IP를 필자에게 메일로 보내게 하기 위함이다. 그러면 데비안의 IP가 변경돼도 필자가 그 서버의 위치를 알아내 필요시 로그인 할 수 있기 때문이다. - 메모리 사용을 보니 아래와 같다.(top 명령을
사용)
대략 7 메가를 사용하고 있다. 7 메가의 여유가 있으므로 PPP 연결 및 5 대의 피시에 IP masq를 해도 충분할 것 같다. 부족하면 swap이 64 메가나 있으니 걱정할 필요는 없다.
4. 네트워크 설정 리눅스에서 랜카드를 사용하는걸 어렵게 생각하는 분들이 많다. 아래는 랜카드를 인식하는 여러 방법을 설명한다. 왜 지금 단계에서 랜카드를 필요로 하느냐 하면 필자는 커널을 다른 리눅스에서 컴파일해서 486으로 ftp로 전송하였기 때문이다.
4.1 커널 모듈로 랜카드 인식하기 이제 하드를 486으로 옮기고 RTL8019 랜카드를 꼽았다. 랜카드는 우선 한 개만 꼽았다. 랜카드를 두 개를 동시에 꼽으면 설정이 혼동이 되기 때문이다. 데비안 2.1은 기본 커널이 2.0.36 이다. 부팅에는 이상 없으나 랜카드가 안 잡힌다. 당연하다. 기본 커널에는 ne2000 드라이버가 없으니까. (8019 랜카드는 ne2000 호환임) 모듈에 ne.o 를 넣었는데 역시 랜카드가 인식이 안된다. 에러메시지는 IRQ 5를 사용할 수 없다는 말 같다. 이 랜카드는 전에 리눅스에서 사용하던 것이었는데 IO는 0x300, irq는 5번으로 설정해 놓았었다. 물론 PNP는 껐다. 필자가 골동품으로 소장하고 있는 영문 도스
6.22 시스템 디스켓으로 부팅하고서 랜카드 셋업 프로그램을
돌려 진단을 하니 IRQ 5를 다른 장치가 사용 중이란다. IRQ
5는 두 번째 패러랠 포트에서 사용하므로 대만제 랜카드는 보통
IRQ 5로 설정하는게 일반적인데 이 피시의 IO 카드는 IRQ 5를
자기만 사용하도록 독점하는 것 같다. 그래서 자동으로 잡으라고
하니까 9번을 잡는다. IO는 300H 인데 이상 없다. 셋업을 저장하고
리눅스로 부팅해서 랜카드 모듈을 아래처럼 수동으로 올리니
랜카드가 인식된다.
ne io=0x300 0x300은 랜카드에서 사용하는 IO Address이다. *. 레드햇이라면 /etc/rc.d/rc.modules에
아래처럼 넣는다. /sbin/depmod -a 랜카드를 살 때는 필히 셋업 디스켓을 받아야 한다. 다음에 랜카드 셋업 프로그램을 돌려 PNP를 끈다. PNP를 끄지 않아도 인식되는 경우도 있으나 켜 놔서 좋을게 없다. 윈도우와의 멀티부팅에 필요하다고 하나 PNP를 꺼도 윈도우에서 랜카드를 올리는데 지장이 없다. PNP를 꺼서 윈도우에서 자동으로 랜카드를 인식하지 못하면 수동으로 IO와 IRQ를 넣으면 된다. 윈도우에서도 PNP는 완벽하지 않다. 오히려 PNP를 끄고 수동으로 자원을 지정하는게 정확하다.
4.2 커널 컴파일로 랜카드 인식하기 필자는 모듈을 좋아하지 않는다. 모듈을 자동으로 올리는 설정을 사용하면 메모리를 더 많이 사용한다. 다음에 모듈 의존관계니 이런 복잡한 설정이 귀찮다. 그래서 자주 쓰는 기능은 아예 커널에 넣어 둔다. 이번 경우도 메모리가 중요하므로 ADSL 공유에 사용하는 모든 기능은 모듈로 올리지 않고 커널에 넣기로 했다. 또 pppoe를 사용하려면 필히 커널을 컴파일해야 하므로 아예 한꺼번에 넣어 컴파일하는게 편하기 때문이다. 즉 랜카드 드라이버, IP masquerade, PPPoE를 모두 커널에 넣어 컴파일하기로 했다. 커널 컴파일 부분은 아래에 자세히 설명한다. 이 단계에서는 우선 랜카드 부분만 넣었다. 8019 랜카드는 ne2000 호환이다. 그래서 make menuconfig에서 아래 두 부분을 체크했다. [*] Other ISA cards 커널에 랜카드 드라이버를 넣으면 /etc/modules에서는 랜카드 모듈을 지정할 필요가 없다. [참고] 커널
컴파일에서 왜 두 번째 랜카드인 3c509는 넣지 않았는지 궁금할
것이다. 그리고 필자가 사용한 486 마더보드가 과연 커널 2.2.14에서 정확히 작동할지를 알 수가 없어 우선 랜카드와 커널만 먼저 확인해 보기 위해서 였다. pppoe는 랜카드와 커널만 이상 없으면 작동하기 때문이다. 마더보드를 대만제 저가형으로 쓰는 경우 특히 주의해야 한다. 필자도 여러번 대만제 저가 마더보드에서 리눅스가 제대로 설치돼지 않는 경우를 보았다. 얼마 전에도 대만제 2 CPU 마더보드에 Adeptec SCSI 콘트롤러를 꼽아 SCSI 하드를 장착한 조립 PC에 리눅스 서버를 구축해 주었는데, 설치 후에 가끔씩 하드디스크를 접근하지 못해서 마더보드를 교체한 적이 있다. 대만제 마더보드라고 다 그렇지는 않다. Asus 마더보드는 필자가 사용해본 보드 중 리눅스에서 가장 추천할 만하다. 필자는 지금도 피시가 펜티엄 II 266이다. 리눅스를 주로 쓰므로 별로 고급 사양의 피시를 필요로 하지 않기 때문이다. 그런데 리눅스 쓸 때 좋은 피시가 있었으면 하는 때가 바로 커널 컴파일 때다. 커널 컴파일은 CPU 의존이다. 즉 하드디스크 억세스 속도나 버스클락보다 CPU 처리속도가 컴파일 속도를 좌우한다. 초창기 486-33 에서는 커널 컴파일이 1 시간이었던 것으로 기억한다. 그때는 커널 컴파일 걸어 놓고 밥을 먹고 쉬고 있었다. 486-dx66에서는 35분 이었다. 펜티엄에서 15분대로 단축되고 펜티엄 II에서 7분대로 단축되더니 요즘 최신 펜티엄 III 에서는 4 분대까지 단축되었다. 1시간 작업이 4분이니 무려 15배의 성능 향상이다.
4.3 라우팅 테이블 데비안 2.1 에서 커널을 2.2.14로 바꾸면 부팅 시 라우팅 테이블 설정에서 에러가 뜬다. 이유는 커널 2.0에서 사용하는 라우팅 테이블 설정 옵션과 2.2에서 사용하는 옵션이 다르기 때문이다. 그렇다고 route 명령을 다른 것으로 교체하지 말기 바란다. 필자의 경험으로는 system 관련 각종 데몬이나 명령에 관련된 프로그램을 배포본에 원래 있던 것과 다른 것으로 변경하는 것은 별로 바람직하지 않다. 데비안이 다른 배포본보다 편한 부분이 바로 네트워크 설정 부분이다. 데비안에서는 네트워크 관련 스크립트를 /etc/init.d/network 한 개의 파일에서 지정하므로 이 파일 한 개만 수정하면 모든 네트워크 설정이 가능하다. 랜카드가 두 개라도 마찬가지다. 일단 데비안 2.1 에서 커널을 2.2로 업그레이드
한 후 라우팅 테이블 설정이 제대로 안되면 아래처럼 network
파일을 고친다.
“SIOCADDRT: Invalid argument” 그러나 상관없다. 이와 같이 지정했을 때의 라우팅 테이블은
아래와 같다.
VII. IP masquerade 설정 IP Masquerade는 리눅서라면 대부분 아는 개념이다. 리눅스 서버에 부여된 공인 IP 한 개를 내부 주소를 갖는 여러 피시에서 공유해서 인터넷을 사용하게 해 주는 기법으로 윈도우의 sygate와 유사한 기술이다. 이를 구현하려면 크게 4 가지 절차가 필요하다.
1. 커널에 ip masquerade 코드를 넣어 컴파일한다.
[*] Prompt for development and/or incomplete
code/drivers (이 부분은 직접 관련된 부분만 나열한 것이고 다른 옵션이 많다. 관련 HOWTO를 참고 할 것) 레드햇이나 수세에서 설치시 제공하는 커널에는 이미 masquerade 코드가 포함돼 있으므로 이 커널을 쓴다면 컴파일할 필요는 없다. 그런데 PPPoE를 사용하려면 커널을 컴파일해야 하므로 IP Masquerade 관련 커널 옵션은 뒤의 커널 컴파일에서 함께 설명한다. (IX 참조)
2. IP masquerade 관련 모듈 올리기 IP Masquerde 코드 중 아래 부분은 모듈로만
가능하므로 /etc/modules에 아래를 추가한다 IP Masquerade를 사용시
내부 랜에서 IRC, FTP, 리얼오디오 등을 사용하려면 필요하다. (web
과 telnet 만 사용한다면 필요 없다)
취향에 따라 다른 모듈도 더 필요하나 ADSL 공유는
이걸로 충분하다.(레드햇은 /etc/rc.d/rc.modules에 넣는다) 넣었으면
리부팅한 후 아래 명령으로 확인해 본다.
3. ip forwarding 지정 ADSL 라인은 리눅스에 연결되고 다른 윈도우 피시는 리눅스를 통해 인터넷을 연결한다. 즉 리눅스가 게이트웨이가 된다. 따라서 리눅스에는 ip forwarding을 활성화 해 주어야 한다. 레드햇은 /etc/sysconfig의 network 파일에서
FORWARD_IPV4=true 로 하면 된다. 데비안은 /etc/rc.boot 디렉토리에
아래 스크립트를 넣는다.
4. ipchains 설정 ip masquerade 규칙을 지정하는 부분이다. /etc/rc.boot
디렉토리에 아래 스크립트를 넣는다. (레드햇은 /etc/rc.d/rc.local에
지정한다)
[참고] <*> IP: ipportfw masq support (EXPERIMENTAL) 그 외에도 ipmasqadm 이란 프로그램도 필요하다. 아래처럼 지정한다. /usr/sbin/ipmasqadm autofw -A -v -u -r udp
51200 51201 -c tcp 7175 포트포워딩에 대한 자세한 내용을 알려면 리눅스 월드 2000년 3월호에 쓴 본인의 글을 참고 하기 바란다.
VIII. 랜카드 두 개 꼽기 ADSL 모뎀은 랜카드 두 개를 꼽아야 하므로 여기서는 두 개의 랜카드를 사용하는 설정에 대해 설명한다. ADSL을 리눅스에서만 사용한다면 랜카드는 한 개면 된다. 원래 계획은 랜카드를 둘 다 ne2000 호환 대만제로 쓸려고 했다. 그런데 8029 칩을 쓴 대만제 랜카드를 테크노마트에서 사왔는데 PCI 용이었다. 486에는 PCI 슬롯이 없다. 8019와 8029 칩을 사용하는 ISA 랜카드는 같은 ne2000 호환이다. 그러면 랜 카드는 두 개여도 드라이버는 한 개이므로 드라이버가 다른 두 개의 랜카드를 사용하는 경우보다 커널 크기가 줄어들어 메모리도 적게 사용한다. 그런데 ISA 랜카드를 구하지 못해 두 번째 랜카드는 다른 피시에 꼽혀 있던 3c509(ISA)를 사용하기로 했다. 커널을 다시 컴파일해서 3c509를 넣었다. 아래 두 군데를 체크한다. [*] 3COM cards 커널을 바꾸고 3com 카드를 추가로 꼽고 부팅하려고 생각해 보니 3com 카드의 IO Address가 아무래도 8019 랜카드와 같다는 생각이 들었다. 그래서 피시에 3c509 랜카드만 넣고 부팅해 부트 때의 메시지를 보니 IO address가 0x300이고 IRQ는 10번이다. IO Address가 8019 랜카드와 같다. 둘 중 하나를 IO Address를 변경해야 하는데 그러려면 셋업 디스크가 필요하다. 찾아보니 3c509 셋업 디스크가 없다. 그래서 8019 랜카드의 IO Address를 바꾸기로 했다. 도스 디스켓으로 부팅하고 8019 셋업 디스크를 넣어 8019 랜카드의 IO Address를 0x320으로 변경했다. 이제 두 랜카드를 다 꼽고 피시를 리부팅 했는데 3c509는 인식이 되는데 8019 랜카드가 인식이 안된다. 아까 IO를 0x300으로 설정하고 단독으로 꼽았을 때는 인식되었으므로 IO를 변경한게 그 원인인 것 같다.(리눅스에서 ne2000 호환 랜카드는 IO Address가 0x300 인 경우는 자동 인식되나 다른 주소인 경우는 잘 안 된다). 셋업 디스켓으로 IO 주소를 다른 주소로 변경해 다시 시험해 볼 수는 있지만 그런 시행착오를 거치는 것보다 가장 확실한 방법을 쓰기로 했다. 즉 lilo에서 지정하는 방법이다. lilo.conf에 아래 라인을 넣고 lilo를 다시 실행했다. append=”ether=9,0x320,eth0 ether=10,0x300,eth1” 리부팅하니 랜카드가 두 개 다 인식된다. 아래는
dmesg 명령 내용이다
두 번째 랜카드에 IP Address를 부여하고 라우팅 테이블을 설정하는것도 /etc/init.d/network 파일에서 지정한다. (레드햇은 /etc/sysconfig/network-scripts 디렉토리에 ifcfg-eth1 파일을 추가한다) 최종으로 완성된 네트워크 셋업은 아래와 같다.
(두번째 랜카드의 IP 주소를 192.168.1.1로 바꾸었다) 아래에서
eth0는 8019 랜카드, eth1은 3c509이다. 8019 랜카드가 eth0인 이유는
lilo.conf에서 그렇게 지정했기 때문이다.
게이트웨이는 지정하지 않아야 한다. ADSL 연결 시 ADSL 서버의 IP Address가 게이트웨이가 되야 하기 때문이다. 이는 ppp의 옵션 중 defaultroute 옵션이 이에 해당한다. 필자가 사용해본 바로는 랜카드의 MTU 값은 디폴트 값인 1500을 쓰는게 좋다. 1490 이하로 설정할 필요가 없다. PPP와 윈도우 피시의 랜카드의 MTU 값은 1490으로 변경해야 한다. ifconfig 및 route 명령 결과는 아래와 같다.
[참고] 랜카드를
두 개 이상 꼽을 때 lilo.conf에서 지정하지 않고 자동으로 인식되는
경우 랜카드 드라이버를 커널에 넣어 컴파일해서 자동 인식되는 경우 각 랜카드의 인터페이스 이름(ethx)을 부여하는 순서에 대해서 학설이 분분하다. 랜카드가 ISA인지 PCI 인지에 따라서도 여러 학설(?)이 있다. 일단 ISA 랜카드가 여러 개인 경우의 인터페이스 명 부여 순서에 대한 학설은 크게 3 가지다. 1) IO Address 필자의 견해는 1)번이다. PCI 랜카드가 여러 개인 경우 이름 부여 순서에 대해서는 여기에 4) PCI 슬롯 우선순위(마더보드에서 지정) 라는 또 다른 학설이 있다. ISA와 PCI 랜카드가 섞여 있다면 그 때는 어떤 순서가 되나요? 너무 골치가 아파 생략하는게 낫겠다. 혹시 이 부분에 대한 이론을 확실하게 아는 분은 리눅스 월드로 원고 보내주기 바란다. 이제 1단계 작업은 완료되었다. 지금까지의 작업은 리눅스에 IP Masquerade 기능을 부여해 게이트웨이로 사용하는 설정이다. 즉 eth0를 인터넷에 연결하고 공인 IP를 부여한 후 eth1이 속한 네트워크에 다른 윈도우 피시를 연결하면 윈도우 피시는 리눅스의 IP를 공유해서 인터넷 사용이 가능하다.(단 커널에 ip masquerade 코드가 들어 있어야 한다. 대부분의 배포본 기본 커널에는 IP masquerade 코드가 들어 있다.) 다음부터의 설명은 eth0에 ADSL 모뎀을 연결하는 경우만 필요하다.
IX. 커널 패치 및 컴파일
1. 커널 컴파일 준비작업 커널 컴파일에는 몇 가지 링크가 필요하다. 이 링크는 리눅스 설치 후에 한번만 해주면 되고 다음에는 필요가 없다. 일부 배포본은 리눅스 설치 때 커널 소스 설치를 선택하면 자동으로 링크가 이루어 지나 안전을 위해서 리눅스를 새로 설치했다면 첫 번 커널 컴파일 전에 아래 작업을 필히 해주기 바란다. 아래 작업은 root 계정으로 실행해야 한다. 1) cd /usr/include 링크가 정확한지를 필히 확인한다. 아래처럼
나와야 한다.
위 작업을 했으면 새로운 커널을 컴파일할 때는 /usr/src/linux라는 디렉토리만 지우고 새로운 커널 소스를 설치한 후 아래의 3. 번 내용대로 하면 된다. 아래처럼 하면 된다. (1) 새 커널 소스를 /usr/src 디렉토리에 넣는다.
(/usr/src 디렉토리에 linux라는 디렉토리가 만들어 지고 그 안에 커널 소스가 위치한다.)
2. 커널 패치 Jamal 씨의 pppoe를 사용하려면 2.2.14 커널을 패치해야 한다. (다른 버전에서도 될 가능성은 있다. 시간이 나는 사람은 시험해 보기 바란다) 커널을 패치하려면 커널 소스가 /usr/src/linux에 설치되어 있어야 한다. (위의 “(1)”에서 “(4)”까지를 실행해야 한다. 커널 소스에 pppoe 소스를 패치하는 방법은 pppoed
디렉토리 내의 INSTALL 파일에 나와 있다. 아래가 그 부분이다.
실제로 작업을 하면서 이 글의 번역을 보자. 우리는 /usr/src 디렉토리에서 pppoed의 압축을 해제한다.(pppoed0.47.tgz 파일을 /tmp 디렉토리에 다운받았다고 가정한다.) 아래처럼 한다. (1) cd /usr/src 이제 /usr/src 에 pppoed-0.47 디렉토리가 만들어 진다. (4) cd /usr/src/linux
이제 커널 패치는 끝났다. 다음은 컴파일 단계다.
3. 커널 컴파일 1) make menuconfig
: 이 부분은 아래에 자세히 설명한다. 이 단계까지 마치면 /usr/src/linux/arch/i386/boot 디렉토리에 bzImage 라는 이름으로 새 커널이 만들어 진다. 하지만 만들어질 따름이지 이 커널이 기존에 메모리에 들어 있는 사용중인 커널을 대치해 주는 것은 아니다. lilo를 수정 후 리부팅해야 커널이 바뀐다. 아래는 커널 모듈을 만든다. ip masquerade는 모듈로만 가능한 부분이 있으므로 필히 아래 단계가 필요하다. 모듈은 /lib/modules/KERVEL-VERSION 디렉토리에 위치한다. 즉 2.2.14 커널을 컴파일하고 아래 두 명령을 실행하면 /lib/modules/2.2.14 디렉토리에 모듈이 만들어 진다. 5) make modules
4. 커널 설치 커널 컴파일이 끝 난 후 새로 만든 커널을 메모리에 올리려면 lilo를 수정하고 리부팅 해야 한다. 리눅스의 대부분의 프로그램은 리부팅 하지 않고 교체가 가능하나 커널은 예외다. (1) 새 커널을 /boot 디렉토리에 복사한다. cp /usr/src/linux/arch/i386/boot/bzImage /boot (2) /etc/lilo.conf 파일에 지정된 디폴트 부팅 커널에 이 새 커널을 지정한다. 즉 lilo.conf에서 맨 처음 나오는 “image=” 다음에 새 커널 이름을 넣는다. (절대 경로로) image=/boot/bzImage (3) /usr/src/linux에 있는 System.map 도 /boot에 복사한다. rm -rf /boot/System.map (4) lilo 명령을 실행한다. lilo <enter> 혹시 에러 메시지가 뜨는지 잘 살필 것. 이제 리부팅하면 새로운 커널이 메모리에 올라온다. [참고] cd /lib/modules 다음에 커널을 변경한 486의 /lib/modules 디렉토리에 modules.tar 파일을 넣고 아래 명령을 준다. tar xvf modules.tar -------------------------------------------------------------------- 커널 컴파일 시 make menuconfig에서 ip masquerasde
및 pppoe를 사용하기 위해 지정해야 할 옵션이다. 아래는 필자의
피시에서의 경우이므로 랜카드가 달라지거나 하드디스크 종류 또는
다른 기능이 필요하면 달라진다.
(1) (2) (3) (4) (5) 선택 없음 (6) (7) (8) 선택 없음. (9) 선택 없음. (10) (11) 선택 없음. (15) (16) (17) (18) 선택 없음 #1 : ip masquerade와 pppoe에 모두 필요하다. 선택을 마치고 “ESC”키를 누르면 “Do you wish to save...” 메시지가 나온다. → Yes -------------------------------------------------------------------
X. PPPD 설치 1. pppd 2.3.11 설치 ppp_2.3.11.orig.tar.gz 파일을 /usr/src 디렉토리에 넣는다. 1) tar zxvf tar zxvf ppp_2.3.11.orig.tar.gz pppd가 /usr/sbin 디렉토리에 만들어진다. [주의] pppd가
setuid root(-r-s)임을 주의할 것. 다른 곳에서 pppd를 복사해 올
때 특히 chmod 4555 pppd
2. ppp 옵션 설정 pppoed는 실행시 아래 PPP 옵션을 필요로 한다. /etc/ppp/options 파일에 지정한다. lock ( ; 뒤는 필자가 설명을 위해 넣은 것임. 입력하지 말 것: mtu 값에 대한 설명은 뒤에 나온다. ) [주의] 혹시 이
리눅스 서버의 시리얼 포트에 다른 모뎀이 연결되어 ppp 를 사용한다면
3. pap-secrets 파일 설정 PPP에서 사용하는 사용자 인증(사용자가 정당한 사용자인지를 확인하는 것) 방법에는 pap와 chap 가 있다. pap는 /etc/ppp 디렉토리의 pap-secrets 파일을 chap는 chap-secrets 파일을 사용한다. 그 안에 지정하는 방법은 동일하다. 형식은 아래와 같다. 1) client에는 인증을 하는 사람의 계정명을
입력한다. ADSL 의 경우 인증을 요청하는 쪽은 2) server 에는 이 계정(즉 linuxlab)을 사용해서
인증을 하는 서버의 주소(IP)를 넣는다. 3) secret에는 한국통신에서 위의 계정(linuxlab)에 부여한 암호를 넣는다. 4) IP address 난은 인증을 요청하는 측(한국통신)에서
리눅스에 부여하는 IP를 지정하는데 gtoys:/etc/ppp# cat pap-secrets pap-secrets 파일은 파일허가 모드가 600 이어야 한다 -rw------- 1 root root 17 May 14 18:35 [조크] 왜 내
피시만 한국통신서버에게 인증을 해야 하는가? 나도 내 리눅스를
연결하는
4. ip-up 스크립트 /etc/ppp/ip-up 스크립트는 PPP 연결이 이루어 질 때 실행되는 스크립트이다. 예를 들어 PPP 연결이 이루어 질 때 마다 원격지의 메일서버에서 자신의 메일을 가져오는 명령 등을 넣을 수 있다. 필자의 경우 리눅스 서버에서 ADSL 연결이 이루어 지면 리눅스에 부여된 IP 주소를 필자에게 메일로 알리는 명령을 넣었다.(물론 sendmail 의 설정을 해 주어야 한다) 그러면 필자는 메일만 체크하면 지토이즈(gtoys)의 리눅스 서버의 IP 주소를 알 수 있어 필자의 사무실에서 로그인해 서버의 상태를 알 수 있기 때문이다. 필자가 지금 리눅스랩 사무실에서 글을 쓰면서 지토이즈 서버의 설정을 체크할 수 있는 것도 이 때문이다. 아래는 그 부분이다. mail -s “$4” bae@linuxlab.co.kr 이렇게 설정하면 필자에게 아래처럼 메일이 온다.
[주의] 리눅스에
ppp 연결이 여러 개면 모든 ppp 연결시 마다 ip-up 스크립트가 실행된다. 예를 들면 아래와 같다. ADSL 연결시만 특정
명령이 실행되도록 하고 싶다면 ADSL에서 사용하는 장치는 /dev/pppox0
이므로 아래 방식으로 넣는다.
(위에서 $2는 ppp 연결시 사용된 장치명으로서 pppd가 ip-up 스크립트에 넘겨준다.) [참고] /etc/ppp/ip-down
스크립트는 ip-up와는 반대로 ppp 연결이 끊길 때 실행되는
XI. pppoed 컴파일 “IX” 에서 커널 패치를 위해 이미 pppoed 소스를 /usr/src에 압축을 해제해서 pppoed-0.47 이라는 디렉토리가 만들어져 있으므로 아래 순서로 pppoed를 컴파일한다. pppoed-0.47/pppoed 내에 INSTALL 파일에 잘 나와 있다. 1) cd /usr/src/pppoed-0.47/pppoed 이 과정을 끝내면 pppoed 파일이 /usr/local/sbin에 만들어 진다.(Jamal씨의 설명은 /usr/local/bin으로 나와 있으나 오타 이다) -rwxr-xr-x 1 root staff 79762 May 21 13:54 pppoed 그리고 Jamal씨는 이 과정을 마치면 /dev/ 디렉토리에
pppox0라는 장치가 만들어 진다고 하나 필자의 경우 만들어 지지
않았다. 그래서 다음 단계에서 수동으로 만들었다. 장치 부분에
대한 Jamal 씨의 설명이다.
*. MTU 문제 pppoed 사용시 내부 랜의 피시는 mtu 값을 1490 이하로 잡아야 한다. 즉 윈도우 피시는 레지스트리를 편집해야 한다.(아래 “XIV. 내부 랜에 연결된 피시의 네트워크 설정” 1. 참고) 레드햇 6.X 사용자는 pppoed-0.47/contribs 디렉토리 내의 mssclampfw 프로그램을 설치하면 내부 랜의 피시에서 MTU 변경이 필요 없다. 아래는 설치 순서이다. (설치하고 리부팅하면 커널 모듈이 올라온다.) (1) cd pppoed-0.47/contribs 필자는 데비안을 사용하므로 이 부분은 설치해 보지 않았다.
XII. 장치 만들기 mknod 명령으로 다음 두 개의 장치를 만든다. 1) mknod /dev/pppox0 c 144 0
XIII. 연결 이제 모든 준비가 끝났다. 다시 한번 위의 설정들을 점검하고 이상 없으면 케이블을 연결한다. ADSL 모뎀은 첫 번 랜카드에 연결하고(한국통신에서 제공한 케이블을 쓸 것.) 두 번째 랜카드는 윈도우 피시가 연결된 허브에 연결한다.
1. 연결 명령 연결은 아래 명령을 주면 된다. /usr/local/sbin/pppoed 피시를 끄면 이 명령의 효력은 사라진다. 부팅시에
이 명령이 자동으로 실행되도록 데비안은 /etc/rc.boot 디렉토리에
아래 스크립트를 넣는다. 이 스크립트는 모드를 755로 한다.
레드햇이라면 /etc/rc.d/rc.local 파일에 위의 줄을 넣는다.
2. 연결 확인 2.1 리눅스에
다른 ppp 연결이 없다면 연결 여부는 ifconfig 명령으로 확인 가능하다.
아래처럼 ppp0라는 인터페이스명이 추가된다.
211.54.52.137은 자신의 IP 주소이고 211.54.49.4는 한국통신 ADSL 서버의 IP 주소이다. 2.2 이 리눅스의
시리얼 포트에 모뎀이 연결되어 다른 PPP 연결이 있다면 이 경우는
ppp0는 이들 모뎀이 사용할 수도 있다. 이 경우는 ps ax 명령으로
아래 두 줄이 나오는가 확인하는 것이다.
2.3 /var/run 디렉토리에는 아래 두 파일이 만들어 진다. -rw-r--r-- 1 root root 4 May 22 14:47 ppp0.pid 이 파일에는 ASCII 텍스트 파일로 ppp0.pid 에는 위의 2.2의 “ps ax” 명령에서 “/usr/local/sbin/pppoed” 맨 앞의 PID가(위의 경우는 99) 그리고 pppoed.pid 에는 “pppd /dev/pppox0 38400” 맨 앞의 숫자가 들어있다.(101) PPP 연결이 여러개 일 때 ADSL 연결에서 리눅스에 부여한 IP 주소를 알아 내려면 다음 순서를 밟는다. (1) ps ax 명령으로 “pppd /dev/pppox0 38400”
줄을 찾아 맨 앞의 숫자(PID)를 읽는다. 2.4 그리고 /var/lock
디렉토리에 아래 파일이 만들어진다. -rw-r--r-- 1 root root 11 May 22 14:47 LCK..pppox0 이 파일 안에는 ps ax 명령의 “pppd /dev/pppox0 38400” 라인 맨 앞의 PID 가 들어 있다.(위에서는 101) 이 파일은 pppd가 사용하는 장치인 /dev/pppox0 를 다른 프로그램에서 사용하지 못하게 하는 역할을 한다. 2.5 ADSL 연결이
이루어진 경우 라우팅 테이블은 아래와 같이 나와야 한다.
여기서 마지막의 0.0.0.0 다음이 디폴트게이트웨이
주소이다. netstat 명령으로는 PPP 연결에서 자신에게 부여된 IP
주소를 알 수 없다. 오직 상대방의 IP 주소만 나온다.
3. IP 주소 한국통신의 ADSL 라인에서 부여하는 IP 주소는 공인/변동 IP이다. 내부 IP가 아니므로 인터넷의 모든 서비스가 다 가능하나(공인) 연결시마다 IP가 달라진다.(변동) 피시를 끄지 않는다고 IP 주소가 그대로 유지되지는 않는다. 일정 시간 사용을 않으면 연결이 종료 되도록 설정이 돼 있다. (시간 설정은 모른다) IP를 부여하는데 DHCP(IP pool)를 사용하지 않으므로 리눅스에 DHCP 클라이언트를 설치할 필요는 없다. 필자의 견해로는 ADSL 서버의 포트 별로 IP를 할당해 놓은 것 같다. 사용자는 연결시 마다 순서대로 포트를 할당 받으므로 IP가 계속 바뀌는 것이다.
4. 연결 끊기 얼마동안 사용 않으면 연결이 끊기겠지만 연결을 끊고 싶으면 ps ax 명령에서 /usr/local/sbin/pppoed 라인의 맨 앞에 나오는 숫자(PID) 를 kill 명령 뒤에 넣는다. 위의 경우는 “kill 99” 이다.
5. 자동 재접속 ADSL이 한번 연결되면 연결이 끊기지 않도록 해주는 방법을 여러 곳에서 제시하고 있으나 별로 권하고 싶지 않다. 쓰지 않으면서 연결을 계속 유지한다면 다른 사용자의 사용에 지장을 주는 결과가 되기 때문이다. 리눅스에서 일정 간격으로 한국통신의 ppp 서버에 ping을 쏘는 방법도 회선 장애로 인한 끊김에는 효과가 없다. 끊김을 방지하는 방법은 별 실효가 없고 오히려 끊겼을 때 재연결해 주는 방식이 의미가 있다. 이때는 끊겼다는 사실을 어떻게 확인하는가가 중요한데 ifconfig 에서 ppp0를 확인하는 것도 확실한 방법이 아니다. 리눅스에 다른 PPP 연결이 있다면 ppp0 가 ADSL 연결이라는 보장이 없다. ppp 옵션 중 lcp-echo-interval 90 위 둘은 끊김을 방지하는 옵션이 아니라 ppp 연결이 끊겼는데도 ppp 데몬(즉 ppp0)가 계속 살아 있어서 재연결에 지장을 주지 않기 위해 필요하다. 즉 90초 간격으로 2 번 lcp-echo 패킷을 보냈는데도 상대에게서 응답이 없으면 ppp 연결을 종료하라는 뜻이다. 이부분을 ppp 옵션에 넣으면 데비안의 경우 /var/log/daemon.log
에 90초 간격으로 아래 2개의 라인이 나타난다.
첫 번 라인은 리눅스에서 한국통신 서버에 보낸 응답 요청 패킷이고 (즉 너 살아 있니?) 아래는 한국통신 서버에서의 답장이다.( 나 잘 있다.) 선 연결이 끊기거나 한국통신의 서버가 다운되면 2번째 라인이 나타나지 않는다. 90초 후 다시 응답 요청 패킷을 리눅스에서 보내도 한국통신 서버가 회신을 않으면 그 때는 PPP 데몬이 죽는다. 따라서 끊김을 확실히 아는 방법은 위의 PPP 옵션을 넣고 ps ax 명령에서 “pppd /dev/pppox0 38400” 라인이 있는지 체크하는 것이다. 끊김을 확인하고 자동으로 재 연결하는 방법은 아래의 방법이 가능할 것 같다. (1) cron 으로 일정 시간마다 확인하는 방법(끊김 확인은 “ps ax” 명령을 쓰는게 낫다.) (2) /etc/ppp/ip-down 스크립트를 사용하는 방법
: ip-down 은 ppp 연결이 끊길 때 실행되는 [참고] pppoed-0.47/contribs
디렉토리에 ppp 연결이 ADSL 하나일 경우 ppp 자동 재연결
XIV. 내부 랜에 연결된 피시의 네트워크 설정 1. MTU 수정 ADSL 연결을 공유할 윈도우 피시는 레지스트리를
수정해 MTU 값을 리눅스의 /etc/ppp/options에 지정한 MTU 값과
같게 지정한다.(레드햇 6.X 에서 mssclampfw 프로그램을 설치했으면
필요 없다.) 1) 시작 -> 실행 -> “열기”에 regedit 를 입력 후 “확인” 2) HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans
에 3) 편집기의 상단 메뉴에서 “편집” -> “등록”
-> “문자열 값(s)”을 선택하면 “New value”가 4) 이 부분을 선택 한 채 메뉴에서 “편집”
-> “수정” 을 선택하면 “값의 데이터” 입력 창이 필자는 1490으로 지정해서 사용하고 있는데 아무런 문제가 없다. (고속일수록 MTU 값은 높은게 바람직하다.) 이 부분에 대한 다른 윈도우 에서의 수정은
2. IP 주소 내부 랜의 윈도우 피시에는 192.168.1.2부터 254까지 중복되지 않게 지정한다.
3. 게이트웨이 주소 내부 랜의 윈도우 피시의 게이트웨이는 리눅스의 두 번째 랜카드(eth1)IP 주소이다. 필자의 경우는 192.168.1.1이다.
4. DNS 서버 주소 리눅스와 윈도우 피시의 네임서버에는 다른 사이트에
자신의 DNS 서버가 설치되어 있으면 그 IP 주소를 넣는다.(반드시
숫자를 사용할 것) 자신의 DNS 서버를 꼭 지정할 필요가 없다면
(자신의 DNS 서버가 혹시 다운되었는지 수시로 체크해 볼 필요가
있다면 자신의 DNS 서버를 지정하는게 좋다.) 한국통신의 DNS 서버
주소(168.126.63.1)를 지정해야 연결 시간이 조금이라도 단축된다.
리눅스에서 DNS 서버 지정하는 파일은 resolv.conf이다. 아래처럼
지정한다.
XV. 설치 후기 한국통신의 ADSL을 사용해 본 결과 속도는 만족스러웠다. 비록 2 mbps는 안 나오지만 1 mbps 이상은 나오는 것 같다. 이 정도로도 인터넷의 각종 서비스를 이용하는데는 충분하다. 또 연결 속도도 매우 빠르다. 연결 명령 후 2~3 초 이내에 연결이 이루어 지는 것 같다. 한국통신에 바램이 있다면 고정 IP 서비스를 제공해 달라는 것이다. 회사에서 웹서버를 인터넷에 1 mbps 속도로 연결하려면 현재는 랜투랜으로 연결해야 하는데 월 비용이 100만원이 넘는다. 게다가 라우터 및 CSU 등의 장비를 임대해야 하고 회선도 4선식을 사용해야 한다. 그런데 기존의 전화선에 단지 ADSL 모뎀 하나로 1 mbps 속도로 홈페이지를 운영할 수 있다면 중소 규모의 회사나 SOHO 경영자들에게 큰 환영을 받을 것이다. 조금 알 수 없는 부분은 한국통신의 서버에서
1분 간격으로 LCP Echo 패킷이 날라온다는 점이다.
이는 PPP 연결 여부 즉 사용자가 ADSL을 사용 중인지를 파악하기 위함 인 것 같은데 이렇게 자주 확인할 필요가 있는지 의문이 간다. 이 패킷도 대역폭을 사용하므로 조금 간격을 늘리는게 바람직할 것 같다. |