28

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

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

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

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


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

VMに2つのインターフェイスを設定しましたが、dnsmasqを使用する必要はありません。

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

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

4

4 に答える 4

40

の2つのインスタンスを実行できdnsmasq、それぞれがリッスンする異なるインターフェースを使用します。--interface=Xそのためのと--bind-interfacesオプションを使用できます。デフォルトでは、ループバックデバイスもバインドし、lo2つのプロセスがループバックデバイスをバインドしようとすると失敗します。--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つの異なるアドレス範囲を取得しようとする他の人には役立つ可能性があります。

于 2012-11-08T19:48:00.537 に答える
31

各パラメーターの先頭にインターフェースを追加すると、問題なく機能します。例(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
于 2014-11-17T01:26:20.383 に答える
25

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

于 2014-05-30T09:58:03.077 に答える
9

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

たとえば、とという名前の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

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

于 2016-11-11T16:00:18.857 に答える