EdgeRouter - 최소한의 시스템 수정을 통한 AICCU 없는 SIXXS 연결

download at 2017-02-07T01:02:41Z origin

AICCU는 부팅 허용 클록 오차 내에서 발생하기 때문에 부팅시 발견하기 매우 어렵습니다. 가끔 버그로 발견이 가능하기에 하트비트로도 판단이 불가능합니다.

제공된 고정 ipv4 주소에서 아무것도 하지 않고 SIXXS에 연결이 가능합니다. sit 터널을 다음과 같이 설정하기만 하면 됩니다:

tunnel tun0 {
address (your tunnel endpoint ipv6 address a:b:c:d::2/64)
encapsulation sit
local-ip (local ipv4)
remote-ip (sixxs PoP ipv4)
}

그리고 경로를 설정합니다:

protocols {
 static {
 route6 ::/0 {
 next-hop a:b:c:d::1 {
 }
 }
 }
 }

SIXXS PoP는 종단 주소를 알 수 없기 떄문에 고정 ipv4 주소 없이는 동작하지 않습니다.

SIXXS는 또한 동적 6in4 하트비트 터널도 지원합니다. 이미 sit 파트를 수행할 수 있기 때문에, 남은 할 일은 AICCU 없이 하트비트를 다시 동작하도록 하는 것입니다.

Oliver Walter의 하트비트 스크립트 덕분에, 해당 스크립트를 파이썬으로 다시 작성했기 때문에 더이상 netcat 패키지를 설치할 필요가 없습니다.

localv6 는 ipv6 터널 종단 주소이고, a:b:c:d::2/64 와 같은 주소의 형태를 가집니다.

remotev6는 ipv6 터널 원격지 종단 주소이고, a:b:c:d::1/64와 같은 주소의 형태를 가집니다.

remotev4는 SIXXS PoP ipv4 입니다.

비밀번호는 sixxs의 패스워드가 아니라 터널의 하트비트 패스워드입니다.

#!/usr/bin/python
#
import time,hashlib,subprocess,socket,os
localv6=""
password=""
remotev4=""
remotev6=""
while 1:
 hbBase="HEARTBEAT TUNNEL " + localv6 + " sender " + str(int(time.time()))
 hbToSend=hbBase + " " + hashlib.md5(hbBase + " " + password).hexdigest()
 sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
 sock.sendto(hbToSend, (remotev4, 3740))
 sock.close()
 with open(os.devnull, "w") as fnull:
 subprocess.call(["/bin/ping6", "-s", "8", "-c", "1", "-q", remotev6], stdout=fnull, stderr=fnull)
 time.sleep(60)

로그인 정보를 /config/scripts/hearbeat.py에 입력합니다.

추가적으로 /config/scripts/post-config.d/heartbeat.sh 스크립트 내용이 위의 파이썬 스크립트 실행을 위해서 필요합니다:

#!/bin/bash
#

start-stop-daemon --start --background --exec /config/scripts/heartbeat.py

version 1.5부터는 시작 스크립트는 실행 후 종료해야하지만, 파이썬으로 작성된 하트비트 스크립트는 그럴 필요가 없습니다.