私は、テストにAmazonサーバーを使用するプロジェクトの開発者です。 FoxyProxy
の使用からiptables
を使用したルーティングに切り替えています。これは、より便利だからです。
私が遭遇した問題は、DNS解決を実行しているときに、特定のドメインを解決するための複数の呼び出しで複数のアドレスが返されることに気付くということです。
例えば:
$ Host sample.domain.com
sample.domain.com has address 50.200.80.100
$ Host sample.domain.com
sample.domain.com has address 50.200.80.101
これはグーグルとはまったく対照的です:
$ Host www.google.com
www.google.com has address 74.125.225.81
www.google.com has address 74.125.225.80
www.google.com has address 74.125.225.84
www.google.com has address 74.125.225.82
www.google.com has address 74.125.225.83
www.google.com has IPv6 address 2607:f8b0:4009:803::1012
現在、私はホストを何度も解決してIPのリストを作成し、それを使用してiptableルートを設定しています。これを行うためのより良い方法はありますか?
注:サーバーについて何も変更するためのアクセス権がないため、提案されたソリューションはクライアント側である必要があります。
トラフィックの多いWebサイトのほとんどには、トラフィックを処理する複数のフロントエンドサーバーがあります。ほとんどの場合、これらのIPアドレスはそれぞれロードバランサーであり、その背後にはさらに多くのサーバーがあります。
ドメインの"A"レコードの取得に関心がある場合は、Dig
、nslookup
、またはHost
コマンドを使用できます。 Linux
を使用している場合は、Dig
コマンドが推奨される取得方法です。
$ Dig A google.com +short @8.8.8.8
74.125.236.167
74.125.236.160
74.125.236.169
74.125.236.168
74.125.236.161
74.125.236.162
74.125.236.164
74.125.236.163
74.125.236.165
74.125.236.174
74.125.236.166
上記のコマンドは、ドメインgoogle.com
のすべての"A"レコード(アドレス)を収集します。クエリを実行するたびに、同じIPアドレスのセットが取得されますが、順序は異なります。
使用するiptables
ルールの種類はわかりませんが、ほとんどの場合、"A"レコードは、私のDig
出力に基づいて74.125.236.0/24
のような同じネットワークに属します。
悲しいことに、これを行う簡単な方法はありません。
Google.comゾーンのゾーン転送を実行できた場合は、すべてのAレコードとAAAレコードを解析できます。ただし、Googleはパブリックゾーン転送を許可しておらず、許可したとしても、DNSデータは頻繁に変更される可能性があります。
Googleは現在のネットワーク範囲をDNS TXTレコードで公開しています。 https://support.google.com/a/answer/60764?hl=en
$ nslookup -q=TXT _netblocks.google.com 8.8.8.8
$ nslookup -q=TXT _netblocks2.google.com 8.8.8.8
ARINのWhoISを使用して、IPアドレスまたは会社を検索することもできます。 http://whois.arin.net/rest/net/NET-74-125-0-0-1/pft
ネットワークブロックはISPに登録され、サブセットは特定の組織に提供される場合があることに注意してください。