起動時にJavaプログラムの1つで、IPv6(8080)でのみリッスンします
例えば.
# netstat -ntpl
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::8080 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
問題は、外部(localhostを除く)からアクセスできないことです。これを解決するには、これを手動で追加します
-Djava.net.preferIPv4Stack=true
ただし、これにより、プログラムはIPv4ネットワーク専用になります。
上記のsshdのようなことを行うことは可能ですか?どちらもIPv4とIPv6をサポートしていますか?
OSネットワークスタック/ OSネットワーク構成の問題よりもJavaプログラミングの問題)ではないと思います。
http://coding.derkeiler.com/Archive/Java/comp.lang.Java.help/2009-09/msg00087.html
一部のOSでは、単一のネイティブTCPソケットは、IPv4とIPv6の両方で同時にポートをリッスンできます。リモートIPv4およびリモートIPv6クライアントからの接続を受け入れることができます。他のOS( WinXPとして)OSネイティブソケットはそれを行うことができませんが、IPv4またはIPv6からのみ受け入れることができます。両方ではありません。これらのOSでは、リモートIPv4クライアントとIPv6クライアントの両方からの接続を受け入れることができるように2つのリッスンソケットが必要です。 、IPv4接続をリッスンする1つのソケットとIPv6をリッスンする1つのソケット。
Windows7とWindowsServer 2008は、デュアルスタックを問題なく処理します。 Windows XPそれほど多くない:)
Linuxを使用しているようです。最近のほとんどのLinuxデスクトップとサーバーは、デュアルipv4ipv6も問題なく処理します。
相互運用性に関する優れた記事は次のとおりです。
Javaアプリケーション:-Djava.net.preferIPv4Stack=true
のIPV6を「オフ」にする方法を知っています。
次のように、サーバーにIPV6の使用を強制することもできます。echo 0 > /proc/sys/net/ipv6/bindv6only
これは間違いなくあなたの最高の情報源です:
外部ネットワークの問題によって制限されない限り、(少なくともJavaプログラミングレベルで))必要なことを絶対に達成できるはずです。
Nodes) V4 Only V4/V6 V6 Only
------- ----- -------
V4 Only x x
V4/V6 x x x
V6 Only x x
PS:
ソケットレベルで何が起こっているかを説明するもう1つの良いリンクがあります。 Java(Cです)ではありませんが、サンプルの原則が正確に適用されます。