ppp0일까 ppp1일까? 스크립트를 위한 PPP VPN 세션 이름 지정
pppd는 각 세션에 인터페이스 이름과 프로필 표식을 부여한다. 둘 다 훅에서 읽고 ppp0에서 읽지 마라. 고정 이름은 거부가 의도된 경우에만 예약하라.
훅 스크립트가 실행되어 ppp0을(를) 읽고, 그 순간 그 이름을 가진 인터페이스에 경로를 적용한다. 때로는 의도한 터널이고, 때로는 일 분 전에 연결된 세션이다. 다음 재연결이 번호를 옮기고, 같은 스크립트가 조용히 잘못된 링크를 구성한다. 해결책은 방금 실행된 호출에서 인터페이스를 가져오고, 의도한 프로필을 그 옆에 함께 두는 것이다.
옵션에서 훅까지 한 세션을 따라가기
세션이 생성되는 지점에서 시작하라. xl2tpd는 그 터널의 pppoptfile이 지정한 옵션 파일로 pppd를 실행하므로, 플러그인과 유닛 번호, 프로필 표식은 전역 파일이 아니라 그곳에서 결정된다. 연결 관리자가 자체 옵션을 생성할 수도 있으므로 /etc/ppp/options을(를) 편집하는 것은 관심 있는 터널이 바뀌었다는 증거가 아니다. 링크가 올라오면 pppd는 배포판의 디스패처에서 알림 스크립트를 실행한다. 그 스크립트들은 인터페이스 이름을 첫 번째 인자로, 프로필 표식을 여섯 번째 인자로 받는다.
환경은 같은 사실을 IFNAME 및 PPP_IPPARAM 같은 이름으로 전달하지만, 그 가용성은 설치된 디스패처에 달려 있다. 변수에 의존하기 전에 디스패처를 읽되, 어떤 배포판은 업스트림 인자 순서를 유지하고 다른 배포판은 스크립트를 호출하기 전에 환경을 걸러낸다는 점을 알아 두어라. $1와 여섯 번째 인자만 쓰는 스크립트는 두 방식 모두에서 동작한다.
호출에서 인터페이스 읽기
전통적인 훅은 인터페이스를 먼저 받는다. 그 위치 값이 스크립트를 실행시킨 세션을 설명하는 인터페이스 식별자다. 맨 위에서 변수에 저장하고, 그 변수를 경로와 방화벽 규칙, 해제에 사용하라.
ipparam office-vpn
프로필 표식은 옵션이 정의되는 곳에 붙이고, 스크립트에는 붙이지 않는다. 터널의 옵션 파일에 그 줄이 있으면 그 파일에서 생성되는 모든 세션이 여섯 번째 인자로 office-vpn를 지닌다. 스크립트는 표식으로 분기하면서도 실제 인터페이스에 작용할 수 있다. 표식은 안정적이고 인터페이스는 세션마다 할당되므로 코드에서 둘을 분리해 두어라.
거부가 옳을 때만 이름을 요청하라
고정 이름은 인자를 읽는 것보다 단순해 보이지만 실패 동작을 바꾼다. unit 옵션은 나가는 연결에 번호를 요청하며, 그 유닛이 이미 사용 중이면 pppd는 동적 할당으로 되돌아간다. 그 결과 어디에도 프로필을 위해 ppp0를 예약하는 것은 없다.
ifname ppp-office
ifname 옵션은 다르게 동작하는데, 요청한 이름이 이미 사용 중이거나 할당할 수 없으면 pppd는 다른 이름을 고르지 않고 종료한다. 그것은 외형상의 개명이 아니라 정책 선택이다. 같은 프로필의 두 번째 동시 인스턴스를 거부해야 할 때 사용하고, 설치된 pppd와 연결 관리자가 그 옵션을 전달하는지 확인하라.
어느 쪽이든 스크립트가 보는 이름이 바로 다루어야 할 이름이다. 설정된 이름이 호출을 읽어야 할 필요를 없애지는 않는데, 재시작된 세션이 이전과 다른 이름을 제시할 수 있기 때문이다.
해제를 설정한 세션과 일치시키기
경로와 방화벽 규칙은 그것을 만든 스크립트보다 오래 살아남으므로, 해제는 세션이 소유한 객체만 정확히 제거해야 한다. 규칙에 인터페이스뿐 아니라 프로필 표식으로도 태그를 붙이고, 그 태그로 삭제하라. 두 터널이 동시에 올라올 수 있다면 ppp를 언급하는 모든 것을 지우는 것이 한 연결 해제가 다른 연결을 깨뜨리는 방식이다.
버그를 드러내는 경우로, 첫 번째가 아직 연결된 상태에서 두 번째 PPP 세션을 올리고 그다음 첫 번째를 다시 연결해 훅이 어느 인터페이스를 보고하는지 보라. 세션 하나로 성공한 실행은 이름 할당에 관해 아무것도 증명하지 않는다. VPN을 멈춘 상태로 반복해 해제가 낡은 경로를 남기지 않는지 확인하라.
표식과 인터페이스, 훅 경로를 배포 노트에 남겨라. 재부팅 후 번호가 바뀌면 그 세 값이 구성 편집 없이 스크립트가 다르게 동작한 이유를 설명한다.