원문 : https://dawoum.duckdns.org/wiki/No-IP/Auto-renew
No-IP를 이용해서 유동 ip 주소를 FQDN으로 바꾸고 있습니다. 그런데, 무료 사용자는 호스트이름 3개를 사용하고 있고, 30일 전에 홈페이지를 방문해서 사용 중이라고 알리는 renew을 해야 합니다.
과거에 시간을 놓쳐 renew를 하지 않았더니, 6개월 이상을 해당 이름을 사용하고 있다는 메시지를 받았습니다. 물론 그 이름은 외국 사람이나, 우리나라의 다른 사람도 탐낼만한 이름이 아니기 때문에, 다른 사람이 사용할 일이 없을 것으로 보이기 때문에, 그때 당시 의도적으로 이름을 입력하지 못하도록 막는 것 같은 느낌을 받았습니다. 아마도 유명한 이름은 누구나 사용하고 싶기 때문에, 정책적인 이유로 그렇게 동작하는 것으로 보이며, 현재 확인해 보니, 30일 동안 재-등록을 할 수 없도록 만든다고 합니다.
어쨌든, 그런 일이 다시 발생하는 것을 막기 위해, Expires 또는 Confirm 메시지가 보이면, 자동으로 renew를 하도록 변경해야 할 것입니다.
후기
7일 남은 날까지는 Modify로 보이는 것이 6일 남는 날 Confirm으로 바뀝니다. 크론 작업은 월/수/금 3시 45분에 동작하도록 설정이 자동으로 되어 있었지만, 목요일날 동작시켜 보니, 자동으로 Comfirm을 실행해서, 30일 남은 것, Modify로 바뀝니다. 한 가지 귀찮은 일을 덜었습니다.
2021년 10월에 3일 전에도 Modify가 Confirm으로 바뀌지 않았습니다. 가능한 방법은 이름을 지우고, 다시 만드는 것입니다.
Installation
Git 서버에서 소스 코드를 받습니다.
- git clone https://github.com/loblab/noip-renew
위의 코드는 더 이상 관리가 되고 있지 않아서, 아래에서 받아서 설치하십시오:
Configurations
설정은 거의 자동으로 이루어집니다:
- ./setup.sh
이때, username, password를 입력하면 /usr/local/bin 아래에 다음 파일을 설치합니다:
- noip-renew.py
- noip-renew-skd.sh
- noip-renew-$USERNAME.sh
Ubuntu/20.04#Chromium-browser에서 처럼, PPA를 설치하니, 필요한 프로그램을 설치해 줍니다. 다만, 해당 위치가 실행파일을 검색하는 위치가 아니기 때문에, 아래와 같이 심볼릭 링크를 만들어야 합니다.
- sudo ln -sf /usr/lib/chromium-browser/chromedriver /usr/local/bin
이전과 다르게, 크론 작업은 사용자 파일에 등록되는데, 처음에는 지정된 형식으로, 보통 다음날 1:00에 실행이 되고, 그것을 기반으로 남은 날짜로부터 만기 전 6일을 계산해서, 다시 크론 작업을 등록합니다. 해당 내용은 crontab -e로 볼 수 있습니다.
Troubleshootings
selenium 관련 오류
버전 4.12.0 업그레이드 후에 오류 발생함. bookworm의 4.8.3 버전 설치 후에 정상 작동함.
fix for changed expiration label
새롭게 수정된 홈페이지 정보에 따라, noip-renew.py 파일을 issue 89에 따라 수정해야 합니다.
if expiration_days <= 7: # 98번째 줄
host_remaining_days = host.find_element_by_xpath(".//a[contains(@class,'no-link-style')]").get_attribute("data-original-title") # 138번째 줄
if regex_match is None: # 143번째 줄
host_remaining_days = host.find_element_by_xpath(".//a[contains(@class,'no-link-style')]").text # 144번째 줄
regex_match = re.search("\\d+", host_remaining_days) # 145번째 줄
Message: element not interactable
noip-renew.py의 77번째 줄
self.browser.find_element_by_name("Login").click()
다음과 같이 바꿉니다:
self.browser.find_element_by_class_name(u"nomarg").click()
호스트 이름 테이블을 읽지 못함
noip-renew.py의 42번째 줄
HOST_URL = "https://my.noip.com/#!/dynamic-dns"
다음과 같이 바꿉니다:
HOST_URL = "https://my.noip.com/dynamic-dns"
Seleuim
설치가 잘 된 것으로 보였지만, 크론 작업에서 다음 오류가 생깁니다:
ImportError: No module named 'selenium'
해당 모듈 설치 과정이 있음에도 불구하고, 제대로 설치가 되지 않은 것으로 보입니다. 다음과 같이 설치할 수 있습니다:
- sudo apt install python3-selenium
Urllib3
다음 오류가 생깁니다.
ImportError: No module named urllib3.exceptions
- sudo apt install python3-urllib3