DNSMASQは、使用されているインターフェイスに基づいてさまざまなIPアドレスを提供します
-
27-10-2019 - |
質問
基本的に私の問題は、Webサイトを開発するためのVMを実行していることです。
ホストマシンには、さまざまな開発サイトのアドレス、つまりtest.mysite.vmなどを解決するDNSMASQを実行しているVMを指すDNSがあります。
問題は、VMのIPが変化するため、ワークネットワークからホームネットワークに移動するときです。リクエストがどのインターフェースから来たのかに基づいて、異なるIPアドレスを提供することは可能ですか?または、これにまったく別の方法で取り組む必要がありますか?
ご協力いただきありがとうございます!
結局のところ、これに対してはるかに簡単なアプローチがあったことがわかりました...
私は現在、VMに2つのインターフェイスをセットアップし、DNSMASQを使用する必要はありません。
1つ目は、オフィスを移動するたびにネットワークを再起動すると、VMがホストが利用できるインターネット接続を使用できるようにするブリッジ/共有インターフェイスです。
2番目は、静的IPアドレスを持つVMホストへのプライベート接続です。これは、Nginx、MySQLなどのサービスを接続およびバインドするために使用するインターフェイスです。
解決
の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つの異なるアドレス範囲を取得しようとする他の人に役立つかもしれません。
他のヒント
各パラメーターの先頭にインターフェイスを追加すると、私にとっては正常に機能します。例(in 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
次に、そのファイルの1つを確認してください dnsmasq
ホストの読み取り(など /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のみを提供します。
による 男ページ, 、これは次のとおりです。
-Y、 - localise-queries
クエリが受信されたインターフェイスに依存する /etc /ホストからのDNSクエリへの回答を返します。 /etc /hostsの名前に複数のアドレスが関連付けられており、それらのアドレスの少なくとも1つがクエリが送信されたインターフェイスと同じサブネット上にある場合、そのサブネットのアドレスのみを返します。 。これにより、サーバーが各インターフェイスに対応する /etc /ホストに複数のアドレスを持つことができ、ホストは接続されているネットワークに基づいて正しいアドレスを取得します。現在、この施設はIPv4に限定されています。
または、作成することもできます 複数の構成ファイル 下 /etc/dnsmasq.d/
, 、DHCPを提供する各インターフェイスに1つ。
たとえば、2つのワイヤレスインターフェイスがある場合 wlan0
と wlan1
, 、そしてあなたはDNSMASQのおかげでそれらにDHCPを提供したい、あなたは下に2つのファイルを作成することができます /etc/dnsmasq.d/
各インターフェイスを構成するには:
/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
私にとって、それはあなたのシステムを構成し、再起動の間に構成を持続させる非常にクリーンな方法です。