Ce problème me gêne depuis quelques jours et je ne trouve pas de solution. Désolé pour le titre étrange. Ce n'est pas mon domaine de travail principal et je n'ai pas trouvé de meilleur titre pour le moment.
Quelques faits :
- Je suis un utilisateur sur un environnement openstack partagé
- Je ne peux pas voir ou modifier la configuration de l'installation openstack sous-jacente.
- Les machines virtuelles sont configurées via cloud-init, qui installe Python-minimal, crée un utilisateur et effectue une analyse de l'environnement.
apt-get dist-upgrade
. En outre, ils sont configurés via DHCP avec une IP statique. - Je n'ai configuré aucun
iptables
sur les nœuds.
Permettez-moi donc de vous décrire l'installation :
J'ai créé un réseau+sous-réseau (10.0.30.10/24). Le réseau est attaché à un routeur qui contient deux routes statiques. J'ai également créé deux VM (toutes deux ubuntu 16.04.2 LTS) qui ont reçu leur IP "principale" (node0 : 10.0.30.10/24 et node1 : 10.0.30.11/24) ainsi qu'une seconde IP dans un sous-réseau différent (node0 : 10.10.10.2/24 et node1 : 10.10.20.2/24).
J'ai également configuré deux routes statiques sur le routeur qui transmettent tout pour 10.10.10.0/24
vers node0 et tout pour 10.10.20.0/24
au nœud 1.
+----------------------------------------+
| test-router |
| IP: 10.0.30.1/24 |
| |
| Static routes: |
| - destination_cidr = "10.10.10.0/24" |
| next_hop = "10.0.30.10" |
| - destination_cidr = "10.10.20.0/24" |
| next_hop = "10.0.30.11" |
+----------------------------------------+
|
|
+------------------------+
| test-network |
| Subnet: 10.0.30.0/24 |
| Router: 10.0.30.1 |
+------------------------+
|
|
| +---------------------+
| | node0 |
+-------+ IP: 10.0.30.10/24 |
| | 10.10.10.2/24 |
| +---------------------+
|
| +---------------------+
| | node1 |
+-------+ IP: 10.0.30.11/24 |
| 10.10.20.2/24 |
+---------------------+
Une fois les deux VMs démarrées, j'observe ce qui suit :
Node0
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.30.1 0.0.0.0 UG 0 0 0 ens3
10.0.30.0 * 255.255.255.0 U 0 0 0 ens3
169.254.169.254 10.0.30.100 255.255.255.255 UGH 0 0 0 ens3
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:16:3e:31:67:52 brd ff:ff:ff:ff:ff:ff
inet 10.0.30.10/24 brd 10.0.30.255 scope global ens3
valid_lft forever preferred_lft forever
inet 10.10.10.2/24 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe31:6752/64 scope link
valid_lft forever preferred_lft forever
$ ping -c10 10.10.20.2
PING 10.10.20.2 (10.10.20.2) 56(84) bytes of data.
From 10.0.30.1: icmp_seq=2 Redirect Host(New nexthop: 10.0.30.11)
From 10.0.30.1: icmp_seq=3 Redirect Host(New nexthop: 10.0.30.11)
--- 10.10.20.2 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 8999ms
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.30.1 0.0.0.0 UG 0 0 0 ens3
10.0.30.0 * 255.255.255.0 U 0 0 0 ens3
10.10.10.0 * 255.255.255.0 U 0 0 0 ens3
169.254.169.254 10.0.30.100 255.255.255.255 UGH 0 0 0 ens3
Pendant ce temps, sur le nœud 1
# tcpdump icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
09:25:55.451876 IP 10.0.30.10 > 10.10.20.2: ICMP echo request, id 1271, seq 1, length 64
09:25:55.451928 IP 10.10.20.2 > 10.0.30.10: ICMP echo reply, id 1271, seq 1, length 64
09:25:56.451467 IP 10.0.30.10 > 10.10.20.2: ICMP echo request, id 1271, seq 2, length 64
09:25:56.451503 IP 10.10.20.2 > 10.0.30.10: ICMP echo reply, id 1271, seq 2, length 64
09:25:57.451185 IP 10.0.30.10 > 10.10.20.2: ICMP echo request, id 1271, seq 3, length 64
09:25:57.451218 IP 10.10.20.2 > 10.0.30.10: ICMP echo reply, id 1271, seq 3, length 64
[..]
09:26:03.450910 IP 10.0.30.10 > 10.10.20.2: ICMP echo request, id 1271, seq 9, length 64
09:26:03.450943 IP 10.10.20.2 > 10.0.30.10: ICMP echo reply, id 1271, seq 9, length 64
09:26:04.450988 IP 10.0.30.10 > 10.10.20.2: ICMP echo request, id 1271, seq 10, length 64
09:26:04.451022 IP 10.10.20.2 > 10.0.30.10: ICMP echo reply, id 1271, seq 10, length 64
Ma conclusion est donc la suivante : le nœud 1 reçoit le trafic mais la réponse n'arrive pas jusqu'au nœud 0.
La même chose se produit si je démarre un serveur web sur node1 et que j'essaie de l'ouvrir via l'IP routée statiquement. Je vois le trafic arriver sur node1 mais la réponse n'arrive jamais sur node0.
D'autre part : arping
de node0 à node1 fonctionne :
# arping -c3 -i ens3 10.10.20.2
ARPING 10.10.20.2
42 bytes from fa:16:3e:a9:b4:bc (10.10.20.2): index=0 time=7.933 msec
42 bytes from fa:16:3e:a9:b4:bc (10.10.20.2): index=1 time=2.797 msec
42 bytes from fa:16:3e:a9:b4:bc (10.10.20.2): index=2 time=9.703 msec
--- 10.10.20.2 statistics ---
3 packets transmitted, 3 packets received, 0% unanswered (0 extra)
rtt min/avg/max/std-dev = 2.797/6.811/9.703/2.929 ms
Si j'utilise l'IP "principale", tout fonctionne bien.
Ce que j'ai essayé (sur les deux nœuds) :
- Paramètres
/proc/sys/net/ipv4/conf/ens3/rp_filter
a2
y0
(parce que je suis désespéré). Rien n'a changé. - Paramètres
/proc/sys/net/ipv4/ip_forward
a1
. Rien n'a changé. - Paramètres
/proc/sys/net/ipv4/conf/ens3/log_martians
a1
sur les deux nœuds. Aucune sortie viajournalctl -f
quoi que ce soit.
EDIT : Il y a une sortie sur node0 si j'envoie un ping à node1 via l'IP statique :
May 03 11:16:01 node0 kernel: IPv4: Redirect from 10.0.30.1 on ens3 about 10.0.30.11 ignored
Advised path = 10.0.30.10 -> 10.10.20.2
Et comme je suis à court d'idées, j'ai besoin de votre aide. Merci de prendre le temps de vous pencher sur mon problème !