Ich habe vor Kurzem ein eigenes statisches IPv6 /56-Präfix von Freenet6 erhalten und versuche, Anwendungen das Binden beliebiger Adressen im Präfix zu ermöglichen. Ich habe das Tunnelerstellungsskript geändert, das gogoc
verwendet wird, um sowohl die Clientadresse (hier nennen wir es 2001:5c0:1000::cccc/128
) als auch das gesamte von mir zugewiesene Subnetz (hier genannt 2001:5c0:2000:5800::/56
) tun
bzw. zuzuweisen tun:1
. Ich kann eine Anwendung binden, um auf 2001:5c0::cccc
oder 2001:5c0:5800::
zuzuhören, und die Verwendung von IPv6-Open-Port-Testern zeigt an, dass die Verbindung erfolgreich ist.
Das Dilemma besteht jedoch darin, dass ich eine Adresse wie nicht binden kann 2001:5c0:2000:5800:1111:2222:3333:4444
, die Teil des von mir zugewiesenen Subnetzes ist tun:1
, und EADDRNOTAVAIL
als Fehlercode erhalte. socat
lautet:
2014/05/10 12:12:06 socat[16940] E bind(3, {AF=10 [2001:5c0:2000:5800:1111:2222:3333:4444]:9876}, 28): Cannot assign requested address
Die Anwendung, die ich verwenden möchte, unterstützt IP_FREEBIND
oder nicht IP_TRANSPARENT
.
Gibt es eine Kerneleinstellung, mit der ich Sockets implizit frei binden kann? Oder vielleicht eine Möglichkeit, die Socket-Erstellung von einem bestimmten Prozess aus abzufangen und dieser Erstellung Socket-Optionen beizufügen?
ip addr
:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 04:7d:7b:XX:XX:XX brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 9c:b7:0d:XX:XX:XX brd ff:ff:ff:ff:ff:ff
5: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:c0:ff:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 192.168.2.8/24 brd 192.168.2.255 scope global wlan1
valid_lft forever preferred_lft forever
inet6 fe80::2c0:ffff:feff:70d1/64 scope link
valid_lft forever preferred_lft forever
11: tun: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet6 2001:5c0:1103:5800::/56 scope global
valid_lft forever preferred_lft forever
inet6 2001:5c0:1000:b::5225/128 scope global
valid_lft forever preferred_lft forever
Antwort1
Der Teil Ihrer Schnittstellenkonfiguration, nämlich inet6 2001:5c0:1103:5800::/56
in der ip addr
Auflistung, bedeutet zweierlei:
2001:5c0:1103:5800::
ist Ihrer Schnittstelle zugewiesen - Sie könnenping6
es herausfinden, um herauszufinden, ob es gültig ist, während2001:5c0:1103:5800::1
es nicht reagiert/56
dient zu Routing-Zwecken und bedeutet lediglich, dass, wenn Sie etwas mit diesem Präfix ( ) an das Netzwerk senden möchteninet6 2001:5c0:1103:5800::/56
, es über die Schnittstelle hinausgehen solltun
. Sie können dies mithilfe von herausfindenip -6 route
.
Um zu erfahren, wie Sie tun können, was Sie wollen,Sie können diese Antwort überprüfen.
Warum funktionierten die Bindungen? Weil Sie im bind
Aufruf eine Netzwerkadresse verwenden können, die Ihren Socket an Schnittstellen bindet, die Zugriff auf das angegebene Netzwerk haben (insbesondere die Bindung an 0.0.0.0 bindet an alle Schnittstellen und nicht an alle IPs im Internet).