배철수 : bae@linuxlab.co.kr/ 리눅스월드 발행인
|
한국통신의 adsl 라이트나 프로의 경우 보통 30분 정도 사용을 않으면 연결이 끊어진다. 리눅스로 연결할 경우도 마찬가지다. 그래서 연결이 끊기지 않도록 일정 시간 간격으로 ping을 쏘는 방법도 있으나 이 방법은 회선이나 한국통신측의 사정으로 끊기는 경우에는 효과가 없다. 즉 이 경우는 다시 수동으로 연결 명령을 주어야 한다. 아래에 소개하는 방법은 pppoed-0.47/contribs 디렉토리에 있는 keepalive.ppp 스크립트를 이용해서 일정 시간 간격으로 ppp 연결 여부를 체크해 연결이 끊기면 pppoed 연결 명령을 다시 실행하는 것이다. 따라서 선로 사정이나 한국통신측의 사정으로 끊긴 경우에도 장애의 원인이 제거되면 ADSL 연결이 다시 이루어 지므로 ping을 쏘는 것보다 유리하다. 이 자동 재연결 방법은 한국통신에서는 별로 좋아하지 않을 것 같다. 사용하지도 않는데 ADSL 포트 하나를 계속 점유하기 때문이다. 따라서 꼭 필요한 경우에만 제한적으로 사용하길 권한다.
1. 사전 절차 리눅스에 ADSL을 연결해 여러 대의 피시에서 내부 주소로 인터넷을 사용하는 방법은 리눅스월드 2000년 6월호에 이미 소개했으므로 여기서 설명하지 않는다. 그리고 아래 설명은 ADSL 모뎀이 eth1에 연결되어 있고 내부 랜은 eth0에 연결된 경우이다. 배포본은 데비안을 기준으로 한다.(버전은 무관함.)
2. 연결 명령 데비안의 경우 부팅 시에 자동 실행되는 사용자 스크립트는 /etc/rc.boot 디렉토리에 넣는다. 그러면 ls 명령에 나타나는 순서대로 부팅시 실행된다. 레드햇의 rc.local 파일과 유사하지만 더 편하다. 그 디렉토리에 원하는 작업 내용을 담은 스크립트를 넣고 이름을 내용에 맞게 짓는다. 실행 순서를 지정하려면 이름 맨 앞에 숫자를 넣으면 된다. 아래는 필자가 이 글을 쓰는데 참고 한 사이트의 /etc/rc.boot 디렉토리 예이다. -rwxr-xr-x 1 root root 10122
Sep 9 1998 0setserial 위에서 0setserial 은 시리얼 포트 셋업, 1ip_forward 은 ip forwarding 지정, 2ipchain은 ip masquerade 설정이다. 3adsl이 바로 adsl 연결 명령이다. 내용은 아래와 같다. #!/bin/bash 위에서 -I eth1 은 ADSL 모뎀이 두 번째 랜카드에 연결되어 있기 때문이다. 다음에 sleep 6를 넣은 이유는 ADSL 이 연결이 이루어 지는데 3 ~ 5 초의 시간이 걸리기 때문에 그 시간 내에 다른 스크립트나 명령이 실행돼 ADSL 연결을 방해하지 않도록 하기 위함이다. 연결이 이루어지면 아래처럼 라우팅 테이블이 만들어 진다. linuxlab:/etc/rc.boot# netstat -nr
3. 끊김 확인 및 재연결 끊김 확인 및 재연결은 아래의 keepalive.ppp 스크립트가 담당한다. 이 파일을 /etc 디렉토리에 넣고 /etc/rc.boot 디렉토리에 5chk-adsl 스크립트로 이 스크립트를 연결한다. 위 두 파일은 모드가 755 여야 한다. (/etc/rc.boot 디렉토리의 모든 스크립트는 실행 모드여야 한다.)
3.1 /etc/rc.boot/5chk-adsl #!/bin/bash * 백그라운드로 실행해야 한다.(&)
3.2 /etc/keepalive.ppp #!/bin/bash * 스크립트의 작성자는 Matthew Darwin 씨이다.
pppoed-0.47/contribs 디렉토리에 들어 1) PATH= .... /usr/local/sbin 을 추가함 :
pppoed를 컴파일하면 /usr/local/sbin 디렉토리에 2) pppoed -I eth1 : 원 스크립트에는 pppoed
만 있다. ADSL 모뎀이 eth0에 연결된 경우는 3) sleep 120: 이 값은 사용자가 적당히 지정할
것.(초 단위) 위의 경우는 120초에 한번씩 * 처음의 sleep 5는 adsl 연결 명령(3adsl) 이
실행되고 바로 체크가 이루어지면 adsl 연결 * 위의 스크립트는 ifconfig 명령을 사용해 ppp0가
나타나는지를 검사하는 방법이다. linuxlab:~# ifconfig eth0 Link encap:Ethernet HWaddr
00:48:54:82:67:B0 eth1 Link encap:Ethernet HWaddr
00:C0:26:59:4F:CD ppp0 Link encap:Point-to-Point Protocol ADSL 연결이 끊기면 위의 ppp0 이하가 사라진다. 그러면 keepalive.ppp 는 $LOG "Starting pppoed" 이 부분을 실행해서 다시 ADSL을 연결하고 120초를 기다릴 것이다. 그런데 만약 리눅스에 ADSL 외의 다른 PPP 연결이 있다면 (다이얼업 ppp) 이 경우는 ppp0가 ADSL 연결이라는 보장이 없다. 따라서 이 때는 위의 keepalive.ppp 스크립트는 사용할 수가 없다. 이상과 같이 설정 후 리부팅해서 adsl이 연결되었을 때 ps ax 명령을 주면 아래처럼 나온다.(관계없는 부분은 생략했음.) 115 ? S 0:30 sh /etc/keepalive.ppp
4. 로그 파일 생성 이 부분은 필수적인 부분은 아니나 필요한 경우가 있다. 위의 스크립트에서 로그파일을 생성하는 부분이 있다. 즉 "$LOG ... " 부분이다. 로그 파일이 기록되려면 /etc/syslog.conf 파일에 daemon.notice 부분이 지정 되야 하는데 데비안에는 지정이 안되어서 /etc/syslog.conf 에 아래 줄을 추가했다. daemon.notice /var/log/adsl.log 이렇게 지정하면 아래처럼 로그 파일이 기록되므로 adsl.log 파일을 보면 keepalive.ppp 스크립트가 정상으로 작동하는지를 확인할 수 있다.(물론 ps ax 명령도 가능하다.) 로그파일 내용 (var/log/adsl.log) -------------------
5. 로그 파일 지움/다시 만들기 위의 로그 파일이 너무 커지는 것을 막기 위해 시스템이 리부팅 되면 로그 파일을 지우도록 한다. /etc/rc.boot 디렉토리에 4del-log 파일을 넣고 아래처럼 지정한다. (혹시, 한 1년 정도 피시를 전혀 리부팅 않으면 로그 파일이 너무 커져 하드를 다 차지할지도 모르니 월 1회 정도는 리부팅해 줄 것. 아니면 cron으로 한 달에 한 번 이 로그 파일을 지우게 만드는 방법을 쓸 것.) #!/bin/bash |