CentOS 7에서 IPv4 연결을 사용하여 IPv6 서비스에 연결하는 방법은 무엇입니까?

CentOS 7에서 IPv4 연결을 사용하여 IPv6 서비스에 연결하는 방법은 무엇입니까?

CentOS 시스템의 IPv6 포트에서 수신 대기하는 포트에 인바운드 IPv4 연결을 연결하는 방법을 알아내려고 합니다.

일반 CentOS 7 서버의 데모:

  1. bindV6only비활성화 확인
   $ cat /proc/sys/net/ipv6/bindv6only
   0
  1. IPv6 포트에서 netcat 수신 대기를 실행하십시오.
   nc -lvn6p 80
  1. 다른 셸에서 IPv4를 통해 포트에 텔넷을 시도합니다.
   telnet 127.0.0.1 80

127.0.0.1 시도 중... 텔넷: 주소 127.0.0.1에 연결 중: 연결이 거부되었습니다.

추가 정보

  • IPv6을 통해 연결을 시도하면 정상적으로 작동합니다. 예: 원격 로그인::1 80
  • 그러나 내가 읽은 모든 내용에 따르면 net.ipv6.bindv6only가 sysctl에서 비활성화된 경우 Linux 기반 IPv6 소켓은 IPv4 연결도 허용해야 합니다.
  • 나는 Socket CAT을 사용해 보았지만 작동하지만 우아한 솔루션이 아니며 별도의 서비스를 구성해야 합니다. 예를 들어
socat TCP4-LISTEN:80,reuseaddr,fork TCP6:[::1]:80

인용하다:https://sysctl-explorer.net/net/ipv6/bindv6only/

인용하다:https://stackoverflow.com/questions/6343747/ipv6-socket-creation

답변1

이것이 귀하의 문제인지는 모르겠지만 yum install nc설치를 실행하는 centos 7에서는 nmap-ncatipv6 소켓에 소켓 옵션 자체를 설정합니다.SOL_IPV6/IPV6_V6ONLY

# strace -e trace=setsockopt nc -lvn6p 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(3, SOL_IPV6, IPV6_V6ONLY, [1], 4) = 0
Ncat: Listening on :::80

-6및 옵션을 생략 하면 두 개의 서로 다른 및 소켓이 -4바인딩됩니다 .ipv6ipv4

# strace -e trace=bind,setsockopt nc -lvnp 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(3, SOL_IPV6, IPV6_V6ONLY, [1], 4) = 0
bind(3, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
Ncat: Listening on :::80
setsockopt(4, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(4, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
Ncat: Listening on 0.0.0.0:80

분명히 nmap사람들은 Linux의 듀얼 스택 소켓 기능을 별로 좋아하지 않습니다 ;-)

관련 정보