나만의 동적 DNS 레코드 호스팅 실행

나만의 동적 DNS 레코드 호스팅 실행

나는 다양한 웹사이트, SSH 서버, 이메일을 호스팅할 데비안 서버를 집에서 운영할 계획입니다.

동적 IP 주소가 있지만 고정 IP에 대해 추가 비용을 지불할 의향이 없습니다.

자체 네임서버를 실행하고 다음과 같이 no-ip와 같은 것을 사용하여 등록된 도메인에 대해 자동 업데이트 네임서버 주소를 설정하면 DNS 문제를 해결할 수 있을 것이라고 생각합니다.

등록 기관에서:

john-hunt.com (and my other domains) nameservers = johnns1.noip.com & johnns2.noip.com

johnns1.noip.com, johnns2.noip.com -> my dynamic IP

이렇게 하면 내 도메인의 이름 서버가 항상 내 집 컴퓨터를 가리키게 됩니다.

실제로 DNS 레코드를 제공하기 위해 집에 있는 컴퓨터에서 BIND나 이와 유사한 것을 실행하겠습니다.

내 진짜 문제는 IP 주소가 변경될 때 업데이트를 수락하고 적용하도록 BIND(또는tinydns 등)를 구성하는 방법을 잘 모른다는 것입니다. 이를 방지하는 방법을 알아낼 수 있습니다(johnns1.noip.com을 폴링하고 핑하여 내 IP 주소를 얻은 다음 영역 파일을 greping하고 5분마다 다시 로드합니다..). 하지만 그다지 안정적이지는 않습니다.

누구든지 이것에 대한 경험이 있습니까? no-ip의 향상된 서비스를 살펴봤지만 호스팅 기록에 대해 도메인(여러 개가 있음)당 25달러를 청구합니다.

답변1

나는 지난 10년 이상 동안 나에게 효과적이었던 다음과 같은 일을 합니다. 다음과 같은 서비스에 동적 DNS 이름을 설정했습니다.동적 DNS(올해까지 무료) 또는 기타 유사한 제공업체. 이는 끊임없이 변화하는 내 IP가 항상 sam.dyndns.org와 같은 정적 이름에 뿌리를 두도록 하는 발판을 제공합니다.

그런 다음 바인딩에서 이 정적 이름을 가리키는 CNAME을 생성합니다. 짜잔, 영구 이름이 생겼습니다.

답변2

BIND는 DDNS를 지원하지만 BIND를 실행하는 컴퓨터 서버가 아닌 다른 컴퓨터 서버에서 업데이트가 제공될 수 있도록 업데이트가 DNS 프로토콜 자체를 통해 처리되는 것처럼 보이기 때문에 인증 키를 생성해야 하므로 설정하는 것이 약간 지루합니다. 확실히 보안 인증 메커니즘이 필요합니다.

원래는 이 경로를 직접 갈 계획이었지만 결국 Amazon의 Route53 서비스에서 내 도메인을 호스팅하게 되었습니다. 동적 IP에 사용 가능한 레코드를 업데이트하는 API가 있습니다. 항목에 대해 낮은 TTL을 설정하고 내 컴퓨터에 cronjob을 설정하여 내 현재 IP 주소를 찾고 내 IP가 변경될 때 Route53 레코드를 업데이트합니다.

이 글을 쓰는 시점에서 비용은 월 $0.90 정도이므로 무료는 아니지만 서비스에 내장된 중복성과 장애 조치를 고려하면 내 사용 사례에 꽤 합리적으로 보입니다. 영역에 실제로 입력한 항목 수에 관계없이 영역별로 비용이 계산되기 때문에 나머지 DNS 항목도 여기에 있습니다.

IP가 변경될 때 awsRoute53 레코드를 업데이트하기 위해 명령줄 도구와 다음과 같은 스크립트(cron에서 매시간 실행)를 사용합니다.

#!/bin/sh

function updateDNS
{
        TARGET_ZONEID="$1"
        TARGET_FQDN="$2"
        IP="$3"
        CUR_IP="$4"
        TYPE="$5"

        if [ "$IP" != "$CUR_IP" ]; then
                echo '{ "Comment": "DDNS update", "Changes":[ { "Action":"UPSERT", "ResourceRecordSet":{ "ResourceRecords": [ { "Value":"'"$IP"'" } ], "Name": "'"$TARGET_FQDN"'", "Type": "'"$TYPE"'", "TTL": 60} } ] }' |
                        aws route53 change-resource-record-sets --hosted-zone-id "$TARGET_ZONEID" --change-batch file:///dev/stdin > /dev/null
        fi
}

TARGET_ZONEID="ABC123"
TARGET_FQDN="homeip.example.com."
IP=`dig +short myip.opendns.com @resolver1.opendns.com`
CUR_IP=`dig +short "$TARGET_FQDN"`
TYPE="A"

updateDNS "$TARGET_ZONEID" "$TARGET_FQDN" "$IP" "$CUR_IP" "$TYPE"
# Can add more updateDNS calls to do other hosts, AAAA records, etc.

호스트 중 하나가 다운되더라도 IP가 계속 업데이트되도록 네트워크의 여러 호스트에서 이 스크립트를 실행합니다.

관련 정보