パブリック IPv6 をより安全に使用するためのいくつかの方法
Categories:
一部のユーザーは、パブリック IPv6 を使用して自宅に接続する必要がある場合があります。Tailscale や Zerotier などの VPN が内向き接続を確立するためにトンネリングや穴あけを必要とするのとは異なり、IPv6 での自宅接続は直結です。携帯電話のセルラー ネットワークのほとんどは IPv6 を持っていることが多く、自宅への接続は非常に便利です。
以前、家庭宽带使用常见 DDns 子域名可能会使电信宽带服务降级 という記事を共有し、IPv6 を使用する際に通信事業者が設けている罠について説明しました。簡単に言えば、ドメイン名がスキャンされ、自分のドメイン名を公開することは IPv6 を公開することと同等であるため、スキャンされる可能性があり、サービスが見つかると着信接続が増加し、通信サービスの品質が低下する可能性があるということです。
その共有記事ではドメイン名のスキャンについてしか言及しておらず、ネットワーク空間スキャンについては触れていませんでした。このようなスキャンは公開された情報を気にせず、直接 IP プールを巡回してスキャンします。このような状況は防ぐのが難しいです。
ネットワーク空間スキャンは通常、以下のいくつかの側面を含みます:
- IP アライブ検出:ARP、ICMP、TCP などのプロトコルを使用してオンラインホストを識別します。
- ポート/サービス検出:ポートスキャンによりオンラインホストの開放ポートをフィルタリングし、対象ホストのサービス情報、バージョン情報、オペレーティングシステム情報を取得します。
- オペレーティングシステム検出:応答データパケットを分析して対象ホストのオペレーティングシステムの種類とバージョンを推測します。
- トラフィック収集:ネットワークトラフィックを監視して異常な動作や攻撃パターンを発見します。
- エイリアス解決:複数の IP アドレスを持つルーターに対して、IP アドレスとルーターの間のマッピング関係を確立します。
- DNS 検出:IP アドレスの逆引きにより、IP アドレスとドメイン名の間の対応関係を確立します。
ここでは、ネットワーク空間スキャンに捕まらないようにするためのいくつかの方法を共有します:
- 内部 DNS サーバーが AAAA レコードを返さないようにする
- 内部サービスをドメイン名経由でのみ許可し、IP 直接アクセスを禁止する
- AdGuardPrivate のようなプライベート DNS サービスを使用する
内部 DNS サーバーが AAAA レコードを返さないようにする
さまざまなウェブサイトにアクセスする際、自然にアクセスすることでソース IPv6 が暴露され、相手側サーバーがソース IPv6 を取得でき、ユーザー側でファイアウォールを有効にしていない場合、この IPv6 はネットワーク空間スキャンの優先巡回プールに入れられてしまいます。
/56 プレフィックスの IPv6 アドレスをスキャンプールに入れ、下位 16 ビットだけを巡回することで、スキャン範囲を大幅に縮小することもできます。
長年の IPv6 使用経験から、日常的なインターネット使用において IPv6 は IPv4 と比較して明らかな違いはありません。そのため、IPv6 の外部訪問を犠牲にして、自宅への直結だけに使用することもできます。
IPv6 解析を返さないように設定する方法
内部 DNS サーバーで AAAA レコードを返さないように設定します。
内部 DNS サービスは一般的に AdGuardHome を使用します。設定例を参照してください:

設定後、内部ネットワークのデバイスは外部ネットワークにアクセスする際に IPv4 のみを使用し、IPv6 は使用しなくなります。
内部サービスをドメイン名経由でのみ許可する
家庭で公開しているサービスがポートベースでアクセス可能である可能性があり、これは非常に簡単にスキャンされてしまいます。
サービスを作成する際には 0.0.0.0 や :: にリスンする設定はしないようにしましょう。経験豊富な人なら理解できると思いますが、ほとんどすべてのサービスの起動手順のデフォルトは 127.0.0.1 や ::1 だけにリスンすることです。これはパブリック IP にリスンするとリスクがあるためです。
リバースプロキシがドメイン名だけを許可する設定方法
nginx の例
重要なのは server_name をドメイン名に設定し、_ や IP に設定しないことです。
server {
listen 80;
server_name yourdomain.com; # yourdomain.com を実際のドメイン名に置き換えてください
# IP アドレスでアクセスしようとするユーザーに 403 Forbidden を返す
if ($host != 'yourdomain.com') {
return 403;
}
location / {
# ここにウェブサイトのルートディレクトリとその他の設定を記述
root /path/to/your/web/root;
index index.html index.htm;
}
# その他の設定...
}
IIS の例
重要なのは host name をドメイン名に設定し、空のままにしないことです。

プライベート DNS サービスを使用する
自分だけが使用する DNS サービスにカスタム解決を追加し、偽造ドメイン名を内部サービスに解決させます。

これにはいくつかの明らかな利点があります。
- まず、ドメイン名は自由に構築でき、ドメインを購入する必要がないため、ドメイン費用を節約できます。このような偽造ドメイン名がスキャンされても、攻撃者は自分の DNS サービスにリクエストを送って正しい解決結果を取得する必要があります。
- 自分のプライベート DNS サービスのアドレスと仮想ドメイン名を同時に公開する必要があります。そしてスキャン者がドメイン名の解決ロジックを変更し、公開されたプライベート DNS サーバーにドメイン名の解決をリクエストし、仮想ドメイン名をリクエストの
Headersに埋め込む必要があります。それからスキャンを開始できます。
sequenceDiagram
participant Scanner as ネットワークスキャナー
participant DNS as プライベートDNSサーバー
participant Service as 内部サービス
Scanner->>DNS: 1. プライベートDNSサーバーのアドレスを発見
Scanner->>DNS: 2. 仮想ドメイン名の解決をリクエスト
DNS-->>Scanner: 3. 内部サービスのIPを返却
Scanner->>Service: 4. 仮想ドメイン名を使用してHeadersを構築
Note right of Service: Headersに正しい仮想ドメイン名が<br/>含まれていない場合はアクセスを拒否
alt Headersが正しい
Service-->>Scanner: 5a. サービス応答を返却
else Headersが間違っている
Service-->>Scanner: 5b. 403エラーを返却
end
上記のすべての手順をスキャナーが完了した場合にのみ、内部サービスをスキャンできる可能性があります。これにより、スキャンの難易度が大幅に向上します。
AdGuardPrivate ではプライベート DNS サービスを作成でき、カスタム解決機能を使用して偽造ドメイン名を追加できます。もちろん、dnspod.cn も使用できます。
この 2 つのサービスの提供内容には大きな違いがあり、AdGuardPrivate は元々の AdGuardHome をベースに改造したもので、機能面で dnspod よりもはるかに優れています。各自で評価してください。
まとめ
- 内部 DNS サーバーが AAAA レコードを返さないようにする
- 前提条件
- パブリック IPv6 があること
- 内部 DNS サーバーがあること
- 設定
- AAAA レコードを返さない設定
- 前提条件
- 内部サービスをドメイン名経由でのみ許可し、IP 直接アクセスを禁止する
- 前提条件
- 自分のドメインがあること
- ドメインサービスプロバイダーが DDNS を提供していること
- 内部にリバースプロキシサービスがあること
- 設定
- DDNS タスクを設定
- ドメイン名経由でのみアクセスを許可
- 前提条件
- プライベート DNS サービスを使用する
- 前提条件
- プライベート DNS サービスがあること
- プライベート DNS サービスがカスタム解決を提供していること
- プライベート DNS サービスが DDNS を提供していること
- 設定
- DDNS タスクを設定
- カスタム解決を追加し、偽造ドメイン名を内部サービスに解決させる
- 前提条件
最後に、
- 直結での自宅接続で最もシンプルで安全なのは、内向き接続が確立した Tailscale や Zerotier ですが、ネットワークのさまざまな理由で確立できない場合もあります。
- 見知らぬ Wifi には気軽に接続しないでください。一度で情報をすべて漏らしてしまう可能性があります。大容量データカードを手に入れられるように、とりあえず信頼を通信事業者に任せましょう。大容量データカードが必要な場合は私に連絡してください(冗談です)、私も必要です。