問題
iscsiadm の検出は、両方のインターフェースが稼働しているときにタイムアウトしますが、単一のインターフェースが稼働している場合は正常に機能します。
# iscsiadm -m discovery -t st -p x.x.x.x iscsiadm: connect to x.x.x.x timed out iscsiadm: connect to x.x.x.x timed out
解決策
この問題は、2 つ以上のイーサネット インターフェイスが同じサブネットに接続されている場合、または iSCSI 接続が特定のインターフェイスを使用するように構成されている場合に発生する可能性があります。このような場合、パケットが間違ったインターフェイスに配信されると、OS は、閉じられたポートまたは間違った宛先に送信されたと見なし、タイムアウトします。この問題を解決するには、次のエラー メッセージが表示されている iSCSI クライアントの両方のインターフェイスで、非対称にルーティングされたパケットを受け入れるように構成する必要があります:
1. sysctl の net.ipv4.conf.all.arp_ignore を 1 に設定して、各インターフェースが自身のアドレスに対する ARP 要求のみに応答するように強制します。または、iscsi ストレージへのパスである各インターフェースの net.ipv4.conf.[INTERFACE].arp_ignore を 1 に設定します。
たとえば、/etc/sysctl.conf で :
# vi /etc/sysctl.conf net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2
または、関連するインターフェースに対してのみ設定するには (それらが eth0 と eth1 であると仮定):
# vi /etc/sysctl.conf net.ipv4.conf.eth0.rp_filter=0 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce=2 net.ipv4.conf.eth1.rp_filter=0 net.ipv4.conf.eth1.arp_ignore = 1 net.ipv4.conf.eth1.arp_announce=2
2. 以下のコマンドを使用して設定を適用します:
# sysctl -p /etc/sysctl.conf
3. 新しい設定が実行中に正常に適用されたかどうかを確認します:
# sysctl -a
4. /var/lib/iscsi/ifaces から古いファイルを削除します:
# rm -rf /var/lib/iscsi/ifaces
これにより、2 つのインターフェースが構成されている場合の iSCSI 検出タイムアウトが解決されます。
CentOS/RHEL 7 の場合
システムに CentOS/RHEL 7 がインストールされている場合は、上記の sysctl パラメーターを /etc/sysctl.d/99-sysctl.conf ファイルに入力し、以下のコマンドを実行して構成ファイルから設定を再読み込みしてください:
# sysctl --system
メモ
この問題は、iSCSI 接続が特定のネットワーク インターフェイスを使用するように構成されている場合に発生する可能性があります。 iscsi パケットが間違ったインターフェイスに配信された場合、Linux はデータが閉じられたポートに送信されたかのように応答し、RST パケットを送信します。受信したデータが間違ったインターフェイスで受信されている限り、接続は切断されたままになり、復元できません。
これは、複数のアダプターが同じサブネットに接続されている場合に発生する可能性があります。デフォルトでは、Linux は、ARP 要求がどのインターフェイスから来たかに関係なく、システムの IP アドレスに対するすべての ARP 要求に応答します。別のインターフェイスが iscsi 接続の IP アドレスに対する ARP 要求に応答すると、トラフィックは間違ったインターフェイスにルーティングされ、接続は失敗します。 arp_ignore を有効にすると、ネットワーク インターフェイスは、自身のアドレスに対する ARP 要求のみに応答するようになります。これにより、誤ったインターフェイスからの ARP 応答が防止され、iSCSI 接続が機能し続けます。