그래서 저는 네트워크의 모든 컴퓨터(DNS 서버 포함)에 임의의 IPv6 주소를 추가하는 라우터를 테스트하고 있습니다. 어떻게 든 이러한 IP는 유효한 DNS 서버로 브로드캐스트되고 있었지만(실제 라우터만 IPv6 RA 패킷을 보내는 방법은 확실하지 않음) 간단히 말해서 이제 모든 컴퓨터가 존재하지 않는 IP 주소로 DNS 쿼리를 보내고 있습니다.
재부팅하면 이러한 가짜 IP resolved
가 여전히 유효한 네임서버로 표시됩니다.systemctl restart systemd-resolved
resolvectl
목록에 있으므로 /etc/resolv.conf
거기에서 삭제하고 재부팅하면 systemd-resolved
가짜 IP가 다시 추가됩니다.
로그를 보면 journalctl --unit=systemd-resolved
가짜 IP가 "기능 저하 모드"에서 실행되고 있다고 알려 주지만 해당 IP를 어디서 찾았는지는 알려주지 않습니다.
이러한 잘못된 IP 주소는 어디서 가져오나요? IPv6 라우터 광고에서 제공하는 IP만 다시 사용하려면 일부 캐시 파일을 삭제해야 합니까?
답변1
몇 가지 조사와 시스템 버그 보고 후에 다음을 발견했습니다.
systemd-resolved는 systemd-networkd에서 모든 DNS 정보를 가져오므로 악의적인 서버를 수정하면 systemd-networkd에 집중하여 systemd-resolved로 유입됩니다.
/var/run/systemd/netif/
각 인터페이스의 데이터는 파일에 저장됩니다. 이는 내부적이며 변경될 수 있으므로 여러분이 이 글을 읽을 때쯤에는 이동되었을 수도 있지만, 저는 악성 서버에 대한 이러한 파일을 grep하여 해당 파일이 포함된 파일을 삭제할 수 있었습니다. systemd-networkd를 다시 시작하면 삭제된 파일이 완전히 다시 생성되었습니다.
내 경우에는 파일을 다시 생성했지만 여전히 악성 DNS 서버가 나열되어 있었습니다. 이는 해당 파일이 systemd에 의해 캐시되지 않았으며 여전히 네트워크 어딘가에 광고되고 있음을 의미합니다.
IPv6 주소였기 때문에 radvd
(IPv6 Router Advertising Daemon)을 설치하고 실행하여 radvdump
컴퓨터에 도달하는 모든 IPv6 RA를 표시했습니다. 물론 얼마 지나지 않아 악성 DNS 서버를 나열하는 이메일이 나타나서 이를 찾아서 수정할 수 있었습니다.
그래도 문제가 해결되지 않으면 일부 systemd-networkd 옵션을 사용하여 문제를 해결할 수 있습니다. 이는 네트워크를 구성하는 파일 중 하나에 배치되어야 합니다( /etc/systemd/network/*.network
).
# Don't use DNS servers from DHCP responses received via IPv4 (default is true)
[DHCPv4]
UseDNS=false
# Don't use DNS servers from DHCPv6 responses received via IPv6 (default is true)
[DHCPv6]
UseDNS=false
[IPv6AcceptRA]
# Don't use DNS servers from IPv6 Router Advertisement (RA) messages (default is true)
UseDNS=false
# Don't start a DHCPv6 client when an RA message is received.
DHCPv6Client=false
답변2
당신은 그것을 사용할 수 있습니다이것명령: sudo systemd-resolved --flush-caches
또는 sudo resolvectl flush-caches
(후자의 명령은 다음에서 가져옵니다.매뉴얼 페이지의 systemd-resolved
)
새로 고침이 성공했는지 확인하려면 다음을 사용하세요.sudo systemd-resolved --statistics
예제 출력:
Cache
Current Cache Size: 0
Cache Hits: 101
Cache Misses: 256
systemd-resolved
또한 /etc/resolv.conf
맨페이지의 "어떤 모드에서 실행 중입니까?" 섹션을 참고하세요.
/etc/resolv.conf
/etc/resolv.conf를 처리하는 네 가지 모드가 지원됩니다(resolv.conf(5) 참조):
systemd-resolved는 레거시 Linux 프로그램과의 호환성을 위해 /run/systemd/resolve/stub-resolv.conf 파일을 유지 관리합니다. 이 파일은 /etc/resolv.conf의 심볼릭 링크일 수 있습니다. 이 파일에는 127.0.0.53 DNS 스텁(위 참조)이 유일한 DNS 서버로 나열되어 있습니다. 또한 systemd-resolved에서 사용하는 검색 도메인 목록도 포함되어 있습니다. 검색 도메인 목록은 항상 최신 상태입니다. 응용 프로그램은 /run/systemd/resolve/stub-resolv.conf를 직접 사용해서는 안 되며, /etc/resolv.conf의 기호 링크를 통해서만 사용해야 합니다. 이 파일은 /etc/resolv.conf에서 심볼릭 링크되어 로컬 DNS API를 우회하는 모든 로컬 클라이언트를 올바른 검색 도메인 설정으로 systemd-resolved에 연결할 수 있습니다. 이 작동 모드를 권장합니다.
127.0.0.53 DNS 스텁(위 참조)을 유일한 DNS 서버로 나열하는 정적 파일 /usr/lib/systemd/resolv.conf가 제공됩니다. 이 파일은 /etc/resolv.conf에서 심볼릭 링크되어 로컬 DNS API를 우회하는 모든 로컬 클라이언트를 systemd-resolved에 연결할 수 있습니다. 이 파일에는 검색 필드가 포함되어 있지 않습니다.
systemd-resolved는 레거시 Linux 프로그램과의 호환성을 위해 /run/systemd/resolve/resolv.conf 파일을 유지 관리합니다. 이 파일은 /etc/resolv.conf에서 심볼릭 링크될 수 있으며 항상 최신 상태이며 알려진 모든 DNS 서버에 대한 정보를 포함합니다. 파일 형식의 제한 사항에 유의하십시오. 인터페이스별 DNS 서버 개념을 인식하지 못하므로 시스템 전체 DNS 서버 정의만 포함됩니다. 응용 프로그램은 /run/systemd/resolve/resolv.conf를 직접 사용해서는 안 되며, /etc/resolv.conf의 기호 링크를 통해서만 사용해야 합니다. 이 작동 모드를 사용하는 경우 로컬 DNS API를 우회하는 로컬 클라이언트는 systemd-resolved도 우회하고 알려진 DNS 서버와 직접 통신합니다.
또는 /etc/resolv.conf를 다른 패키지로 관리할 수도 있습니다. 이 경우 systemd-resolved는 이를 읽어 DNS 구성 데이터를 얻습니다. 이 작업 모드에서 systemd-resolved는 공급자가 아닌 이 구성 파일의 소비자입니다.
/etc/resolv.conf가 /run/systemd/resolve/resolv.conf에 대한 심볼릭 링크인지 아니면 127.0.0.53을 DNS 서버로 나열하는지에 따라 이 파일에 대해 선택된 작업 모드가 완전히 자동 감지됩니다.
업데이트: systemd-resolve의 오타 수정디, 감사합니다 Binghuo
답변3
/etc/resolv.conf
직접 편집할 수 없습니다. 이렇게 해도 해당 서비스를 다시 시작해도 변경 사항이 적용되지 않습니다. 다음 단계 /etc/resolv.conf
는 Ubuntu 20.04 desktop
.
sudo nano /etc/resolvconf/resolv.conf.d/head
- Nano 편집기에서 필요한 변경을 수행합니다.
- 필요에 따라 서비스를 다시 시작합니다. 내 경우에는 다음과 같았습니다.
systemctl stop resolvconf.service;systemctl start resolvconf.service