DNS

Mihomo には完全な DNS サーバーが内蔵されており、透過プロキシ環境でドメイン情報が得られない問題を解決します。これは fake-ip によるルーティングの基盤でもあります。ここでは dns フィールド下の主要な設定項目を紹介します。

基本フィールド

enable必須

内蔵 DNS サーバーを有効にするかどうか。ほとんどのケース(特に TUN モード使用時)で有効にする必要があります。

listenオプション

DNS サービスのリスニングアドレス。例:0.0.0.0:1053。LAN 内の他のデバイスも通常の DNS サーバーとして利用できます。

ipv6オプション

IPv6 の結果を解決するかどうか。トップレベルの ipv6: true と併用しないと有効になりません。

use-hosts / use-system-hostsオプション

設定ファイルの hosts フィールド、およびシステムの hosts ファイルを使用するかどうか。

respect-rulesオプション

DNS リクエスト自体も rules ルーティングルールに従って出口方式を選択するかどうか。proxy-server-nameserver と併用します。

拡張モード

enhanced-modefake-ip / redir-host

fake-ip:各ドメインに仮想だが一意の内部 IP を割り当て、接続時に本来の宛先へ復元します。速度が速く互換性も良いため、ほとんどのケース(特に TUN モード)で推奨されます。redir-host:実際の解決結果をそのまま返すため互換性はやや劣ります(一部の SNI ルーティングが必要な場面で影響が出ることがあります)が、fake-ip のアドレス帯に対応していない古いクライアントには適しています。

fake-ip-range198.18.0.1/16

fake-ip が使用するアドレス範囲。通常は変更不要です。

fake-ip-filter-mode / fake-ip-filterオプション

fake-ip を使用しない(実際の解決を行う)ドメインを指定します。内部ドメインやローカルサービスディスカバリなどの場面でよく使われ、ドメインワイルドカードに対応しています。

config.yaml YAML
dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter-mode: blacklist
  fake-ip-filter:
    - '*.lan'

解決サーバー

default-nameserverオプション

nameserver/fallback 内のドメイン形式のサーバーアドレスを解決するための「ブートストラップ」DNS。ここには IP のみ記述可能で、ドメインは指定できません。

nameserver必須

デフォルトのドメイン解決サーバー一覧。UDP/TCP/DoT/DoH/DoQ など複数のプロトコル書式に対応。詳細はDNS タイプを参照。

nameserver-policyオプション

ドメイン / geosite: / rule-set: ごとに専用の解決サーバーを指定します。nameserver より優先度が高く、「国内ドメインは国内 DNS、海外ドメインは海外 DNS」といった用途によく使われます。

fallback / fallback-filterオプション

fallback はバックアップの解決サーバー(通常は海外の DNS を指定)。fallback-filter はどのような場合に解決結果を「疑わしい」と判断して fallback で再問い合わせするかを決めます(例:国内 IP が返ってきたのにドメインが汚染されている疑いがある場合など)。

direct-nameserver / direct-nameserver-follow-policyオプション

「直接接続ルールにヒットした」ドメイン専用の解決サーバー。direct-nameserver-follow-policy と併用して nameserver-policy に従うかどうかを決めます。

proxy-server-nameserver / proxy-server-nameserver-policyオプション

プロキシサーバー自身のドメイン(例:ご利用のノードのドメイン)を解決するための専用 DNS。ユーザートラフィックの解決と混同することによる「鶏と卵」問題を回避します。

config.yaml YAML
default-nameserver:
    - 223.5.5.5
  nameserver-policy:
    '+.arpa': '10.0.0.1'
    'rule-set:cn':
      - https://doh.pub/dns-query
      - https://dns.alidns.com/dns-query
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
  fallback:
    - tls://8.8.4.4
    - tls://1.1.1.1
  fallback-filter:
    geoip: true
    geoip-code: CN
    geosite:
      - gfw
    ipcidr:
      - 240.0.0.0/4
    domain:
      - '+.google.com'

解決の優先順位全体と各フィールドの連携については、次の解決フローで解説します。

追加パラメータ

書式説明
#proxy_name同名のプロキシノードを優先して DNS クエリを発行し、その名前のプロキシが見つからない場合は同名のネットワークインターフェースで接続します。例:https://1.1.1.1/dns-query#proxy1
#RULESこのクエリもルーティングルールに従わせます。個別に respect-rules を有効にするのと同じ効果です
#h3=trueこの DoH サーバーへの接続を HTTP/3 で強制します。サーバー側が H3 に対応している必要があります
#ecs=1.1.1.1/24DoH リクエストに EDNS Client Subnet を含め、CDN がこのサブネットに応じて近い結果を返すようにします
#ecs-override=trueリクエストに既に含まれている ECS subnet を強制的に上書きします