집의 글로벌 IP 주소 변경을 Mackerel에 알립니다.

배경


  • 집의 Raspberry Pi에서 Google Cloud Platform API를 사용하고 있습니다
  • Google Cloud Platform은 결제 한도를 설정할 수 없으므로 API 키 누출이 무서워집니다
  • API 키가 누출 되더라도 괜찮을 것입니다.
  • 집은 고정 IP가 아니므로 글로벌 IP 주소가 변경 될 때마다 수동으로 Google Cloud Platform 화이트리스트에 공급자의 네트워크 주소를 추가합니다
  • 우선, 글로벌 IP 주소의 변경 통지는 Mackerel로 대응합시다

  • 그래서 Raspberry Pi에서 움직이는 mackerel-agent에서 글로벌 IP 주소 변경을 경고로 해주는 설정을 실시했습니다.
    덧붙여 이하 Raspberry Pi를 전제로 기술하고 있습니다만, 스크립트 자체는 Linux 범용입니다.

    Macherel에서 Raspberry Pi 모니터링



    참고 : Raspberry Pi를 Mackerel로 모니터링

    글로벌 IP 주소 변경 감지 스크립트 만들기



    참고 : Linux에서 글로벌 IP 주소를 확인하는 방법

    h tp : // g ぉ 바 ぃ p. 메 에서 글로벌 IP 주소를 얻고 변경이 감지되면 오류를 반환하는 스크립트 checkglobalip.sh를 만듭니다. Raspberry Pi에서 작동합니다.

    /home/pi/bin/checkglobalip.sh

    checkglobalip.sh
    #!/bin/sh
    IPFILE='/tmp/globalip'
    
    PREVIP=`cat $IPFILE` 2>/dev/null
    IP=`curl globalip.me` 2>/dev/null
    
    if [ "$IP" != "" ]; then
      echo "Global IP address: $IP"
    
      if [ "$PREVIP" != "$IP" ]; then
        echo $IP > $IPFILE
        if [ "$PREVIP" != "" ]; then
          echo "Global IP address changed from $PREVIP"
          echo
          whois -h whois.nic.ad.jp $IP | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.\S*' | tr '\n' ' '
          exit 1
        fi
      fi
    else
      echo "Can't get IP address"
      exit 1
    fi
    
    return 0
    

    Macherel 체크 항목으로 추가



    글로벌 IP 주소가 변경되면 Google CLoud Platform에 등록한 IP 주소 범위를 벗어나 API가 403을 반환하여 사용할 수 없게 됩니다. 취미의 이용으로 즉각 대응은 필요 없기 때문에, 검출은 1시간 둡니다(Macherel로 설정 가능한 최대치). 너무 자주 h tp : // g pba p. 메 에 액세스하는 것도 느껴집니다.
    AM4:00경에 globallip.me가 매번 503을 돌려주기 때문에 max_check_attempts = 2로 합니다.

    /etc/mackerel-agent/mackerel-agent.conf
    [plugin.checks.globalip]
    command = "/home/pi/bin/checkglobalip.sh"
    max_check_attempts = 2
    check_interval = 60
    memo = "This check monitors change of global IP address."
    

    Mackerel 재부팅


    sudo systemctl start mackerel-agent
    

    Mackerel에서 LINE Notify로 알림 알림





    이런 느낌으로 알림이 도착합니다. 알림이 오면 CMAN 보고 할당 IP 네트워크 주소를 확인하고 Google Cloud Console의 'API 및 서비스' - '자격 증명'의 서버 IP 주소 목록에 추가. 우선 자신이 사용하고 있는 프로바이더로부터의 액세스라면 허가라고 합니다.

    정직도 좀 좋은 방법 없는 것일까라고 생각하지 않아도 됩니다만, 과연 얼마나 추가를 계속하면, 프로바이더의 네트워크 주소를 망라할 수 있는 것일까.

    추가



    CMAN에서 네트워크 주소를 조사하는 것보다 whois 명령이 더 좋습니다. 체크 스크립트에도 넣었습니다.
    pi@raspberrypi:~ $ whois -h whois.nic.ad.jp 122.26.128.XXX
    Network Information:            
    a. [Network Number]             122.26.128.0/17
    b. [Network Name]               OCN
    g. [Organization]               Open Computer Network
    (略)                                
    Less Specific Info.
    ----------
    NTT COMMUNICATIONS CORPORATION
                         [Allocation]                                122.16.0.0/12
    

    잘 모르겠지만 주소 범위가 OCN(122.26.128.0/17)보다 Less Specific Info에서 나오는 NTT COM(122.16.0.0/12) 쪽이 넓다. Google Cloud Platform에는 이쪽을 설정하는 편이 편하다.
    상관없지만 OCN이 Open Computer Network의 약자라는 것은 처음으로 알았습니다.

    좋은 웹페이지 즐겨찾기