ユーザーごとに異なるDNSサーバーを設定できますか?
ユーザーがtest1
GoogleのDNS(8.8.8.8
およびDNS 8.8.8.8
)をtest2
使用し0.0.0.0
、test3
両方を使用しているとします。test4
127.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
...