데비안의 네트워크 인터페이스에 전체 IPv6 / 64 블록 추가


15

인터페이스를 사용하여 전체 IPv6 (/ 64) 블록을 추가하려고했습니다.

ip route add local 2001:41d0:2:ad64::/64 dev lo

여기 데비안 서버에 설명 되어 있지만 뭔가 빠진 것 같습니다.

예를 들어 2001:41d0:2:ad64::fe로컬로 핑하면 모든 것이 잘 작동하지만 원격 컴퓨터에서 시도하면 작동하지 않습니다. 그런 다음 eth0에 경로를 추가하려고했습니다.

ip route add local 2001::41d0:2:ad64::/64 dev eth0

이제 로컬로 예제 주소를 핑할 수도 없었습니다!

나는 뭔가를 놓친 것 같아서 조금 길을 잃었지만 여기에서 답을 찾을 수 없습니다.

간단히 말해서 : 2001:41d0:2:ad64::/64이 블록에 포함 된 모든 IP가 내 컴퓨터의 인터넷에서 도달 할 수 있도록 eth0에 바인딩 하고 싶습니다 .

나는 누군가가 올바른 길을 가리킬 수 있기를 바랍니다. 미리 감사드립니다.

가이드 서비스 제공 업체 (ISP)는 명시 적 인터페이스에 각각의 IPv6를 추가하는 저를 필요로 않습니다. 나는 그것이 함축되기를 원합니다.

Explict IP 주소 바인딩을 사용한 작업 구성

/ etc / network / 인터페이스 :

auto eth0
iface eth0 inet static
        address my.ip.v4
        netmask 255.255.255.0
        network my.network.address.ip
        broadcast my.broadcast.address.ip
        gateway my.gateway.ip

iface eth0 inet6 static
        address 2001:41d0:2:ad64::fe
        netmask 64
        gateway 2001:41d0:2:adff:ff:ff:ff:ff
        up ip addr add 2001:41d0:2:ad64::1/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::1/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::2/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::2/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::3/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::3/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::4/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::4/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::5/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::5/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::6/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::6/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::7/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::7/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::8/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::8/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::9/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::9/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::a/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::a/64 dev eth0

솔루션 시도 # 1

@kasperd가 제안한대로 로컬 경로를 다시 활성화하려고했습니다.

내 / etc / network / interfaces의 내용

auto lo
iface lo inet loopback
    post-up ip route add local 2001:41d0:2:ad64::/64 dev lo
    pre-down ip route del local 2001:41d0:2:ad64::/64 dev lo

auto eth0
iface eth0 inet static
        # <snip of ipv4 config>

iface eth0 inet6 static
        address 2001:41d0:2:ad64::fe
        netmask 64
        gateway 2001:41d0:2:adff:ff:ff:ff:ff

로컬 라우팅 테이블 :

# ip -6 route show table local
local ::1 dev lo  proto none  metric 0
local 2001:41d0:2:ad64::fe dev lo  proto none  metric 0
local 2001:41d0:2:ad64::/64 dev lo  metric 1024
local fe80::225:90ff:fe06:6bbe dev lo  proto none  metric 0
ff00::/8 dev eth0  metric 256

traceroute(내 로컬 홈 PC)의 출력 :

  1    <1 ms    <1 ms    <1 ms  fritz.box [xxx]

  2    20 ms    21 ms    24 ms  2002:c058:6301::1
  3    21 ms    22 ms    24 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
  4    44 ms    31 ms    40 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
  5     *        *        *     Zeitüberschreitung der Anforderung.
  6     *        *       35 ms  ams-5-6k.nl.eu [2001:41d0::8d1]
  7    37 ms    39 ms    36 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
  8    37 ms    70 ms    36 ms  chi-3-4m.il.us [2001:41d0::176]
  9  Zielhost nicht erreichbar.

Ablaufverfolgung beendet.

traceroute6 서버에서 :

traceroute to 2001:41d0:2:ad64::23 (2001:41d0:2:ad64::23), 30 hops max, 80 byte packets
 1  2001:41d0:2:ad64::a (2001:41d0:2:ad64::a)  0.028 ms  0.009 ms  0.008 ms

ping6 서버에서 :

PING 2001:41d0:2:ad64::23(2001:41d0:2:ad64::23) 56 data bytes
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=2 ttl=64 time=0.057 ms
^C
--- 2001:41d0:2:ad64:23 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.029/0.043/0.057/0.014 ms

tcpdump 출력 (원격 서버에서 핑 및 추적 라우팅 중) :

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

tracert 게이트웨이로 :

Routenverfolgung zu vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff] über maximal 3
0 Abschnitte:

  1    <1 ms    <1 ms    <1 ms  fritz.box [2002:5476:1b4c:0:c225:6ff:fe40:b2b0]

  2    23 ms    22 ms    26 ms  2002:c058:6301::1
  3    24 ms    40 ms    23 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
  4    28 ms    37 ms    39 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
  5     *        *        *     Zeitüberschreitung der Anforderung.
  6    38 ms    33 ms     *     ams-5-6k.nl.eu [2001:41d0::8d1]
  7    36 ms    39 ms    38 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
  8    36 ms    35 ms    35 ms  vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff]

Ablaufverfolgung beendet.

ping 게이트웨이로 :

Ping wird ausgeführt für 2001:41d0:2:adff:ff:ff:ff:ff mit 32 Bytes Daten:
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=36ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=34ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=38ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=57ms

Ping-Statistik für 2001:41d0:2:adff:ff:ff:ff:ff:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 34ms, Maximum = 57ms, Mittelwert = 41ms

따라서 여전히 로컬 (서버)에서 작동하지만 원격 (내 PC)에서는 작동하지 않습니다.


원격 시스템에서 추적 경로를 사용해 보셨습니까? 추적은 어디에서 실패합니까?
Zoredache

모든 호스트가 동일한 네트워크에있는 경우 경로가 없어야합니다.
Spack

두 번째 ip route명령은 IPv6 주소에 오타가 있습니다.
Michael Hampton

@Spack eth0이 전체 ipv6 / 64 접두사 (들어오는 트래픽)를 듣고 싶습니다. @ michael-hampton 수정되었습니다.이 질문을 입력하는 동안 @Zoredache ISP 게이트웨이에서 실패하면 2001:41d0:2:adff:ff:ff:ff:ff시간이 초과됩니다.
Hikaru-Shindo

내가 과거에 한 연구에서 이것은 불가능합니다. 로컬에서 작동하는 이유는 라우팅 테이블 패킷을 라우팅 할 위치를 알고 있기 때문 입니다. 이 접두사를 에지 라우터에서 고정 경로로 추가 한 경우 LAN 클라이언트를 연결할 수 있습니다.
Nathan C

답변:


13

과거에는 비슷한 것이 필요했습니다. 이 작업을 수행하는 데 필요한 세 가지 단계가 있음을 발견했습니다.

  • 접두사를 호스트로 라우팅해야합니다.
  • 호스트에서 로컬 경로가 필요합니다
  • 응용 프로그램 은 소켓 에서 IP_FREEBIND또는 IP_TRANSPARENT옵션 을 설정해야합니다.

접두사를 호스트로 라우팅하는 올바른 방법은 공급자가 아직 제공하지 않은 경우 공급자에게 연락하는 것입니다. 올바른 DHCPv6 요청을 보내면 접두사를 위임 할 수있는 DHCPv6 서버가있을 수 있습니다.

실제 라우팅 된 접두사가 어떤 이유로 인해 얻을 수 없지만 네트워크 인터페이스 중 하나에서 사용 가능한 링크 접두사에서 원하는만큼의 주소를 사용할 수있는 액세스 권한이있는 경우 다음 방법을 통해 해당 접두사를 라우팅 된 접두어로 바꿀 수 있습니다 데몬이 해당 범위의 모든 IPv6 주소에 대한 이웃 검색 요청에 응답하게합니다.

이러한 데몬을 사용하는 것은 최후의 수단 이외의 방법으로 권장되지 않습니다. 모든 이웃의 메모리를 불필요하게 소비하기 때문입니다. 이러한 데몬에는 몇 ​​가지 구현이 있으며, 무시되는 것처럼 보이는 것은 ndppd 입니다. (링크 접두사로 하드 코딩 된 내 자신의 글을 쓴 후에 만 ​​알았 기 때문에 구체적인 경험이 없습니다.)

로컬 경로가 이미 작동중인 것 같습니다. 알다시피, lo작동 하려면 인터페이스에 인터페이스를 할당해야합니다 .

마지막으로이 범위의 주소를 사용하는 응용 프로그램은 호스트의 특정 네트워크 인터페이스에 명시 적으로 할당되지 않은 주소에 바인딩 할 수 있도록 IP 옵션이 필요합니다. 사용할 수있는 코드 조각은 다음과 같습니다.

const int one = 1;
setsockopt(fd, SOL_IP, IP_FREEBIND, &one, sizeof(one));

ISP에 의해 서버로 라우팅되는 정적 접두사가 있습니다 (DHCP는 제공하지 않습니다. IPv4도 IPv6도 아닙니다). 이 / 64 블록의 모든 IPv6가 외부에서 도달 할 수 있기를 원합니다 (대부분의 응용 프로그램은 :: 실수하지 않은 경우 사용 가능한 모든 주소 여야합니다). 이제 모든 IP를 eth0에서 사용할 수 있기를 원하므로 해당 포트에서 IPv6에 연결하려고하면 지정된 포트를 수신하는 응용 프로그램이 응답 할 수 있습니다 (예 : 각 IP가 ping에 올바르게 응답해야 함).
Hikaru-Shindo

::에 바인딩하면 IP_TRANSPARENT 옵션이 필요하지 않습니다. 서버로 라우팅 된 접두사와 로컬 경로를 사용하여 ::에 바인딩하고 해당 범위의 임의 IPv6 주소에 대한 연결을 수신 할 수 있습니다. ping6도 작동합니다. 우분투 12.04에서 이것을 테스트하고 있지만 다른 배포판의 최신 커널에서도 작동 할 것으로 기대합니다. 그것이 당신을 위해 작동하지 않는 경우, 나는 당신이 사용하여 네트워크 트래픽을 살펴 보는 것이 좋습니다tcpdump -pni eth0 'host 2001:41d0:2:ad65::fe'
kasperd

여전히 작동하지 않습니다. 내 질문에 구성에 대한 몇 가지 추가 정보를 제공했는데 도움이 될 수 있습니다.
Hikaru-Shindo

/ 64가 서버로 라우팅되었다고 말합니다. 그러나 호스팅 제공 업체 가이드의 예제에는 링크 접두사 만 있고 라우팅 접두사가 없습니다. 그리고 tcpdump 및 traceroute6 출력은 주소가 서버로 라우팅되지 않은 것처럼 보입니다. 공급자의 설명서를 사용하여 단일 IPv6 주소를 사용할 수 있습니까?
kasperd

1
@Arya 그런 일이 필요할 때 명령을 입력했습니다/etc/rc.local
kasperd

2

2019 년입니다. 한 단어 : ip_nonlocal_bind (4.3 커널부터 알 수 있음).

ndppd + sysctl net.ipv6.ip_nonlocal_bind = 1을 사용하십시오. 마지막 주소는 모든 IPv6 주소에 바인딩 할 수 있습니다 (이 경우 IP_FREEBIND 필요 없음).

당신이 그렇게 추측 :

ip add add local 2001::41d0:2:ad64::/64 dev lo
ip route add local 2001::41d0:2:ad64::/64 dev eth0
sysctl  net.ipv6.ip_nonlocal_bind = 1

ndppd.conf는 다음과 같습니다.

route-ttl 30000

proxy eth0 {

   router no

   timeout 500
   ttl 30000
   rule 2001::41d0:2:ad64::/64{
       static
   }
}

ndppd를 실행하면 (추가 된 블록의) 모든 주소에 바인딩하여 추가 된 그대로 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.