web-dev-qa-db-ja.com

bind:要求されたアドレスを割り当てることができません

最近、RackspaceからAWSに切り替えて、 freegeopip を使用してシンプルな位置情報サーバーを設定しています。次のコマンドは新しいラックスペースサーバー(Ubuntu)で完全に機能しますが、AWS(Red HatとUbuntuを試してみました)では機能しません。設定に使用したコードは次のとおりです。

curl -s https://storage.googleapis.com/golang/go1.4.1.linux-AMD64.tar.gz | tar -C /opt -zx
export GOPATH=$HOME
export GOROOT=/opt/go
export PATH=$PATH:/opt/go/bin
go get github.com/fiorix/freegeoip/cmd/freegeoip
$GOPATH/bin/freegeoip -addr="<MY IP ADDRESS>:8080"

私が言ったように、これは私のRackspaceインスタンスで完全に機能しますが、AWSは私にこのエラーを与えます:

listen tcp <MY IP ADDRESS>:8080: bind: cannot assign requested address

このポートをnetstatで確認したところ、何も実行されていません。このエラーが発生する理由はわかりません。何か案は?

6
jwerre

多くの場合、特定のアドレスにのみバインドする特別な理由がない限り、0.0.0.0へのバインドが最善の方法です。

ただし、インスタンスのパブリックIPアドレス(ifconfigを介して)にバインドしようとしているため、IPスタックが認識していないため、実行していることが機能していないと思います。

AWSインスタンスは、ネイティブにプライベートIPアドレスのみを認識しています。これは、バインドする必要があるものです。

インスタンスに関連付けられているEC2(クラシックおよびVPC)インスタンスのパブリックアドレスは、1:1 NAT AWSネットワークインフラストラクチャによってプライベートアドレスに変換されます。

5

AWSは、インスタンスとインターネット間でネットワークアドレス変換を実行します。そのため、AWSインスタンスはIPアドレス08.08.08.0808で到達できる可能性がありますが、サーバーは実際には88.88.88.88を使用するように構成されています。私がしなければならないことは、ifconfigで見つけたサーバーの内部IPにバインドすることでした。

1
jwerre