2012-02-17 12 views
18

私の問題は、私がWebサイトを開発するためのVMを実行しているということです。dnsmasq、使用されるインターフェイスに基づいて異なるIPアドレスを提供

ホストマシンは、各種のdevのサイトのアドレスを解決するのdnsmasqを実行しているVmを指さしそのDNSを持っている、すなわちtest.mysite.vmなど

私は私の仕事にネットワークから行くときの問題がありますvmのIPが変更されたため、私のホームネットワークはすべて切断されます。要求がどのインタフェースから来たかに基づいて、異なるIPアドレスを提供することは可能ですか?それとも、私はこれと全く違うやり方で取り組まなければならないのでしょうか?

ありがとうございました!

+0

さまざまなインターフェイスはどこで機能しますか。ホームネットワークとワークネットワークに2つの異なるインターフェースを使用していますか? VMのIPが変わるのはなぜですか? – kichik

+0

はい、家庭用(192.168.0。*)と仕事用(10.0.0。*)の2つの異なるインターフェイスでした。変更は、作業IPとホームIPの間で行われます。 –

答えて

23

dnsmasqという2つのインスタンスを実行することができます。dnsmasqは、それぞれがリッスンするインターフェイスが異なります。そのためには--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つの異なるアドレス範囲を取得しようとする人には役立ちます。

+0

複数のインスタンスを実行せずに2つのネットワークを構築する方法はありませんか?これは実際には複雑です – TheLQ

+3

同じコマンドで '--dhcp-range ='を複数回使って、2つのネットワークにサービスすることができます。それは実際に元の質問に対しても機能するかもしれません。おそらく、インタフェースのIPアドレスに基づいて提供する正しいIP範囲を差し引くでしょう。 – kichik

+0

config-fileで設定オプション 'listen-address = 0.0.0.0'がコメントアウトされていることを確認してください。例えば'#listen-address = 0.0.0.0' –

13

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

あなたは既にさまざまなインターフェイスのDHCP範囲を設定しており、それらにはdnsmasqがバインドされていると仮定します。

dnsmasq.confファイルに(部分的に記載されている)localise-queriesオプションを追加してください。

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

代替へ:

# /etc/dnsmasq.conf 
localise-queries 

次に、ファイルのいずれかがdnsmasqはこのような両方のネットワークのIPアドレスを持つエントリが、含まれている(例えば/etc/hostsなど)あなたのホストのために読み込むことことを確認してくださいBでの結果

# /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 

/etc/hostsファイルを変更すると、代わりにあなたのdnsmasq.confファイル内のアドレスを指定することですoの場合、dnsmasqは、その特定のインターフェイスで受信したクエリのインターフェイスのIPとネットマスクに一致するIPのみを処理します。

man pageによると、これは以下のん:

-y、がその上のインターフェイスに依存して/ etc/hostsファイルからのDNSクエリへ

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

16

各パラメータの冒頭にインターフェイスを追加すると、うまく動作します。 例(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 
+1

'dhcp-host'の代わりに' dhcp-range'を使用しているときにもうまく動作します。これは、現在のdnsmasqのバージョンでは容認された解決策でなければなりません。 – Dyna

+0

@Dynaそれは動作しますが、文書化されていないか、何かが恋しいですか? – Murmel

+1

@ user1885518私は[manページ](http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html)でこれを見つけるまで、同じ質問で苦労していました: 'The tag 'bootp "がBOOTP要求に設定され、その名前がリクエストが到着したインターフェースの名前であるタグも設定されます。したがって、リクエストが到着したインターフェイスの名前が付けられたタグが常に存在します。マルチVLAN DHCPに非常に便利です。 – GnP

4

を代わりにあなたも、複数の設定ファイルにリストに追加したい各インターフェイスのための1つを/etc/dnsmasq.d/を作成することができますdhcp。あなたはwlan0wlan1という名前の2つの無線インターフェースを持っており、あなたがそれらの上にDHCP DNSMASQへの感謝を提供したい場合は、あなたが各インターフェイスを設定する/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:私のTに

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 

hatはシステムを設定する非常にクリーンな方法で、リブートの間に設定を保持します。

+0

同様のシナリオでお手伝いできますか?私は解決策を見つけることができません。 http://serverfault.com/questions/825601/dnsmasq-config-for-captive-portal – 55597

+0

dnsmasqはファイルを順番に読み込み、/etc/dnsmasq.d/のすべてのファイルは単一の設定と見なされるため、これは機能しません。 – Dingo

+0

@ MarusMatutiaeが合意した、とても良い答え – KGCybeX

関連する問題