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

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

최근 Freenet6에서 고정 IPv6/56 접두사를 얻었고 응용 프로그램이 접두사에 임의의 주소를 바인딩하도록 허용하려고 합니다. gogoc클라이언트 주소(여기서는 이라고 함 2001:5c0:1000::cccc/128)와 내가 할당한 전체 서브넷(여기서는 이라고 함 2001:5c0:2000:5800::/56) 을 각각 tun및 에 할당하기 위해 사용하는 터널 생성 스크립트를 수정했습니다 . 수신 대기 tun:1하도록 애플리케이션을 바인딩할 수 있으며 IPv6 개방형 포트 테스터를 사용하면 연결이 성공하고 있음을 나타냅니다.2001: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가 아닌 모든 인터페이스에 바인딩됩니다. 인터넷).

관련 정보