/etc/hosts
ホスト名を追加してホスト名を確認しても、実際にDNSルックアップを実行できないことがわかります。これは次のような行になります
123.45.67.89 myhostname
私の質問は、この部分への接続試行がmyhostname
常に失敗するように、最初の部分(IPアドレス)をどれだけ高く設定できるかです。
編集する:失敗とは、可能であれば明示的なICMP拒否を意味します。タイムアウトを待ちたくありません。
理由
時には、仮想マシンのインスタンスがどこかで実行されています。クラウドサーバーは起動するたびに異なるIPを設定し、パブリックドメイン名の支払いを行いません。インスタンスを起動し、/etc/hosts
そのホストのブラウザタブを簡単にSSHで接続または開くための行を追加するスクリプトがありますmyhostname
。
それはすべて良いですが、私も欲しいです。削除するこのエントリは、インスタンスがシャットダウンして接続しようとしたときに発生します。myhostname
いいえDNSルックアップを実行するか(悪い場合)、現在使用しているローカルドメインから同じ名前の一部のホストに接続しようとします。
答え1
したがって、a) リモートコンテンツと一致しないことが保証され、b) すべてのコンテンツを拒否する IP アドレスが必要です。
何かを作る:
iptables -I INPUT 1 -i lo -d 127.66.66.66 -p tcp -j REJECT --reject-with tcp-reset
iptables -I INPUT 2 -i lo -d 127.66.66.66 -j REJECT
(または選択したiptablesファイアウォール管理ツールと同じです。)
これで、127.66.66.66へのすべてのTCP接続は応答としてTCP RSTパケットを受信し、他のすべての接続はICMP拒否を受信します。 (私の経験では、TCP RSTは通常ICMPよりも速くTCP接続を拒否します。)
IP アドレス 127.66.66.66 はループバック セグメント内にあるため、ローカル以外のすべてを妨げないことが保証されます。
答え2
「見つかりません」応答を強制する方法が見つかりませんhosts
。独自のDNSサーバーが必要なようです。しかし、できることがいくつかあります...
IPアドレス
127.0.0.1
(または何でも127/8
)を使用して、名前がローカルホストを指すようにします。非稼働サービスの場合、システムは TCP リセットまたはエラーまたはパケットの破棄で応答しますが、SSH をローカルで実行している場合は正常に動作しません。個人使用アドレス(例:)を使用してください
10/8
。構成によっては、システムがパケットを送信しようとすることがありますが、ISP はパケットが到達する前にパケットを破棄する必要があります。または、コンピュータを終了する前にファイアウォールでそれを拒否することもできます。実際には無効なアドレスを使用しています。
0.0.0.1
(または0/8
を除くすべての項目0.0.0.0
)がLinuxとWindowsの接続時にエラーを生成するようです。0.0.0.0
たとえば、DHCPクライアントは自分のアドレスを知る前に自分のアドレスを使用し、Linuxのlocalhostを直接指すように見えます。 (ブロック全体は実際に「このネットワークのこのホスト」を意味するように予約されています。)
もちろん、これらすべては基本的に嘘であり、最もクリーンな解決策ではありません。