셸 스 크 립 트 를 사용 하여 동적 도 메 인 이름 을 자동 으로 업데이트 합 니 다.

배경
개발 서버 는 사내 네트워크 에 두 지만 외부 네트워크 에서 마음대로 방문 할 수 있어 야 한다.회 사 는 전 화 를 걸 기 때문에 IP 가 고정 되 지 않 는 다.
전통 적 인 방법 은 공유 기 에 DDNS 계 정 비밀 번 호 를 입력 한 후에 상관 하지 않 을 수 있다 는 것 이다.그러나 이 는 DDNS 서비스 제공 업 체 가 필요 하 다. 일반 대형 신뢰 할 수 있 는 DNS 서비스 업 체 는 DDNS 서 비 스 를 지원 하지 않 는 다.
우리 회사 의 DNS 는 dnspod 에 위탁 관리 되 어 있 습 니 다. 그들의 도 메 인 이름 업데이트 속도 가 빠 르 고 방문 노선 에 대한 분석 과 최적화 도 할 수 있 습 니 다. 현재 네트워크 통신 이 원활 하지 않 은 상황 에서 도 유용 합 니 다. 유일한 유감 은 DDNS 에 대한 지원 이 없다 는 것 입 니 다.
해결 방안
그러나 한 가지 희망 은 DNS Pod 가 DNS 조작 API 를 제공 하기 때문에 API 변 화 를 통 해 DDNS 를 실현 할 수 있 습 니 다. 코드 만 쓰 면 됩 니 다.
사고방식 은:
corn 을 통 해 주기 적 으로 (매 분) 프로그램 을 실행 합 니 다. 이 프로그램 은 외부 사 이 트 를 통 해 자신의 외부 네트워크 ip 을 얻 은 다음 에 자신 이 저장 한 이전 IP 와 비교 하고 변 하면 DNS 를 업데이트 합 니 다. 그렇지 않 으 면 작 동 하지 않 습 니 다.
서비스 업 체 들 이 DNS 업 데 이 트 를 자주 허용 하지 않 기 때문이다.
이루어지다
#!/bin/sh

#  IP              
IPFILE=/tmp/ipNow


#  ifconfig.me         IP
#ip=`curl -s 'http://checkip.dyndns.org' | sed 's/.*Current IP Address: \([0-9\.]*\).*/\1/g'`
ip=`curl -s 'ifconfig.me'`
echo `date +%FT%T` "ip now:$ip"
#update ip record file
if [ -e $IPFILE ]; then
    echo "ip:$ip"
    #      IP
    ipOld=`cat $IPFILE | tail -n 1 | awk '{print $1}'`
    echo "cat IPFILE:$ipOld"
    if [ -n "$ip" ]; then
        #         ,      $ip       ,  $ip         
        if [[ "$ip" != $ipOld ]]; then
            echo "$ip `date +%FT%T`" >> "$IPFILE"
            echo "ip is different with the last time!"
            #update DDNS
            re=`curl -X POST https://dnsapi.cn/Record.Ddns -d "[email protected]&login_password=xxx&format=json&domain_id=7483437&record_id=35656076&sub_domain=dev&value=$ip&record_line=  "`
            echo $re >> /var/log/updateDDNS.log;
        else
            echo "ip not change
    ";
        fi; 
    fi; 
else
    echo $ip >> "$IPFILE"
fi

기교.
검 측 IP
IP 주소 여 부 를 확인 하려 면 다음 과 같은 방법 으로 정규 표현 식 으로 판단 할 수 있 습 니 다.
if [[ $ip =~ ([0-9]{2}.?){4} ]]; then echo 'yes'; else echo 'no'; fi

위의 '= ~' 연산 자 를 주의 하 십시오. 오른쪽 이 정규 표현 식 임 을 표시 합 니 다.특히 설명 이 필요 한 것 은:
  • 표현 식 에 따옴표 가 없습니다.
  • 다른 언어 에서 사선 을 사용 하여 표현 식 전 체 를 감 싸 지 않 았 습 니 다.

  • 셸 대 조건 테스트 방법
    세 가지 가 있 습 니 다: test 키워드;단층 괄호 '[arg...]';이중 괄호 '[expression];
    앞의 두 가 지 는 동의어 이지 만 문법 이 다르다.이중 괄호 기능 이 더욱 강력 합 니 다. test 키워드 와 같은 기능 을 실현 할 수 있 을 뿐만 아니 라 복잡 한 표현 식 도 테스트 할 수 있 습 니 다. '& &', '|', '!' 을 지원 합 니 다.논리 조합 및 정규 표현 식 ('= ~' 연산 자 사용).

    좋은 웹페이지 즐겨찾기