基本的に私の問題は、Webサイトを開発するためにVMを実行していることです。
ホストマシンは、さまざまな開発サイトのアドレスを解決するdnsmasqを実行しているVmを指すDNSを持っています。つまり、test.mysite.vmなどです。
問題は、vmのIPが変更されるため、職場のネットワークからホームネットワークに移動すると、すべてが壊れます。要求の送信元のインターフェイスに基づいて異なるIPアドレスを提供することは可能ですか?それとも、これとはまったく異なる方法で取り組む必要がありますか?
ご協力いただきありがとうございます!
結局のところ、これへのはるかに簡単なアプローチがありました...
VMに2つのインターフェースをセットアップしました。dnsmasqを使用する必要はありません。
1つ目は、ブリッジ/共有インターフェイスです。これにより、VMは、オフィスに移動するたびにネットワークの再起動により、ホストが利用できるインターネット接続を使用できます。
2番目はmy VM静的IPアドレスを持つホストへのプライベート接続です。これは、nginx、mysqlなどのサービスを接続およびバインドするために使用するインターフェイスです。
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つの異なるアドレス範囲を取得しようとする他の人に役立つかもしれません。
各パラメーターの先頭にインターフェイスを追加すると、うまくいきます。例(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
@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に制限されています。
または、dhcpを提供したいインターフェイスごとに1つ、/etc/dnsmasq.d/
の下に複数の構成ファイルを作成することもできます。
たとえば、wlan0
とwlan1
という名前の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
私にとって、これはシステムを構成する非常にクリーンな方法であり、再起動間で構成を保持します。