사용자마다 다른 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
"정말..." 그렇죠.
"어떻게"는 상황이 복잡해지는 부분입니다.
기본적으로 두 가지 실제 옵션을 생각할 수 있습니다. Gnu libc를 사용하고 있고 nsswitch를 지원한다고 가정하면(일부 배포판에서는 해당 기능을 비활성화했을 수 있다는 것을 어렴풋이 기억합니다.) 한 가지 옵션은 "일반" NSS DNS 모듈을 교체하는 것입니다(예 /lib64/libnss_dns*
: 버전 정의 ~/.config/resolv.conf
.
노트,"교체"라는 것은 /etc/nsswitch.conf
.
resolv.conf
또 다른 옵션은 커널 네임스페이스를 사용하여 각 사용자 프로세스의 관점에서 교체를 "설치"하는 것입니다. (댓글에서 IBM의 매우 철저한 처리를 참조하십시오.)
그러나 두 가지를 모두 지원하는 기존 도구는 없습니다.
염두에 두어야 할 세 번째 옵션은 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
...