web-dev-qa-db-ja.com

bind-address = :: 1#ただし、netstatは0.0.0.0:3306 LISTENINGを示します

IPv6とIPv4が有効になっている64ビットWindows 7でMySQL 5.6を実行しています。

My.iniで:

port=3306
bind-address = ::1

IPv6を使用し、ループバックアダプターに制限したいと思っていました。 localhostのIPv6を使用するwin7のデフォルトは::1であるため、127.0.0.1ではなく::1を使用しました。

この構成では、netstatは次を報告します。

C:\>netstat -an |findstr 3306
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING
  TCP    [::1]:3306             [::]:0                 LISTENING

IPv4インターフェースで接続がブロックされているようですが、0.0.0.0ポート3306が開いているというnetstatのレポートを見ると不安になります。

MySQL documentation は以下を指定します:

アドレスが「通常の」IPv4またはIPv6アドレス(127.0.0.1または:: 1など)である場合、サーバーはそのIPv4またはIPv6アドレスに対してのみTCP/IP接続を受け入れます。

TCPViewはnetstatと同じ情報を私に与えました。 TDIMonをシステムで動作させることができませんでした。

Mysqlが0.0.0.0をリッスンしないようにするにはどうすればよいですか?

6
ebyrob

ここには2つの可能性があります。

  1. 実際には、MySQLの2つのコピーが実行されています。1つはIPv4にバインドされ、もう1つはIPv6にバインドされています。これはおそらくあまりありませんが、とにかくチェックする必要があります。

  2. MySQLのWindowsポートにバグを発見しました。 Linuxでこれを試したところ、bind-address = ::1によってMySQLは::1にのみバインドし、IPv4アドレスにはバインドしなくなりました。この場合、それをバグとしてMySQLに報告する必要があります。

4
Michael Hampton

ようやくmysql 5.6ソースを掘り下げる時間ができました。 mysqld.ccの行2405はいくつかの回答を保持しているようです。

 /*
   For interoperability with older clients, IPv6 socket should
   listen on both IPv6 and IPv4 wildcard addresses.
   Turn off IPV6_V6ONLY option.

   NOTE: this will work starting from Windows Vista only.
   On Windows XP dual stack is not available, so it will not
   listen on the corresponding IPv4-address.
 */
if (a->ai_family == AF_INET6)
{
  arg= 0;

  if (mysql_socket_setsockopt(ip_sock, IPPROTO_IPV6, IPV6_V6ONLY,/* Line: 2405 */
                              (char *) &arg, sizeof (arg)))
  {
    sql_print_warning("Failed to reset IPV6_V6ONLY flag (error: %d). "
                      "The server will listen to IPv6 addresses only.",
                      (int) socket_errno);
  }
}

このソケットオプションを設定すると、余分な行0.0.0.0:3306netstatに表示されます。ただし、127.0.0.1をtelnetに指定しても接続できません。

コメントは、このオプションはワイルドカードが適用されている場合にのみ使用する必要があるように聞こえますが、bind-addressが指定されている場合でもオプションが適用されるようです。

ここでおそらく関連する議論: http://serverdown.ttwait.com/que/486038

googleキャッシュ: http://webcache.googleusercontent.com/search?q=cache:14aq4-3tRLsJ:serverdown.ttwait.com/que/486038+&cd=4&hl=ja&ct=clnk&gl=us

EDIT:バグレポート(トリアージ中)で、ワイルドカードアドレス*にバインドする場合、MySQLはIPV6_V6ONLYのみをクリアすることを提案しました。これにより、my.iniでの設定の柔軟性が最も高まるようです。一部の管理者が::をバインドしていて、127.0.0.1に接続している場合、驚くかもしれません。 *の代わりに::をバインドすると修正されます。

1
ebyrob