ユーザーごとに異なるDNSサーバーを設定できますか?

ユーザーごとに異なるDNSサーバーを設定できますか?

ユーザーごとに異なるDNSサーバーを設定できますか?

ユーザーがtest1GoogleのDNS(8.8.8.8およびDNS 8.8.8.8)をtest2使用し0.0.0.0test3両方を使用しているとします。test4127.0.0.1

可能ですか?

答え1

「本当に…」 そうですね。

「どうやって」は状況が複雑になる部分です。

基本的に、2つの実際のオプションを考えることができます。 Gnu libcを使用していてnsswitchをサポートしていると仮定すると(一部のディストリビューションではその機能を無効にした可能性があることを覚えておいてください)、1つのオプションは「一般」NSS DNSモジュールを置き換えることです(例/lib64/libnss_dns*:バージョン定義~/.config/resolv.conf

ノート、「交換」というのは/etc/nsswitch.conf

resolv.conf別のオプションは、カーネルネームスペースを使用して各ユーザープロセスの観点から交換を「インストール」することです。 (コメント内のIBMの非常に徹底的な処理を参照してください。)

しかし、両方をサポートする既存のツールはありません。

覚えておくべき3番目のオプションは、ほとんどchrootのファイルがハードリンクまたはバインドマウントされ、選択されたいくつかのファイル(たとえば、変更された場所resolv.conf)を持つユーザー固有の刑務所を構築することです。

答え2

DNSサーバーの設定は機械、ユーザーには適していません。

gethostbyname*()指定されたホスト名を見つけてIPアドレスを返そうとする一連のシステムコール。最初の場所は通常/etc/hostsファイルです。次に、設定されているDNSサーバーを介して検索します/etc/resolv.conf

答え3

各アカウントが独自のネットワーク名前空間で実行されるようにアカウントを構成し、iptablesルールを追加してDNSクエリを別の場所にリダイレクトすることは可能ですが、nscd/sssd/resolvedにすでにキャッシュされているデータの問題は解決されません。

@X Tianはすでにホストファイルの変更を提案していますが、これはユーザーレベルではなくホストレベルで再実行されます。ただし、ほとんどのLinuxバージョンはセッションごとの上書きをサポートしています。場所HOSTALIASES 環境変数を介してホストファイルを取得します。私は長い間それを使う理由がなく、システムの世界でまだ動作していることを確認するためにいくつかのテストを実行する必要があります。

答え4

いいえ、DNSはこの目的のために設計されていません。ただし、テストする場合は、/etc/hosts複数のテストドメイン名を使用して特定のIPアドレスにハードコードしてから、各ユーザーに使用するテストドメイン名を指定できます。

例えば。/etc/hosts

IP address1 hosta.test2 
IP address2 hostb.test2

IP address3 hosta.test3
IP address4 hostb.test3

...

関連情報