web-dev-qa-db-ja.com

dnsmasq、使用されるインターフェースに基づいて異なるIPアドレスを提供します

基本的に私の問題は、Webサイトを開発するためにVMを実行していることです。

ホストマシンは、さまざまな開発サイトのアドレスを解決するdnsmasqを実行しているVmを指すDNSを持っています。つまり、test.mysite.vmなどです。

問題は、vmのIPが変更されるため、職場のネットワークからホームネットワークに移動すると、すべてが壊れます。要求の送信元のインターフェイスに基づいて異なるIPアドレスを提供することは可能ですか?それとも、これとはまったく異なる方法で取り組む必要がありますか?

ご協力いただきありがとうございます!


結局のところ、これへのはるかに簡単なアプローチがありました...

VMに2つのインターフェースをセットアップしました。dnsmasqを使用する必要はありません。

1つ目は、ブリッジ/共有インターフェイスです。これにより、VMは、オフィスに移動するたびにネットワークの再起動により、ホストが利用できるインターネット接続を使用できます。

2番目はmy VM静的IPアドレスを持つホストへのプライベート接続です。これは、nginx、mysqlなどのサービスを接続およびバインドするために使用するインターフェイスです。

25
Ian Chadwick

dnsmasqの2つのインスタンスを実行でき、それぞれがリッスンする異なるインターフェイスを持ちます。そのために--interface=Xおよび--bind-interfacesオプションを使用できます。デフォルトでは、ループバックデバイスloもバインドし、2つのプロセスがそれをバインドしようとすると失敗します。それを避けるには、--except-interface=loを使用してください。

dnsmasq --interface=eth0 --except-interface=lo --bind-interfaces --dhcp-range=192.168.0.2,192.168.0.10,12h
dnsmasq --interface=eth1 --except-interface=lo --bind-interfaces --dhcp-range=10.0.0.2,10.0.0.10,12h

これをテストするときは、構成ファイルが常にコマンドラインをオーバーライドするため、構成ファイルが空であることを確認してください。 --conf-file=/dev/nullを使用することもできます。

コメントで述べたように、これがあなたの状況にどのように役立つかはあまりわかりませんが、2つの異なるインターフェイスで2つの異なるアドレス範囲を取得しようとする他の人に役立つかもしれません。

29
kichik

各パラメーターの先頭にインターフェイスを追加すると、うまくいきます。例(dnsmasq.conf内):

dhcp-Host=eth0,00:22:43:4b:18:43,192.168.0.7
dhcp-Host=eth1,00:22:43:4b:18:43,192.168.1.7

私はリリースを使用しています:

$ dnsmasq --version
Version de Dnsmasq 2.68  Copyright (c) 2000-2013 Simon Kelley
22
smillien62

@kichikの答えはうまくいくかもしれませんが、同じことを実現するよりエレガントな方法は、localise-queriesディレクティブと単一のdnsmasqサーバーインスタンスを使用することです。

さまざまなインターフェイスのDHCP範囲を既に構成し、dnsmasqをそれらにバインドしていると仮定します。

(一部文書化されています)localise-queriesオプションをdnsmasq.confファイルに追加します。

# /etc/dnsmasq.conf
localise-queries

次に、dnsmasqがホスト用に読み込むファイルの1つ(/etc/hostsなど)に、次のように両方のネットワークのIPアドレスを持つエントリが含まれていることを確認します。

# /etc/hosts
127.0.0.1      dev-vm
192.168.1.1    dev-vm
10.0.0.1       dev-vm

/etc/hostsファイルを変更する代わりに、代わりにdnsmasq.confファイルにアドレスを指定することもできます。

# /etc/dnsmasq.conf
localise-queries
Host-record=dev-vm,127.0.0.1
Host-record=dev-vm,192.168.1.1
Host-record=dev-vm,10.0.0.1

その結果、どちらの場合でも、dnsmasqは、特定のインターフェイスで受信したクエリのインターフェイスのIPとネットマスクに一致するIPのみを提供します。

manページ によると、これは次のことを行います。

-y、-localise-queries

クエリが受信されたインターフェイスに依存する/ etc/hostsからDNSクエリへの回答を返します。/etc/hostsの名前に複数のアドレスが関連付けられており、それらのアドレスの少なくとも1つがクエリの送信先のインターフェイスと同じサブネット上にある場合、そのサブネット上のアドレスのみを返します。これにより、サーバーは各インターフェイスに対応する/ etc/hostsに複数のアドレスを持つことができ、ホストは接続先のネットワークに基づいて正しいアドレスを取得します。現在、この機能はIPv4に制限されています。

21
likeitlikeit

または、dhcpを提供したいインターフェイスごとに1つ、/etc/dnsmasq.d/の下に複数の構成ファイルを作成することもできます。

たとえば、wlan0wlan1という名前の2つのワイヤレスインターフェイスがあり、dnsmasqのおかげでそれらにdhcpを提供したい場合、/etc/dnsmasq.d/の下に2つのファイルを作成して各インターフェイスを設定できます。

/etc/dnsmasq.d/dnsmasq-wlan0.conf

interface=wlan0         # Use interface wlan0
listen-address=10.0.0.1 # Explicitly specify the address to listen on
bind-interfaces         # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8          # Forward DNS requests to Google DNS
domain-needed           # Don't forward short names
bogus-priv              # Never forward addresses in the non-routed address spaces.
dhcp-range=10.0.0.50,10.0.0.150,12h # Assign IP addresses between 10.0.0.50 and 10.0.0.150 with a 12 hour lease time

/etc/dnsmasq.d/dnsmasq-wlan1.conf

interface=wlan1         # Use interface wlan0
listen-address=20.0.0.1 # Explicitly specify the address to listen on
bind-interfaces         # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8          # Forward DNS requests to Google DNS
domain-needed           # Don't forward short names
bogus-priv              # Never forward addresses in the non-routed address spaces.
dhcp-range=20.0.0.50,20.0.0.150,12h # Assign IP addresses between 20.0.0.50 and 20.0.0.150 with a 12 hour lease time

私にとって、これはシステムを構成する非常にクリーンな方法であり、再起動間で構成を保持します。

7
Quentin