INDEX
Comment sont associées les adresses statiques (Elastic IP) sur EC2 ?
- Une IP publique est attribuée
- Elle doit être attachée à une interface (par ex
eth0
) - L’interface a une IP privée
- L’OS est configuré en DHCP
- L’OS n’a pas « conscience » de ses IP publiques
- Amazon effectue une translation NAT des IP publiques sur les IP privées
La première adresse IP
L’instance EC2 est toujours en DHCP.
Il n’est pas souhaitable / possible d’avoir une instance EC2 avec une configuration réseau statique.
État initial
ubuntu@ip-172-31-29-222:~$ ifconfig eth0 Link encap:Ethernet HWaddr 02:fa:fc:ff:48:c7 inet addr:172.31.29.222 Bcast:172.31.31.255 Mask:255.255.240.0 inet6 addr: fe80::fa:fcff:feff:48c7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 RX packets:735 errors:0 dropped:0 overruns:0 frame:0 TX packets:559 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:70831 (70.8 KB) TX bytes:87908 (87.9 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:1519 errors:0 dropped:0 overruns:0 frame:0 TX packets:1519 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:300162 (300.1 KB) TX bytes:300162 (300.1 KB)
Deuxième adresse IP sur l’interface eth0
Temporaire :
sudo ifconfig eth0:0 172.31.24.195 up ping 172.31.24.195
Permanente :
sudo nano /etc/network/interfaces.d/eth0.cfg # The primary network interface auto eth0 iface eth0 inet dhcp # Deuxième adresse statique dans un environnement DHCP auto eth0:0 iface eth0:0 inet static address 172.31.24.195 sudo service networking restart
Même port, 2 IP différentes
Cas typique de conflit pour Nginx…
[emerg] 24859#0: a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites-enabled/italic:23
…et Apache, qui écoutent tous les deux le port 80 :
(99)Cannot assign requested address: AH00072: make_sock: could not bind to address 0.0.0.0:80
Configuration de Nginx sur l’IP publique numéro 1
Le serveur doit écouter sur l’IP privée attachée à eth0
:
sudo nano /etc/nginx/sites-available/italic server { listen 172.31.29.222:80 default_server; server_name ec2-54-76-16-111.eu-west-2.compute.amazonaws.com; server_tokens off; root /var/www/italic/public_html; ... } sudo service nginx restart * Restarting nginx nginx [ OK ]
Configuration d’Apache sur l’IP publique numéro 2
Le serveur doit écouter sur l’IP privée attachée à eth0:0
:
sudo nano /etc/apache2/sites-available/000-default.conf <VirtualHost 172.31.24.195:80> # Inutile de préciser le servername sur le vhost par défaut #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html ... </VirtualHost> ubuntu@ip-172-31-29-222:~$ sudo service apache2 restart * Restarting web server apache2 [ OK ]
Si les adresses IP ne peuvent pas être assignées
Les services ne les associent pas, parce qu’ils ne les voient pas.
Je rappelle que l’instance EC2 est aveugle sur les IP qui sont attachées à ses interfaces.
De plus les IP publiques sont nattées.
En cas de refus du service d’associer l’IP non-locale, modifiez /etc/sysctl.conf
# allow processes to bind to the non-local address net.ipv4.ip_nonlocal_bind = 1
Puis :
sysctl -p /etc/sysctl.conf
C’est maintenant OK pour indiquer une IP privée dans la config du service.