Linux : 특정 응용 프로그램 / 호스트 이름에 대한 IPv6 차단


8

문제와 목표

우리는 ISP로부터 IPv6를 얻지 못하므로 IPv6 터널이 잘 작동하지만 물론 빠르지는 않습니다. 그리고 정말로 신뢰할 수 없습니다. IPv6을 "경우에 따라"사용할 수 있기를 원하지만 특정 호스트 (도메인)가 IPv4에만 연결되기를 원합니다.

기본 프로토콜

모든 응용 프로그램이 IPv6을 먼저 시도하는 것 같습니다. 이것은 아마도 glibc 설정일 것입니다. 이 기본값이 반대로 바뀌면 괜찮을 것입니다 (모든 응용 프로그램에 대해).

넷 필터

Netfilter를 사용하여 IPv6 주소 / 네트워크를 차단할 수 있지만 두 가지 문제가 있습니다.

  1. 앱이 IPv4를 시도하기 전에 IPv6 시간 초과를 기다리는 동안 지연이 발생합니까?
  2. 일부 도메인은 혼돈 된 것처럼 혼합되어있는 것 같습니다. google.com과 youtube.com을 분리하면 피할 수 있다면 원하지 않는 것처럼 보입니다.

방금 매뉴얼 페이지에 ip route라우팅 유형이 나와 있습니다 unreachable.

로컬 발신자에게 EHOSTUNREACH 오류가 발생합니다.

Netfilter DROP 또는 REJECT에서도 마찬가지입니까? 이러한 오류로 인해 관련 지연이 발생하지 않아야합니다.

DNS 필터링

또 다른 솔루션은 (가능하면 쉬운 방법 임) 특정 도메인에 대해 AAAA 레코드를 필터링하는 것입니다. 가능하지 않은 경우 : "IP 주소 X가 도메인 Y에 속함"을 알 수 있도록 DNS 서버와 Netfilter를 연결하여 Netfilter에 추가 할 수 있습니까? 모든 것을 기록하고 로그를 파는 것보다 더 우아한 것이 있습니까?

가는 길?

어떤 (다른) 가능성이 있으며 가장 쉬운 것은 무엇입니까?


2
최신 웹 브라우저와 같은 Happy Eyeballs ( RFC 6555 ) 를 구현하는 것은 실제로 눈치 채지 못할 것입니다 .
마이클 햄튼

DNS는 실제로 그렇게 작동하도록 설계되지 않았습니다. 어쨌든보다 안정적인 터널 서비스를 시도 할 수 있습니다.
Michael Hampton

답변:


16

로 주소 선택을 제어 할 수 있습니다 /etc/gai.conf. 구성 파일은 잘 문서화되어 있으며 이미 기본값이 포함되어 있으므로 조정을 시작할 수 있습니다.

여기서 흥미로운 기본값은 다음과 같습니다.

label  ::1/128       0
label  ::/0          1
label  2002::/16     2
label ::/96          3
label ::ffff:0:0/96  4
precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  10

마지막 줄은 모든 IPv4 주소에 가장 낮은 기본 설정을 제공합니다.

모든 IPv4에 더 높은 우선 순위를 부여하려면 다음과 같이 변경할 수 있습니다.

precedence ::ffff:0:0/96  100

특정 IPv4 주소 또는 블록에만 우선 순위를 부여하려는 경우이를 지정할 수도 있습니다. 16 진수로 IPv4로 매핑 된 IPv6을 사용해야합니다.

따라서 모든 IPv6보다 203.0.113.0/24를 선호하려면 다음을 추가하십시오.

label ::ffff:cb00:7100/120 5
precedence ::ffff:cb00:7100/120 100

실행중인 응용 프로그램을 다시 시작하여 변경 사항을 적용하십시오.


데비안 파생 시스템 /etc/gai.conf에는 이미 존재합니다. Red Hat 파생 시스템에는 존재하지 않지만 샘플 파일은 /usr/share/doc/glibc-common-*/gai.conf; 에 복사하십시오 /etc.


전에는 들어 본 적이 없습니다. DNS 솔루션이 아니더라도 좋은 힌트입니다.
Hauke ​​Laging

가장 쉬운 방법을 요청했습니다 ... :)
Michael Hampton

4

자, 여기 완전히 다른 대답이 있습니다.

크 래피 IPv6 연결성을 /etc/hosts가진 문제가있는 호스트를 해당 IPv4 주소와 함께 배치하십시오.

예를 들면 다음과 같습니다.

199.7.53.74 whois.verisign-grs.com

이 경우 (이 경우) 또는 IPv6 연결이 향상되면 제거하십시오.


1
IP가 하나 인 단일 호스트의 경우에는 쉬울 것입니다. 내가 언급했듯이 이것은 **. youtube.com에 관한 것입니다. 따라서 많은 호스트 이름이 영향을받습니다. 이론적으로 이것은 DNS를 사용하면 쉽습니다. ".youtube.com의 모든 내용에 대한 AAAA 레코드 차단" 귀하의 접근 방식은에 모든 주소를 넣는 것입니다 (아마도 도메인 구조 나 IP를 자주 변경하지 않으며 매일 스크립트 검사를받는 것이 /etc/hosts좋습니다 ) . "DNS 서버 소프트웨어 XY는 이런 식으로 필터링 할 수 있습니다 !!" 아마 그로 끝날 것입니다.
Hauke ​​Laging 2016 년

거의 모든 알려진 DNS 서버 패키지에 대해 잘 알고 있으며 원하는 것, 쉽게 또는 전혀 수행하지 않습니다. 이제 고유 한 사용자 정의 코드를 작성하려는 경우 실제 솔루션은 물론 IPv6 연결을 개선하는 것입니다. 다른 터널 브로커를 사용해 보시겠습니까?
Michael Hampton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.