web-dev-qa-db-ja.com

DD-WRT:静的ホストでのdnsmasqの頭痛

新しいAsus RT-AC56Uルーターでdd-wrt(参考のためにr23503)を使用しています。残念ながら、dnsmasqの構成は私に頭痛の種を与えています。これが私が欲しい

  • LAN/WLAN上のホストに対するLAN/WLANからのDNSクエリは、短い名前とFQDNの両方に対して応答する必要があります。
  • 一部のデバイスは(私の電話のように)ポータブルであるため、LANに接続する場合はLAN IPに解決し、LANの外部から照会する場合は外部IPに解決するためにHost.mydyndomain.netが必要です。

しかし、ここに私が現在得ているものがあります:

  • DHCPリースホストのクエリが正しく返されます(dnsmasqのdd-wrtの「ローカルDNS」オプション)。
  • ランダムに存在しないホストへのクエリは、外部WAN IPアドレスを誤って返します。したがって、「nslookup foobarbaz」は、エラーを返す必要があるときに結果を返します。

静的IPを使用するホストについては、まだ適切な解決策が見つかりません。私はdnsmasqのマンページを読みましたが、私が知る限り、正しい選択は「Host-record」オプションです。

Dd-wrt([サービス]タブの下)のdnsmasq関連の構成は次のとおりです。
「DHCPサーバー」セクション:
使用ドメイン:WAN
LANドメイン:[空白]
追加のDHCPdオプション:[空白]
1つの静的リースが定義されています。

「DNSMasq」セクション:
DNSMasq:有効
ローカルDNS:有効
DNS再バインドなし:有効
追加のDNSMasqオプション:
Host-record = myhost、myhost.mydyndomain.net、192.168.1.1
[静的LANIPを持つ他のホストのホストレコードエントリがさらにいくつか]

残念ながら、これらのHost-record行を追加のオプションボックスに入れると、dnsmasqが完全に壊れて、DHCP経由でLAN/WLANに接続できなくなります。ボックスの内容を空にすると、DHCPが再び機能し始めます。

私のdnsmasq.confファイルは次のとおりです。

interface=br0
resolv-file=/tmp/resolv.dnsmasq
all-servers
domain=mydyndomain.net
dhcp-leasefile=/tmp/dnsmasq.leases
dhcp-lease-max=51
dhcp-option=lan,3,192.168.1.1
dhcp-authoritative
dhcp-range=lan,192.168.1.100,192.168.1.149,255.255.255.0,1440m
dhcp-Host=88:53:2E:9B:3E:80,Redtail,192.168.1.5,1440m
stop-dns-rebind

/etc/resolv.confファイルは次のとおりです。

search ph.cox.net
nameserver 192.168.1.1

また、/ tmp /resolv.dnsmasqファイルは次のとおりです。

nameserver 208.67.222.222
nameserver 208.67.220.220
nameserver 68.105.28.13

もう1つの小さな、しかし無関係な問題:DHCP構成セクションのdd-wrtの「基本設定」ページで、OpenDNSのサーバーのIPを入力しました(上記を参照)。 justこれら2つのネームサーバーを使用したいのですが、ネームサーバーは自動的に3番目のネームサーバーとして追加されます。モデム/ ISPからDHCPリースを取得するときに受信するDNS情報を無視するようにdd-wrtに指示する方法はありますか?

だから...私は何を間違っているのですか?明らかに、dnsmasqはHost-recordエントリに満足していませんが、使用する正しいオプションは何ですか?/etc/hostsは生成されたファイルであり、Webインターフェイスを介して簡単に変更できないため、この情報を/ etc/hostsではなくこの場所に配置しています。もちろん、SSH経由で接続することで簡単に編集できますが、変更は永続的ではありません。

6
JetpackJohn

私はdd-wrtのdnsmasqでかなりの経験があり、特にこのコメントの日付に近いです。各要件に対するそれぞれの答えに対する私の実用的な解決策をあなたと共有することができます。私はさらに追加することを拒否します。

アクティブな/tmp/dnsmasq.confの各オプション 上記に投稿 は、説明されているように選択した構成オプションから直接取得されます

除く

hostname =エントリの場合、imoを使用しないでください。あなたが欲しい

使用ドメイン:_[WAN/LAN]_ ない 使用されているドメイン_[WAN]_

これにより、有線(LAN)デバイスと無線(WAN)デバイスがネットワーク上で機能できるようになります。

また、短いものを選んでください LANドメイン:_[dom ]_ または他の短い言葉 地元。いくつかの使用 lan いくつかの使用 ローカルドメイン 。これは要件に必要であり、あなたと内部ユーザーだけが表示/使用するアンカー偽の内部専用ドメインを提供します。選択した値は、各DHCPクライアントの_search dom_リゾルバーに入れられます。私が使用します dom 残りは、好きなように作ることができます。

最初の2つの要件から始めます。

  1. LAN/WLAN上のホストに対するLAN/WLANからのDNSクエリは、短い名前とFQDNの両方に対して応答する必要があります。

  2. 一部のデバイスは(私の電話のように)ポータブルであるため、LANに接続する場合はLAN IPに解決し、LANの外部から照会する場合は外部IPに解決するためにHost.mydyndomain.netが必要です。

内部IPと外部IPが異なるが、dd-wrtの両側に同じ名前があるホストの場合、次のものが必要です。

  • 正しく空の_Static Leases_テキスト領域のすぐ下の_Additional DHCP Options_に、解決可能なホストごとに1行追加します。内部名_web.dom_またはwebは、LAN上での利便性のために注意してください。

注意:

_ [Static Leases++++++++++++++++++++++++++++++++++++++++++++++++++++++++]    
  [MAC Address]       [Host Name   ][IP Address    ][Client Lease Time]
  [00:19:B9:5B:2B:A5] [web         ][192.168.2.5   ][             1440]
_

注:これはudhcpcdにのみ使用されると思いましたが、これはdnsmasqでも使用され、実際の_dnsmasq.conf_と正しい_dhcp-Host=_行 そして DNSMasqがすべてのローカル名前解決を行うために使用する/ tmp/hostsにそれぞれの `ipHost.domエントリを配置します。

Webインターフェイスが少し面倒なので、これらのエントリを作成するためのスクリプトとテキストファイルがあります。スクリプトが簡単に行うことは次のとおりです。

_macToHostNames.txt:
# comment lines ignored unless embedded set:tag values like set:kids 
# note the ip is just the Host portion of the subnet, eg: 192.168.1.32 -> 1.32
# Host      id       mac address        cnames/aliases for same box
kidhost1    1.32     00:MA:CA:DD:E5     alias1 nabi2 # in-line comment set:kid 
web         1.5      00:AM:AC:AD:ES     www homeweb  # web server with aliases
EOF
generate_Files_Then_Send_Then_Activate_If_Tests_Are_Ok.sh < macToHostNames.txt
# this script file creates 3 files which are sent along with a test script:
dnsmasq_options.new # nvram set dnsmasq_options="$(cat dnsmasq_options.new)"
static_leases.new   # nvram set static_leases="$(cat static_leases.new)"
static_leasenum.new # nvram set static_leasenum="$(cat static_leasnum.new)"
testDnsMasqOpts.sh  # scp -p *.new test*.sh admin@gw:/tmp && ssh admin@gw "/tmp/test*.sh" 
_
  • dNSMasqオプションボックスに_address=/web.dynip.org/<ip>_行を追加しますaddress =/web.mydyndomain.net/192.168.2.5#必要な数だけ追加します

  • 最後に、DDNS構成を更新して、外部ISPが提供する動的IPアドレスを_web.mydyndomain.net_として解決するようにマッピングするDDNSサービスを提供する必要があります。この部分は正常に構成されていると思います。

この構成で _ping web_または_ping web.dom_またはping _web.mydyndomain.net_は、ファイアウォールの内側で_192.168.2.5_を返し、_web.mydyndomain.org_の名前による外部からのアクセスは引き続き機能します。

他の構成は他の構成によって満たされますが、何度もテストしたので、これらの行を安全に追加できます(一度に1つのdnsmasq行を実行するスクリプトを作成し、すべてのdnsロギングが残っているため、問題のある行を表示するまで)私の最新のdnsmasqビルドでスペースを確保し、信頼できるのは、dnsmasqの戻りステータス($?)だけです。

最後の要件については、コメント付きの構成の行を表示します(コメントは[DNSMasq追加オプション]ボックスに入力できます)。

  1. DHCPリースホストのクエリが正しく返されます(dnsmasqのdd-wrtの「ローカルDNS」オプション)。
  2. ランダムに存在しないホストへのクエリは、外部WAN IPアドレスを誤って返します。したがって、「nslookup foobarbaz」は、エラーを返す必要があるときに結果を返します。
_  domain-needed    # dont fwd to ext DNS names with no domain
  address=/web.mydnsdomain.org/192.168.2.5 # resolve to this internally!
  expand-hosts     # add .dom to Host names without a domain 
  local=/dom/      # map all Host.dom request to *this* dns
  bogus-priv       # reject local lookups not in hosts
  localise-queries # for local servers
_

私は、疑わしい価値のあるいくつかの非関連の景品(およびオフサイトバックアップ)を投入します。

_ no-ping          # some swear by this one to get DNSMasq to work!
 filterwin2k      # junk from MSFT boxen (remove this if ldap SRV used)
 cache-size=3000  # fast local DNS lookups 
 clear-on-reload  # clear ifr.c changes and sig received 
_

DNSサーバーの数を制限するには、次のようにdhcp-options = 6で実行できます。

dhcp-options = lan、6,8.8.8.8#これにより、すべてのホストに対して1つのネームサーバーエントリのみが送信されます

8
Rent Mesvn