2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS ElasticIPで日本のIPを確保するためのスクリプト

Last updated at Posted at 2023-09-05

r.gif
f.png
image.png

経緯

某日本の企業が運営するファイルサーバにEC2からアクセスを試みるも、国外からのアクセスがブロックされているらしく。

で「Elastic IP アドレスを割り当てる」を100回ほど手で繰り返しても、日本のIPアドレスを取得できず。
(ガチャ運なし😂)

といったことがあり、日本のIPを取得するスクリプトを書いた。

スクリプト

  • スクリプトに必要なツール
    • AWS CLI: $ sudo apt install awscli
    • jq: $ sudo apt install jq
run.sh
#!/bin/bash

set -e

function ip2Country() {
  local ip=$1
  local reversed_ip=`echo $ip | awk -F'.' -v OFS='.' '{print $4,$3,$2,$1}'`
  # `text = "US"` -> `US`
  local country=`nslookup -type=TXT $reversed_ip.cc.wariate.jp | grep -oP 'text\s*=\s*"\K\w+'`
  echo $country
}

MAX_TRIES=720 # 最大試行回数
INTERVAL_SECS=120 # 短いと同じIPが連続するので2分くらいにする

tries=0
while [ $tries -lt $MAX_TRIES ]; do

  eip_output=`aws ec2 allocate-address --domain vpc`

  public_ip=`echo $eip_output | jq -r .PublicIp`
  country=`ip2Country $public_ip`
  if [ "$country" = "JP" ]; then
    echo "IP address [$public_ip] is in Japan (COUNTRY: $country)"
    exit 0
  else
    echo "IP address [$public_ip] (COUNTRY: $country)"
    aws ec2 release-address --allocation-id `echo $eip_output | jq -r .AllocationId`
  fi

  tries=$((tries + 1))
  sleep $INTERVAL_SECS
done

echo "Reached max tries without finding a JP IP. Exiting..."

学び: "日本のIP" とは?IPアドレスの国情報について。
①ドメインの登録者の所在国 ≠ ②サーバーの物理的な場所

whois コマンドの国コードフィールドで知ることができる。
cc.wariate.jp1のサービスの使って知ることができる。IPアドレスの実際の地理的位置、つまりIPアドレスが使用されている地域や国。

ドメインの登録者の所在国が "JP" であっても、サーバにアクセスできなかったので...。なるほど①と②は別なのね。

補足

  1. cc.wariate.jp サービスの他にも、GeoIPデータベースを使う方法などあるらしい。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?