/etc/hosts
호스트 이름을 추가하여 호스트 이름을 확인해도 실제로 DNS 조회가 수행되지 않도록 할 수 있다는 것을 알고 있습니다 . 이것은 다음과 같은 줄이 될 것입니다
123.45.67.89 myhostname
제 질문은 이 부분에 대한 연결 시도가 myhostname
항상 실패하도록 첫 번째 부분(IP 주소)을 얼마나 높게 설정할 수 있는지입니다.
편집하다: 실패란 가능한 경우 명시적인 ICMP 거부를 의미합니다. 시간 초과를 기다리고 싶지 않습니다.
이유
때로는 가상 머신 인스턴스가 어딘가에서 실행되고 있습니다. 클라우드 서버는 시작할 때마다 다른 IP를 설정하며, 공개 도메인 이름에 대한 비용을 지불하지 않습니다. 인스턴스를 시작하고 /etc/hosts
해당 호스트에 대한 브라우저 탭을 쉽게 SSH로 연결하거나 열 수 있도록 행을 추가하는 스크립트가 있습니다 myhostname
.
그게 다 좋은데 나도 원해제거하다이 항목은 인스턴스가 종료되고 연결을 시도할 때 발생합니다.myhostname
아니요DNS 조회를 수행하거나 (더 나쁜 경우) 현재 사용 중인 로컬 도메인에서 동일한 이름을 가진 일부 호스트에 연결을 시도하십시오.
답변1
따라서 a) 원격 콘텐츠와 일치하지 않음이 보장되고 b) 모든 콘텐츠를 거부하는 IP 주소가 필요합니다.
어떤 것을 만들어:
iptables -I INPUT 1 -i lo -d 127.66.66.66 -p tcp -j REJECT --reject-with tcp-reset
iptables -I INPUT 2 -i lo -d 127.66.66.66 -j REJECT
(또는 선택한 iptables 방화벽 관리 도구와 동일합니다.)
이제 127.66.66.66에 대한 모든 TCP 연결은 응답으로 TCP RST 패킷을 수신하고 다른 모든 연결은 ICMP 거부를 수신합니다. (내 경험상 TCP RST는 일반적으로 ICMP보다 더 빠르게 TCP 연결을 거부합니다.)
IP 주소 127.66.66.66은 루프백 세그먼트 내에 있으므로 로컬이 아닌 모든 것을 방해하지 않는 것이 보장됩니다.
답변2
"찾을 수 없음" 응답을 강제하는 방법을 찾을 수 없습니다 hosts
. 자체 DNS 서버가 필요한 것 같습니다. 하지만 할 수 있는 일이 몇 가지 더 있습니다...
IP 주소
127.0.0.1
(또는 무엇이든127/8
)를 사용하여 이름이 로컬 호스트를 가리키도록 만드세요. 실행 중이 아닌 서비스의 경우 시스템은 TCP 재설정이나 오류 또는 패킷 삭제로 응답하지만 SSH를 로컬에서 실행하는 경우 제대로 작동하지 않습니다.개인 사용 주소(예: )를 사용하십시오
10/8
. 구성에 따라 시스템이 패킷을 보내려고 시도할 수 있지만 ISP는 패킷이 너무 멀리 도달하기 전에 패킷을 삭제해야 합니다. 또는 컴퓨터에서 나가기 전에 방화벽에서 이를 거부하도록 할 수도 있습니다.실제로는 유효하지 않은 주소를 사용하고 있습니다.
0.0.0.1
(또는0/8
을 제외한 모든 항목0.0.0.0
)이 Linux 및 Windows 연결 시 오류를 생성하는 것 같습니다.0.0.0.0
예를 들어 DHCP 클라이언트는 자신의 주소를 알기도 전에 자신의 주소를 사용하고 Linux의 localhost를 직접 가리키는 것처럼 보입니다. (전체 블록은 실제로 "이 네트워크의 이 호스트"를 의미하도록 예약되어 있습니다.)
물론 이 모든 것은 기본적으로 거짓말이며 가장 깨끗한 해결책은 아닙니다.