事象
curlコマンドにて外部システムに対してリクエストを発行するも以下のエラーとなる。
$ curl 10.X.X.X -v * About to connect() to 10.X.X.X port 80 (#0) * Trying 10.X.X.X... * Failed to connect to 10.X.X.X: Cannot assign requested address * couldn't connect to host at 10.X.X.X:80 * Closing connection 0 curl: (7) Failed to connect to 10.X.X.X: Cannot assign requested address
環境情報
$ curl --version curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.44 zlib/1.2.7 libidn/1.28 libssh2/1.8.0
原因/解決策
送信元ポートとして管理されているローカルのポートを全て使い切っていた。
同値はsysctlコマンドで確認できるので
# sysctl net.ipv4.ip_local_port_range net.ipv4.ip_local_port_range = 32768 60999
必要に応じてsysctl用の設定ファイルにてレンジを変更した上で
# vi /etc/sysctl.conf
新たな値を実機に反映させると解消する。
# sysctl -p
以下、補足です。
補足
実機上で該当ポートが利用中か否かはnetstatコマンドで確認ができます。
# netstat -atn
ここで既に通信自体は終了していても以下の様に表示されている場合は該当のポートは利用ができません。
tcp 0 0 y.y.y.y:60929 x.x.x.x.x:80 TIME_WAIT
尚、同コマンドが表題のメッセージで失敗した場合は接続先にはTCPコネクションの確立を含めたパケットは何も送付されません。
以上です。