하나로 외장형 ADSL 사용하기 류 태중 장 진엽 고침 1999년 8월 23일 저의 ADSL ANT는 이상하게도 MS-CHAP을 쓰지 않고 PAP을 쓰더라고요. 여기서는 안전하게 두 가지 모두 쓰겠습니다. 제가 아는 바로는 보통 PAP을 쓰는 것이 보통입니다. 순서: 0. 실험해본 환경들 : a. pppd 2.3.5와 linux kernel 2.0.36 (Redhat 5.2를 그대로 쓴 것) b. pppd 2.3.7-2와 linux kernel 2.2.11 (Redhat 6.0과 비슷하나, 커널을 upgrade한 것임. pppd 2.3.7-2의 README에는 2.2.x 버전의 커널이기만 하면 된다고 함.) 1. 커널이 PPP를 지원해야 한다. 부팅 중 PPP line discipline registered 라는 메시지가 나오면 확실히 지원하는 것. 그런데 모듈로 지원될 때에는 부팅 시에는 아무 메세지도 나오지 않고, pppd를 돌렸을 때에 비로소 /var/log/messages 파일에 PPP line discipline registered라는 말이 나온다. 모듈로 되어 있는지 여부를 모를 때에는, 아래의 debugging 준비작업을 한 상태로 pptp를 돌려보고, /var/log/pppd.log에 PPP line discipline registered가 안 나오면 커널을 다시 설정해서 컴파일하자. 1.1 Debugging을 하고 싶으면, 다음과 같이 준비한다: /etc/syslog.conf에 다음 줄 첨가 daemon.debug /var/log/pppd.log 그리고 /etc/ppp/options에 debug 라는 줄 첨가. 2. 리눅스용 pptp client를 설치한다. 2.1 리눅스용 pptp client를 아래 사이트에서 바로 받음. http://www.cag.lcs.mit.edu/~cananian/Projects/PPTP/release/pptp-linux-latest.tar.gz 2.2 pptp client의 소스 코드를 고친다 : pptp_ctrl.c에서 pptp_dispatch_ctrl_packet() 함수 내의 switch문에서 case PPTP_START_CTRL_CONN_RPLY: 내의 if (ntoh8(packet->result_code) != 1) { 를 if (ntoh8(packet->result_code) != 1 && ntoh8(packet->result_code) != 0) { 로 바꿈 3. pptp를 컴파일. 주의할 점은 Makefile에 CFLAGS += '-DPPPD_BINARY="/usr/sbin/pppd"' 를 확인하여 "/usr/sbin/pppd"가 실제 pppd의 위치를 가리키는지 확인. 그 다음에 그냥 make를 쳐서 컴파일. 4. 각종 환경 설정 4.1 Ethernet Card의 주소를 ADSL ANT와 같은 subnet에 있게끔 함 : Redhat의 경우는 root로서 netcfg를 돌리고, Interfaces 탭 밑에 eth0(랜카드가 여러 개 있으면 ADSL ANT에 물려 있는 것)의 IP주소 확인. 주소는 ADSL ANT와 같은 앞자리 숫자로 시작되어야 함(예:10.0.0.140). 그렇지 못하면 Edit로 고쳐서 Save한 다음에 시스템 재시작. 4.2 하나넷의 DNS 서버를 /etc/resolv.conf 의 첫머리에 입력 : nameserver 210.94.0.7 4.3 /etc/nsswitch.conf에 hosts:로 시작되는 줄을 다음 줄로 대체 : hosts : files dns nisplus nis (이것을 안 하면 Netscape 등에서 DNS를 연락 못함.) 4.4 사용자 암호들을 pppd에서 보낼 수 있도록 해 준다. 이것은 MS-CHAP와 PAP의 경우에 따라 다르다. 두 가지를 나눠서 4.4.1과 4.4.2 과정으로 나누었는데, 둘 다 해 놔도 상관이 없으므로 그렇게 하는 것을 권장. 4.4.1 MS-CHAP 이용: 4.4.1.1 /etc/hosts 첫머리에 다음 두 줄 추가 : 10.0.0.140 [자기 컴퓨터 이름] 10.0.0.138 adsl 여기서 10.0.0.140는 ADSL ANT에 물려있는 랜카드의 주소여야 한다. [자기 컴퓨터 이름]은 자기 마음대로 정할 수 있다. 4.4.1.2 /etc/ppp/chap-secrets에 다음 두 줄 추가 : [사용자 ID] adsl [패스워드] adsl [사용자 ID] [패스워드] 여기서 [사용자 ID]는 jychang@hanaro와 같은 형식으로 쓴다. 4.4.2 PAP 이용: /etc/ppp/pap-secrets에 다음 줄 추가 : [사용자 ID] 10.0.0.138 [패스워드] 여기서 [사용자 ID]는 jychang@hanaro와 같은 형식으로 쓴다. 5. pptp 실행 5.0 Debugging을 하고 싶으면 따로 창을 띄운 다음 root로서 tail -f /var/log/pppd.log 를 수행한다. (위의 1.1 과정을 했어야 된다.) 5.1 pptp 실행 방법은 사용자 인증에 MS-CHAP을 쓰는가 PAP을 쓰는가에 따라 약간 다르다. 아래의 5.1.A에 따라 MS-CHAP 방식으로 pptp를 실행시켜도, ADSL ANT가 PAP를 요구하면 pptp client가 자동으로 PAP 암호를 전송하므로, 우선은 5.1.A 방식으로 해 보는 것이 안전함. 5.1.A. MS-CHAP을 쓰는 방법 : ./pptp adsl name [자기 컴퓨터 이름] user [사용자 ID] remotename adsl noipdefault noauth defaultroute 여기서 [사용자 ID]는 jychang@hanaro 형식으로 한다. [자기 컴퓨터 이름]은 이전에 4.4.1.1에서 /etc/hosts에 입력한 자기 컴퓨터의 이름이다. (제대로 안 되는 것 같으면 아래 주의 사항 참조.) 5.1.B. PAP을 쓰는 방법 : ./pptp 10.0.0.138 user [사용자 ID] noauth noipdefault defaultroute 여기서의 [사용자 ID]도 jychang@hanaro 형식으로 한다. (제대로 안 되는 것 같으면 아래 주의 사항 참조.) 5.2 주의 사항 : a. pptp를 실행한 다음에 혹시... warn[open_unixsock:pptp_callmgr.c:308]: Call manager for 10.0.0.138 is already running. 와 같은 에러가 나오면 rm -f /var/run/pptp/10.0.0.138 를 수행한다. b. pptp를 다시 실행시킬 때에는 우선 pppd를 죽이고 그다음에 pptp: call manager for 10.0.0.138를 죽인다. 후자까지 죽여놓지 못하면 아무리 설정을 잘해도 다음 번에 연결이 안된다. 6. 접속 확인 : tail -f /var/log/pppd.log를 수행하는 창에서 Aug 20 00:34:02 mycomp pppd[451]: local IP address 210.?.?.? Aug 20 00:34:02 mycomp pppd[451]: remote IP address 210.?.?.? 와 같이 나오면 접속 완료!