애플리케이션이 인터페이스에 할당된 서브넷의 주소에 바인딩되도록 하려면 어떻게 해야 합니까?

애플리케이션이 인터페이스에 할당된 서브넷의 주소에 바인딩되도록 하려면 어떻게 해야 합니까?

저는 최근 Freenet6에서 고정 IPv6/56 접두사를 얻었고 애플리케이션이 접두사에 임의의 주소를 바인딩할 수 있도록 허용하려고 했습니다. gogoc클라이언트 주소(여기서는 이를 호출함)와 2001:5c0:1000::cccc/128내가 할당한 전체 서브넷(여기서는 이를 호출함)을 각각 및 에 할당하도록 터널 생성 스크립트를 수정했습니다 . 애플리케이션을 바인딩하여 수신 또는 확인을 할 수 있으며 IPv6 개방형 포트 테스터를 사용하면 연결이 성공한 것으로 표시됩니다.2001:5c0:2000:5800::/56tuntun:12001:5c0::cccc2001:5c0:5800::

그러나 딜레마는 2001:5c0:2000:5800:1111:2222:3333:4444내가 할당된 서브넷의 일부인 것처럼 주소를 바인딩할 수 없고 오류 코드가 tun:1표시된다는 것입니다 . 내용은 다음과 같습니다.EADDRNOTAVAILsocat

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)은 다음 두 가지를 의미합니다.

  1. 2001:5c0:1103:5800::귀하에게 할당된 인터페이스 - ping6이를 사용하여 작동하는지 확인할 수 있지만 2001:5c0:1103:5800::1응답하지 않습니다.
  2. /56는 라우팅 목적으로 사용되며 단순히 해당 접두사( )를 사용하여 네트워크에 무언가를 보내려면 inet6 2001:5c0:1103:5800::/56해당 인터페이스를 사용하여 보내야 함을 의미합니다. tun를 사용하여 찾을 수 있습니다 ip -6 route.

하고 싶은 일을 어떻게 하느냐에 관해서는,이 답변을 볼 수 있습니다.

이제 바인딩이 작동하는 이유는 무엇입니까? 이는 호출에서 네트워크 주소를 사용할 수 bind있고 지정된 네트워크에 액세스할 수 있는 인터페이스에 소켓을 바인딩하기 때문입니다(구체적으로 0.0.0.0에 바인딩하면 해당 네트워크의 모든 IP에 바인딩하는 대신 모든 인터페이스에 바인딩됩니다). 인터넷).

관련 정보