라즈베리파이4와 cloudflare

안녕하세요? JParker입니다.

이곳에 사용된 cloudflare.com과 연동해서 이용한 python 소스를 공개합니다.

import requests
import os
API_KEY = "Cloudflare에서 만든 api key"
EMAIL = "이메일 주소"
ZONE_ID = "DNS 존 ID"

# Cloudflare 도메인 정보 #
DOMAIN_NAME = "도메인명"
RECORD_NAME = "2차 도메인"
RECORD_ID = "도메인 ID"

def get_current_ip():
# 현재 공인 IP 주소 가져오기
response = requests.get("https://api.ipify.org?format=json")
data = response.json()
return data["ip"]

def update_cloudflare_dns(ip):
# Cloudflare DNS 레코드 업데이트
url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records"
url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records/{RECORD_ID}"

headers = {
   "Content-Type": "application/json",
    "X-Auth-Key": API_KEY,
    "X-Auth-Email": EMAIL
}
params = {
    "type": "A",
    "name": f"{RECORD_NAME}.{DOMAIN_NAME}",
    "content": ip 
}

response = requests.put(url, headers=headers, json=params)
data = response.json()

if data["success"]:
    print(f"DNS 레코드 업데이트 성공 - IP: {ip}")
    os.system("cp -f /root/resolv.conf /etc/resolv.conf")
else:
    print("DNS 레코드 업데이트 실패")
if name == "main":
try:
    current_ip = get_current_ip()
    print(f"현재 IP 주소: {current_ip}")
    update_cloudflare_dns(current_ip)
except Exception as e:
    print(f"오류 발생: {e}")

위와 같이 작성하셔서 ip.py 라고 만드시면 됩니다. 저의 경우 계속 dns가 바뀌게 되어 /root/resolv.conf 파일을 만들어 동작될 때마다 /etc/에 복사하도록 변경하였습니다. 여러분들도 더 멋지게 추가하면 될 거 같습니다.

이 파일을 작성한 이후에 sudo su – 하신 뒤 crontab -e 명령으로 아래와 같이 작성하시면 계속 5분 마다 동작되고 문제가 없다면 도메인이 계속 유지되는 것을 확인하실 수 있을 것입니다.

*/5 * * * * /usr/bin/python /root/ip.py 2>&1

더 궁금하신 사항이 있으시다면 댓글 부탁드릴께요~

이 글은 카테고리: 라즈베리파이4에 포함되어 있으며 태그: , , , (이)가 사용되었습니다. 고유주소를 북마크하세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다