저는 최근 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
)은 다음 두 가지를 의미합니다.
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에 바인딩하는 대신 모든 인터페이스에 바인딩됩니다). 인터넷).