Thêm toàn bộ khối IPv6 / 64 vào giao diện mạng trên debian


15

Tôi đã thử thêm toàn bộ khối IPv6 (/ 64) vào giao diện bằng

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

như được mô tả ở đây trên máy chủ Debian của tôi, nhưng tôi dường như đang thiếu một cái gì đó.

Nếu tôi ping ví dụ 2001:41d0:2:ad64::fecục bộ thì mọi thứ đều hoạt động tốt, nhưng nếu tôi thử từ một máy từ xa thì nó không hoạt động. Sau đó tôi đã thử thêm tuyến đường trên eth0:

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

Bây giờ tôi thậm chí không thể ping bất kỳ địa chỉ ví dụ nào tại địa phương!

Tôi hơi lạc lõng vì dường như tôi đang thiếu thứ gì đó nhưng tôi không thể tìm thấy câu trả lời ở đây.

Tóm lại: Tôi muốn 2001:41d0:2:ad64::/64được ràng buộc với eth0 để mọi IP mà khối này đang chứa sẽ có thể truy cập được từ internet trên máy của tôi.

Tôi hy vọng ai đó ngoài kia có thể chỉ cho tôi cách đúng. Cảm ơn trước.

Các hướng dẫn được cung cấp bởi các ISP không yêu cầu tôi để thêm mỗi IPv6 để giao diện explictly. Tôi muốn nó được ngụ ý.

Cấu hình làm việc với ràng buộc địa chỉ ip

/ etc / mạng / giao diện:

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

Giải pháp thử số 1

Tôi đã thử chạy lại tuyến đường địa phương như @kasperd đề xuất.

Nội dung của giao diện / etc / mạng / của tôi

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

Bảng định tuyến cục bộ:

# 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

Đầu ra của traceroute(PC tại nhà địa phương của tôi):

  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 trên máy chủ:

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 trên máy chủ:

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 đầu ra (trong khi ping và theo dõi trên máy chủ từ xa):

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

tracert đến cổng:

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 đến cổng:

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

Vì vậy, nó vẫn chỉ hoạt động cục bộ (máy chủ) chứ không phải từ xa (máy tính của tôi).


Vì vậy, bạn đã thử một traceroute từ một máy từ xa? Trường hợp nào dấu vết thất bại?
Zoredache

Nếu tất cả các máy chủ lưu trữ trong cùng một mạng, bạn không nên có bất kỳ tuyến đường nào.
Spack

ip routeLệnh thứ hai của bạn có một lỗi đánh máy trong địa chỉ IPv6.
Michael Hampton

@Spack Tôi muốn eth0 lắng nghe toàn bộ tiền tố ipv6 / 64 (lưu lượng đến), @ michael-hampton đã sửa, chỉ trong khi gõ câu hỏi này, @Zoredache Nó thất bại tại Cổng ISP 2001:41d0:2:adff:ff:ff:ff:ffsau khi nó sẽ hết thời gian chờ.
Hikaru-Shindo

Từ nghiên cứu tôi đã làm trong quá khứ, điều này là không thể. Lý do nó hoạt động cục bộ là vì bảng định tuyến của bạn biết nơi định tuyến các gói. Nếu bạn đã thêm tiền tố này dưới dạng tuyến tĩnh trong bộ định tuyến biên thì bạn sẽ thấy các máy khách LAN có thể kết nối.
Nathan C

Câu trả lời:


13

Tôi đã cần một cái gì đó tương tự trong quá khứ. Tôi thấy rằng có ba bước cần thiết để làm việc này:

  • Bạn cần định tuyến tiền tố đến máy chủ
  • Bạn cần một tuyến đường địa phương trên máy chủ
  • Các ứng dụng cần đặt IP_FREEBINDhoặc IP_TRANSPARENTtùy chọn trên ổ cắm

Cách thích hợp để nhận tiền tố được chuyển đến máy chủ lưu trữ liên quan đến việc liên hệ với nhà cung cấp của bạn, nếu họ chưa cung cấp cho bạn một tiền tố. Họ có thể có máy chủ DHCPv6, có thể ủy quyền tiền tố cho bạn, nếu bạn chỉ gửi đúng yêu cầu DHCPv6 cho nó.

Nếu bạn không thể có được một tiền tố được định tuyến thực sự, nhưng bạn có quyền truy cập để sử dụng nhiều địa chỉ như bạn muốn từ một tiền tố liên kết có sẵn trên một trong các giao diện mạng của bạn, bạn có thể biến một phần của tiền tố đó thành tiền tố được định tuyến có một daemon đáp ứng các yêu cầu khám phá hàng xóm cho mọi địa chỉ IPv6 trong phạm vi đó.

Sử dụng một daemon như vậy không được khuyến khích ngoài mục đích cuối cùng, vì nó sẽ không cần sử dụng bộ nhớ từ tất cả hàng xóm của bạn. Có một vài triển khai của một daemon như vậy, một cái có vẻ hứa hẹnndppd . (Tôi không có kinh nghiệm cụ thể với nó, vì tôi chỉ tìm hiểu về nó sau khi tôi tự viết bằng tiền tố liên kết của mình được mã hóa cứng.)

Có vẻ như bạn đã có tuyến đường địa phương làm việc. Như bạn nhận thấy, nó phải được gán cho logiao diện để hoạt động.

Cuối cùng, các ứng dụng sử dụng địa chỉ trong phạm vi này cần có tùy chọn IP để có thể liên kết với các địa chỉ không được gán rõ ràng cho giao diện mạng cụ thể trên máy chủ. Đây là một đoạn mã, có thể được sử dụng:

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

Tôi đã có một tiền tố tĩnh được chuyển đến máy chủ của tôi bởi ISP (họ không cung cấp DHCP. Cả cho IPv4 và IPv6). Tôi muốn tất cả IPv6 trong khối / 64 này có thể truy cập được từ bên ngoài (hầu hết các ứng dụng của tôi liên kết với :: đó phải là tất cả các địa chỉ khả dụng nếu tôi không nhầm). Bây giờ tôi muốn tất cả các IP này khả dụng trên eth0 vì vậy nếu tôi cố gắng kết nối với bất kỳ IPv6 nào trong khối đó, bất kỳ ứng dụng nào nghe cổng được chỉ định sẽ có thể trả lời (ví dụ: mỗi IP sẽ phản hồi ping chính xác).
Hikaru-Shindo

Nếu bạn liên kết với :: tùy chọn IP_TRANSPARENT là không cần thiết. Với tiền tố được định tuyến đến máy chủ của tôi và tuyến địa phương tại chỗ, tôi có thể liên kết với :: và nhận các kết nối được thực hiện cho các địa chỉ IPv6 tùy ý trong phạm vi đó. ping6 cũng hoạt động. Tôi đang thử nghiệm điều này trên Ubuntu 12.04, nhưng tôi hy vọng nó cũng hoạt động trên mọi kernel gần đây trên các bản phân phối khác. Nếu nó không hiệu quả với bạn, tôi khuyên bạn nên xem lưu lượng truy cập mạng bằng cách sử dụngtcpdump -pni eth0 'host 2001:41d0:2:ad65::fe'
kasperd

Nó vẫn không hoạt động. Tôi đã cung cấp thêm một vài thông tin về cấu hình trong câu hỏi của tôi, có lẽ điều này sẽ giúp ích.
Hikaru-Shindo

Bạn nói rằng bạn có một / 64 định tuyến đến máy chủ. Nhưng các ví dụ trong hướng dẫn của nhà cung cấp dịch vụ lưu trữ chỉ có tiền tố liên kết và không có tiền tố định tuyến. Và đầu ra tcpdump và traceroute6 trông giống như các địa chỉ không được định tuyến đến máy chủ. Bạn đã quản lý để có được một địa chỉ IPv6 duy nhất hoạt động bằng cách sử dụng tài liệu từ nhà cung cấp chưa?
kasperd

1
@Arya Khi tôi cần một thứ như vậy, tôi đặt lệnh vào/etc/rc.local
kasperd

2

Bây giờ là năm 2019. Một từ: ip_nonlocal_bind (kể từ kernel 4.3 như tôi có thể biết).

Sử dụng ndppd + sysctl net.ipv6.ip_nonlocal_bind = 1, cái cuối cùng cho phép bạn liên kết với bất kỳ địa chỉ IPv6 nào (không cần IP_FREEBIND trong trường hợp này).

Đoán bạn đã làm như vậy:

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 sẽ giống như:

route-ttl 30000

proxy eth0 {

   router no

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

chạy ndppd và bây giờ bạn có thể liên kết với bất kỳ địa chỉ nào (của khối được thêm vào) và sử dụng nó như chính nó đã thêm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.