web-dev-qa-db-ja.com

IPv6 / 64ブロック全体をdebianのネットワークインターフェースに追加する

を使用してインターフェイスにIPv6(/ 64)ブロック全体を追加してみました

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

私のDebianサーバーでは here のように書かれていますが、何かが足りないようです。

たとえばpingした場合、2001:41d0:2:ad64::feローカルではすべてが正常に動作しますが、リモートマシンから試しても動作しません。次に、eth0にルートを追加してみました。

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

今では、ローカルにサンプルアドレスをpingすることもできませんでした。

何かが足りないようで少し迷っていますが、ここで答えが見つかりません。

略して:2001:41d0:2:ad64::/64 eth0にバインドして、このブロックに含まれるすべてのIPが私のマシンのインターネットから到達できるようにします。

誰かが私を正しい方向に向けてくれることを願っています。前もって感謝します。

ISPが提供する guide では、各IPv6を明示的にインターフェイスに追加する必要があります。私はそれが暗示されることを望みます。

explict ip address bindingを使用した作業構成

/ etc/network/interfaces:

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出力(リモートサーバーでpingおよびtracerouting中):

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)では動作していません。

15
Hikaru-Shindo

過去に似たようなものが必要でした。これを機能させるには、3つの手順が必要であることがわかりました。

  • プレフィックスをホストにルーティングする必要があります
  • ホストにローカルルートが必要です
  • アプリケーションは、ソケットにIP_FREEBINDまたはIP_TRANSPARENTオプションを設定する必要があります

ホストにルーティングされたプレフィックスを取得する適切な方法は、プロバイダーがまだ提供していない場合は、プロバイダーに連絡することです。正しいDHCPv6リクエストを送信した場合、プレフィックスを委任できるDHCPv6サーバーが存在する場合があります。

実際のルーティングされたプレフィックスが何らかの理由で取得できないが、ネットワークインターフェイスの1つで利用可能なリンクプレフィックスから必要な数のアドレスを使用するアクセス権がある場合、その一部をルーティングされたプレフィックスに変えることができます。デーモンに、その範囲内のすべてのIPv6アドレスのネイバー探索要求に応答させる。

そのようなデーモンを使用することは、最後の手段として以外はお勧めしません。すべてのネイバーからメモリを不必要に消費するからです。そのようなデーモンの実装はいくつかありますが、有望に思えるのは ndppd です。 (私は自分のリンク接頭辞をハードコードして自分で書いた後で初めてそれについて学んだので、私はそれについて特定の経験はありません。)

ローカルルートは既に機能しているようです。お気づきのように、機能させるにはloインターフェースに割り当てる必要があります。

最後に、この範囲のアドレスを使用するアプリケーションは、ホストの特定のネットワークインターフェイスに明示的に割り当てられていないアドレスにバインドできるようにするために、IPオプションが必要です。以下は、使用できるコードの一部です。

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

それは今2019年です。 1つの単語:ip_nonlocal_bind(私が知っている4.3カーネル以降)。

Ndppd + sysctl net.ipv6.ip_nonlocal_bind = 1を使用します。最後の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を実行すると、(追加されたブロックの)任意のアドレスにバインドして、それ自体を追加したように使用できます。

3