私は最近Freenet6で固定IPv6/56プレフィックスを取得し、アプリケーションがプレフィックスにランダムなアドレスをバインドできるようにしました。gogoc
クライアントアドレス(ここではこれを呼び出す)と2001:5c0:1000::cccc/128
私が割り当てたサブネット全体(ここではそれを呼び出す)をそれぞれに割り当てるようにトンネル生成スクリプトを変更しました。アプリケーションをバインドして受信または確認することができ、IPv6オープンポートテスターを使用すると、接続が成功したとマークされます。2001:5c0:2000:5800::/56
tun
tun:1
2001:5c0::cccc
2001:5c0:5800::
しかし、ジレンマは、2001:5c0:2000:5800:1111:2222:3333:4444
私が割り当てられたサブネットの一部であるかのようにアドレスをバインドできず、エラーコードが表示されるtun:1
ことです。内容は次のとおりです。EADDRNOTAVAIL
socat
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
使用したいアプリケーションがまたはをIP_FREEBIND
サポートしていませんIP_TRANSPARENT
。
暗黙的にソケットを自由にバインドするために使用できるカーネル設定はありますか?それとも、特定のプロセスでソケット生成を傍受し、その生成にソケットオプションを追加する方法はありますか?
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
答え1
インターフェイス構成部分(例:リストinet6 2001:5c0:1103:5800::/56
の部分ip addr
)は、次の2つを意味します。
2001:5c0:1103:5800::
あなたに割り当てられたインターフェイス -ping6
これを使用して動作していることを確認できますが、2001:5c0:1103:5800::1
応答しません。/56
はルーティング目的で使用され、単にそのプレフィックス()を使用してネットワークに何かを送信するには、そのインターフェイスを使用して送信する必要があることinet6 2001:5c0:1103:5800::/56
を意味します。tun
を使用して見つけることができますip -6 route
。
やりたいことをどうするかについては、この回答を見ることができます。
今、バインディングが機能するのはなぜですか?これは、呼び出しがネットワークアドレスを使用できbind
、指定されたネットワークにアクセスできるインターフェイスにソケットをバインドするためです(具体的には、0.0.0.0にバインドすると、そのネットワークのすべてのIPにバインドするのではなく、すべてのインターフェイスにバインドされます)。インターネット)。