CentOSボックスのIPv6ポートをリッスンしているポートにインバウンドIPv4接続を接続する方法を見つけようとしています。
Vanilla CentOS 7サーバーでデモンストレーションするには:
bindV6only
無効になっています $ cat /proc/sys/net/ipv6/bindv6only
0
nc -lvn6p 80
telnet 127.0.0.1 80
127.0.0.1を試行しています... telnet:アドレス127.0.0.1に接続します:接続が拒否されました
socat TCP4-LISTEN:80,reuseaddr,fork TCP6:[::1]:80
参照: https://sysctl-Explorer.net/net/ipv6/bindv6only/
参照: https://stackoverflow.com/questions/6343747/ipv6-socket-creation
これがあなたの問題かどうかはわかりませんが、centos7でyum install nc
を実行すると、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
オプションを省略すると、2つの異なる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のデュアルスタックソケット機能の大ファンではありません;-)