특정 호스트에 액세스할 때 IPv4를 강제하는 방법은 무엇입니까?
도메인 이름을 통해 지정하는 것이 더 낫습니다. 이렇게 할 수 있습니까?
시도해 보았지만 이를 수행할 수 있는지 확실하지 않습니다. 즉, 새 인터페이스를 생성하고 이 인터페이스를 통해 특정 호스트만 라우팅한 다음 IPv6를 완전히 비활성화하는 것입니다.
좋은 것 같나요? 이를 수행하는 더 좋은 방법이 있습니까?
답변1
라우팅은 호스트 이름이 IP 주소로 확인된 후에만 발생합니다. IPv4만 사용하도록 강제하려면 "특정 호스트"에 대해 해당 IPv4 주소만 반환하도록 호스트 이름 확인을 조작하는 것이 좋습니다.
DNS 서버에 대한 액세스 권한이 있는 경우 해당 호스트의 IPv4 주소만 반환하도록 구성할 수 있습니다.
클라이언트만 작동할 수 있는 경우에는 의 관련 호스트에 IPv4 주소를 (만) 제공할 수 있으며 및/또는 가 있는지 /etc/hosts
확인하십시오 ./etc/nsswitch.conf
files
dns
resolve
호스트 이름 확인이 여러 IP 주소를 반환하는 경우(문제의 애플리케이션이 이미 IPv6를 지원하므로 getaddrinfo()
이전 버전을 사용하는 경우 gethostbyname()
) /etc/gai.conf
주소가 시도되는 순서를 결정합니다. "일부 호스트"가 특정 IPv4 네트워크(또는 소수의 개별 IP 주소)에 있는 경우 우선순위 규칙을 추가하여 gai.conf
해당 IPv4를 우선적으로 선택할 수 있습니다. 그러나 이는 우선 순위를 설정하는 것일 뿐입니다. 즉, IPv4 연결 시도가 실패할 경우 애플리케이션이 IPv6으로 대체되는 것을 막지는 못합니다.
"일부 호스트"의 IPv6 주소가 알려져 있고 고정되어 있는 경우 해당 호스트에 대한 모든 IPv6 연결 시도에 대해 iptables
방화벽 규칙을 설정할 수 있습니다. nftables
클라이언트 측에서 이는 다음과 같은 출력 방화벽 규칙을 설정하는 것을 의미합니다.REJECT
DROP
ip6tables -A OUTPUT -p tcp -d <ipv6-address-of-certain-host> -j REJECT --reject-with tcp-reset
ip6tables -A OUTPUT -d <ipv6-address-of-certain-host> -j REJECT
기본적으로 REJECT
대상은 ICMP(v6) "포트에 연결할 수 없음" 응답을 생성합니다. TCP 연결에 사용하면 --reject-with tcp-reset
이 포트에 대한 IPv6 연결을 설정하려는 응용 프로그램이 확인했을 수 있는 대체 주소(IPv4)로 빠르게 대체되도록 하는 데 도움이 될 수 있습니다.
(서버 측에서 이 제한을 적용하는 경우 --reject-with tcp-reset
클라이언트와 서버 사이의 지나치게 편집증적인 방화벽으로 인해 ICMP가 중단될 수 있으므로 IPv6 TCP 연결 거부를 사용하는 것이 더 중요할 수 있습니다.)