web-dev-qa-db-ja.com

接続されたネットワーク上で条件付きでホスト名を解決するにはどうすればよいですか?

小さなホームサーバーがあり、ラップトップ上のプログラムがLANとWANの両方からアクセスできるようにしたいと考えています。これを実現する最もクリーンな方法は、カスタムホスト名を定義し、接続先のネットワークに基づいて異なる方法で解決することだと思います。

言い換えれば、ホスト名を解決することは可能ですか[〜#〜] x [〜#〜] IPアドレスとして[〜#〜] a [〜#〜] ifネットワークに接続Foo、IPアドレスとして[〜#〜] b [〜#〜]それ以外の場合は?

ArchLinuxとnetctlをネットワークマネージャーとして使用しています。私が望むことを達成する方法は、Fooのネットワークプロファイルにフックを設定して、何らかの方法でhostsファイルを変更することだと思いますが、後者の方法がわかりません。

もちろん、もっと良い解決策についても聞きたいです。

1
A.P.

この問題はdnsmasqで解決しました。質問の例に従って、ラップトップでDNSキャッシュとして機能するようにdnsmasqを設定した後に行ったことを次に示します。

  1. ディレクトリを作成します/etc/hosts.d

  2. 次のスクリプトを/etc/netctl/X/に入れて、実行可能にします

 #!/bin/sh
 # /etc/netctl/X/X_local.sh
 echo 'A X' > /etc/hosts.d/X
 chmod 744 /etc/hosts.d/X
 #!/bin/sh
 # /etc/netctl/X/X_remote.sh
 echo 'B X' > /etc/hosts.d/X
 chmod 744 /etc/hosts.d/X
  1. 次の行をネットワークプロファイルに追加します/etc/netctl/Foo
 ExecUpPost=/etc/netctl/X/X_local.sh
 ExecDownPre=/etc/netctl/X/X_remote.sh
  1. addn-hosts=/etc/hosts.d/etc/dnsmasq.confに追加します

これは、addn-hostsオプションがdnsmasqに追加のホスト名の関連付けを/etc/hosts.dディレクトリで探すように指示するために機能します。

1
A.P.