bind: не может назначить запрошенный адрес

Я недавно переключился на AWS с Rackspace и настраиваю простой геолокационный сервер с помощью freegeopip. Хотя следующие команды отлично работают на новом сервере Rackspace (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, и на нем ничего не работает. Я понятия не имею, почему я получаю эту ошибку. Есть идеи?

2 ответа

Во многих случаях привязка к 0.0.0.0 - лучший способ действий, если только у вас нет особой причины привязывать только к определенному адресу.

Но я предполагаю, что то, что вы делаете, не работает, потому что вы пытаетесь привязать публичный IP-адрес экземпляра, который вы найдете (через ifconfig) Ваш стек IP не знает.

Экземпляры AWS знают только свой частный IP-адрес, к которому нужно привязаться.

Общедоступные адреса экземпляров EC2 (классический и VPC), связанные с экземплярами, представляют собой NAT 1: 1, преобразованный в частный адрес сетевой инфраструктурой AWS.

AWS выполняет трансляцию сетевых адресов между вашим экземпляром и Интернетом. Таким образом, экземпляр AWS может быть доступен по IP-адресу 08.08.08.0808, однако сервер фактически настроен на использование 88.88.88.88. Что мне нужно сделать, так это привязать внутренний IP-адрес сервера, который я нашел с помощью ifconfig.

Другие вопросы по тегам