CentOS 시스템의 IPv6 포트에서 수신 대기하는 포트에 인바운드 IPv4 연결을 연결하는 방법을 알아내려고 합니다.
일반 CentOS 7 서버의 데모:
bindV6only
비활성화 확인
$ cat /proc/sys/net/ipv6/bindv6only
0
- IPv6 포트에서 netcat 수신 대기를 실행하십시오.
nc -lvn6p 80
- 다른 셸에서 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-ncat
ipv6 소켓에 소켓 옵션 자체를 설정합니다.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
바인딩됩니다 .ipv6
ipv4
# 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의 듀얼 스택 소켓 기능을 별로 좋아하지 않습니다 ;-)