Faire connaitre deux réseaux entre eux

a marqué ce sujet comme résolu.

Bonsoir :) Je m'attarde beaucoup sur Docker et j'ai appris que depuis la 1.9 (ou 1.10) on peut mettre les container sur des réseaux (et donc passer outre le -link à mettre partout). Je me suis dis que c'était super, surtout pour séparer différent node, (le node database n'a pas la même IP que le node front (par exemple)) MAIS, le problème est que je n'arrive pas à router les réseaux entre eux. Voici ma configuration ip sur la machine hôte :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
br-457bd3051251 Link encap:Ethernet  HWaddr 02:42:47:0a:d6:5b
          inet addr:172.14.255.254  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:47ff:fe0a:d65b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:960 (960.0 B)  TX bytes:578 (578.0 B)

br-f39c6ec4c179 Link encap:Ethernet  HWaddr 02:42:c5:0e:d8:1d
          inet addr:172.15.255.254  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:c5ff:fe0e:d81d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480 (480.0 B)  TX bytes:578 (578.0 B)

docker0   Link encap:Ethernet  HWaddr 02:42:4c:00:26:41
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 08:00:27:22:c5:74
          inet addr:192.168.1.45  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe22:c574/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:92 errors:0 dropped:0 overruns:0 frame:0
          TX packets:84 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:10218 (9.9 KiB)  TX bytes:9181 (8.9 KiB)

Le truc c'est que je bloque même après avoir passer l'ip forwarding à 1. J'ai même changer l'ip de broadcast manuellement dans un container mais ça n'a pas marché. (et je dois bien avouer que je fais bien plus de programmation que de réseau et que cela fait plus d'un an que je n'ai pas trop touché aux configuration réseau (les cours à l'IUT étaient très primaire) donc j'ai un peu oublié ^^'

Merci d'avance :)

Dryusdan

Salut !

Tu dois nous expliquer ce que tu essayes de faire si tu veux de l'aide. "ça n'a pas marché" n'est pas une explication.

Tu souhaite communiquer entre qui et qui ? A quoi corresponds :

  • br-457bd3051251

  • br-f39c6ec4c179 (même adresse ip que le précédent, c'est normal ? Normalement c'est interdit)

  • docker0

  • eth0

Montre nous ta table de routage avec la commande route

+1 -0

Tu dois nous expliquer ce que tu essayes de faire si tu veux de l'aide. "ça n'a pas marché" n'est pas une explication.

ça c'est du tout moi ^^' désolé

Tu souhaite communiquer entre qui et qui ?

Je souhaite faire communiquer br-457bd3051251 et br-f39c6ec4c179

A quoi corresponds :

  • br-457bd3051251 a une IP 172.14.255.254. Il s'agit d'une carte virtuel créé par Docker
  • br-f39c6ec4c179 a une IP 172.15.255.254. Il s'agit d'une carte virtuel créé par Docker
  • docker0 est une carte virtuel créé par Docker
  • eth0 carte physique (enfin c'est une virtualbox) elle est connecté au réseau physique 192.168.1.x

Montre nous ta table de routage avec la commande route

Nicox11

La voici :

1
2
3
4
5
6
7
8
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         livebox.home    0.0.0.0         UG    0      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.14.0.0      *               255.255.0.0     U     0      0        0 br-457bd3051251
172.15.0.0      *               255.255.0.0     U     0      0        0 br-f39c6ec4c179
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0

le docker-compose.yml pourrait peut-être aider ^^'

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
version: '2'
services:
 mysql:
  image: mysql
  container_name: mysql
  ports:
  - "3316:3306"
  volumes:
  - /data/mysql:/var/lib/mysql
  environment:
  - MYSQL_ROOT_PASSWORD=okpwmeeou
  # network 172.15.200.1 : 200 -> 219 : database node 
  networks:
   back:
    ipv4_address: 172.15.200.1
  restart: always
 git:
  image: gogs/gogs
  container_name: git
  ports:
  - "2022:22"
  - "8080:3000"
  volumes:
  - /var/gogs:/data
  depends_on: 
  - mysql
  # network 172.15.200.2 : 220 -> 225 : app back-node
  networks:
   front:
    ipv4_address: 172.14.200.2
  restart: always
  #privileged: true
  #command: ifconfig eth0 broadcast 172.14.255.254

 proxy:
  image: wonderfall/nginx
  ports:
  - "80:8000"
  - "443:4430"
  volumes:
  - /docker/proxy/sites-enabled:/sites-enabled
  - /docker/proxy/conf:/conf.d
  - /docker/proxy/log:/var/log/nginx
  - /docker/proxy/certs:/certs
  - /docker/proxy/passwd:/passwds
  - /docker/proxy/www:/www
  container_name: nginx-proxy
  restart: always
  networks:
   front:
    ipv4_address: 172.14.200.1
   back

networks:
 back:
  driver: bridge
  driver_opts:
   com.docker.network.enable_ipv6: "true"
  ipam:
   driver: default
   config:
   - subnet: 172.15.200.0/16
     ip_range: 172.15.255.0/24
     gateway: 172.15.255.254
 front:
  driver: bridge
  driver_opts:
   com.docker.network.enable_ipv6: "true"
  ipam:
   driver: default
   config:
   - subnet: 172.14.200.0/16
     ip_range: 172.14.255.0/24
     gateway: 172.14.255.254
+0 -0

En effet j'avais mal regardé les adresses :P

Je ne vois pas de soucis pour faire communiquer br-457bd3051251 et br-f39c6ec4c179. Essaye un ping pour voir :

ping -I br-457bd3051251 172.15.255.254

Si ça passe, et ça devrait être le cas, c'est que le problème si situe à plus haut niveau, donc surement applicatif. Je ne pourrais pas t'aider plus vu que je ne connais pas docker.

+0 -0

Elles sont presque identique je te l'accorde ^^

Sinon ça ne fonctionne pas ^^'

1
2
3
4
5
ping -I br-457bd3051251 172.15.255.254
PING 172.15.255.254 (172.15.255.254) from 172.14.255.254 br-457bd3051251: 56(84) bytes of data.
From 172.14.255.254 icmp_seq=1 Destination Host Unreachable
From 172.14.255.254 icmp_seq=2 Destination Host Unreachable
From 172.14.255.254 icmp_seq=3 Destination Host Unreachable

Ha :/ car chaque container arrive à contacter les deux adresses ci dessous mais pas une autre IP du réseau différents ^^

Cela pourrait venir du fait que c'est des réseaux virtuel ou de docker ? ☺

+0 -0

J'aimerai faire ça : Réseau souhaité

Mais tu as soulevé un détail important, les IPs demandé sont public (sur un des container je ping 8.8.8.8 sans problème). J'avais pas du tout pensé à ça ^^'

As tu une idée de comment éviter ce problème ? :)

EDIT : Me connaissant, est-ce que ce format d'IP la: 172.20.200.0/16 peut contenir des IP allant de 172.20.200.1 à 172.20.255.254 ? (à ce que j'ai compris oui mais… ^^ )

EDIT2 : Je viens de passer mais IP en privée voici de nouveau l'ifconfig:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
br-e82dad782f16 Link encap:Ethernet  HWaddr 02:42:24:0d:97:88
          inet addr:172.19.255.254  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:24ff:fe0d:9788/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:47 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3236 (3.1 KiB)  TX bytes:1264 (1.2 KiB)

br-ed70ee9dc7ae Link encap:Ethernet  HWaddr 02:42:81:15:6c:ee
          inet addr:172.20.255.254  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:81ff:fe15:6cee/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:379 errors:0 dropped:0 overruns:0 frame:0
          TX packets:381 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:360294 (351.8 KiB)  TX bytes:37475 (36.5 KiB)

docker0   Link encap:Ethernet  HWaddr 02:42:fe:dc:b0:f7
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 08:00:27:22:c5:74
          inet addr:192.168.1.45  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe22:c574/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9427 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5511 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:806980 (788.0 KiB)  TX bytes:1235316 (1.1 MiB)

Et la table route:

1
2
3
4
5
6
7
8
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         livebox.home    0.0.0.0         UG    0      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0
172.19.0.0      *               255.255.0.0     U     0      0        0 br-e82dad782f16
172.20.0.0      *               255.255.0.0     U     0      0        0 br-ed70ee9dc7ae
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
+0 -0

Mais tu as soulevé un détail important, les IPs demandé sont public (sur un des container je ping 8.8.8.8 sans problème).

Je ne comprends pas ce que tu veux dire par "les IP demandées".

As tu une idée de comment éviter ce problème ? :) EDIT : Me connaissant, est-ce que ce format d'IP la: 172.20.200.0/16 peut contenir des IP allant de 172.20.200.1 à 172.20.255.254 ? (à ce que j'ai compris oui mais… ^^ )

En général, lorsqu'on fait des tests chez soi, on utilise des IP privées, que n'importe qui peut utiliser sans causer de problème. Là, si tu restes en IP publique, tes hôtes ne pourrons pas accéder aux hôtes ayant réellement l'IP publique choisie.

Pour répondre à ta question, oui tu peux utiliser la plage 172.20.0.0/16. Mais elle contiendra les IP de 172.20.0.0 à 172.20.255.255, moins les quelques adresses réservées (réseau, broadcast).

EDIT2 : Je viens de passer mais IP en privée voici de nouveau l'ifconfig:

C'est l'ifconfig de quel hôte ? J'ai bien une idée, mais je veux que tu me confirmes.

Par contre, si j'ai bien compris, tu as un conteneur avec deux cartes réseau ? Ou il y a deux conteneurs distincts ?

C'est l'ifconfig de l'hôte principal, celui qui héberge les containers :)
J'ai aucun container avec deux cartes, j'ai le réseau front et le réseau back (nginx et database en gros), le réseau créer par docker par défaut.
J'entendais par ip demandé "ip attribué" erreur de langue ^^

Sauf que (à ce que j'ai compris) la doc officiel parle de créer un routeur entre plusieurs machine via un réseau virtualbox (donc avec virtualbox) et docker-machine. Cela prend plus de ressource. Mais il ne parle pas de routeur entre deux réseau virtuel.
Pour moi le soucis viens de la machine hôte qui ne parvient pas à faire routeur

Je pense que se sont tes réseaux docker qui ne sont pas configuré, par défaut il permet d'aller sur le net et c'est tout (je crois).

Par exemple chez moi:

route -n

1
2
3
4
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 enp5s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 enp5s0

enp5s0 c'est ma carte réseau et docker0 le routeur virtuel de Docker (point d'entrée/sortie du réseau bridge)

docker network ls

1
2
3
4
NETWORK ID          NAME                DRIVER
3bfbe19b670e        bridge              bridge              
5a5b6629bb71        host                host                
b0d51331132c        none                null 

Le réseau par défaut de docker est bridge, si je regarde ça conf:

docker network inspect bridg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[
    {
        "Name": "bridge",
        "Id": "3bfbe19b670e1c542ef3353f0c555caa62ab324127cf395d37cfd0698a892afa",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "8298c45170fe542dfe9eae510373e11641375c095fafc863ca0bac6c814cbe5a": {
                "Name": "stoic_meninsky",
                "EndpointID": "94d8dcf15564adc43d7a30214c8862995aae7ea097a8bf34daa6a03ec567254d",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

Vérifie la conf des autres réseaux Docker, quand j'avais crée un réseau Docker, j'avais eu un problème similaire car j'avais pas mis une option à true (J'avais fini par utiliser bridge )

Avec docker network inspect docker_back

J'obtiens:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[
    {
        "Name": "docker_back",
        "Id": "e82dad782f16f8d0798c2fa80ecf984daeaf8240bece27b8c97e02e690a9951d",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.200.0/16",
                    "IPRange": "172.19.255.0/16",
                    "Gateway": "172.19.255.254"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "e66ae763920d8c270480df69a8eadd52c515f7b1e9c1b2674b215e6f5dd06756": {
                "Name": "mysql.db",
                "EndpointID": "085b8c160d8a088293683f829799705c163583c9a4b4881bddafff113339e22b",
                "MacAddress": "02:42:ac:13:c8:01",
                "IPv4Address": "172.19.200.1/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.enable_ipv6": "true"
        },
        "Labels": {}
    }
]

Et avec docker network inspect docker_front

J'obtiens:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[
    {
        "Name": "docker_front",
        "Id": "ed70ee9dc7ae35c24ed148aceff664d76afa9a1b8e77d89d6967a92120cf7635",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.20.200.0/16",
                    "IPRange": "172.20.255.0/16",
                    "Gateway": "172.20.255.254"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "26acaf7f58918c72ff28b3ba9406f22b473f28dca0ce391deecff0336e11fc03": {
                "Name": "nginx-proxy",
                "EndpointID": "1e21d8911b7f733896b3d6686943a08e5ebc0af5d1a40aeaf2ec37fd90f4622f",
                "MacAddress": "02:42:ac:14:c8:01",
                "IPv4Address": "172.20.200.1/16",
                "IPv6Address": ""
            },
            "a7c19d773a4f5372aa6554723f460d2a87a2c7e843dbde77034328b882110254": {
                "Name": "git",
                "EndpointID": "5d143a458a1c419aec0748f7aa62b9c46b680e7b393fd5b5425912799bafbd78",
                "MacAddress": "02:42:ac:14:c8:02",
                "IPv4Address": "172.20.200.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.enable_ipv6": "true"
        },
        "Labels": {}
    }
]

Cela voudrait-dire que je dois utiliser un driver spécifique conçu à la main (comme c'est possible ^^ ) ?

EDIT: quelques choses me dit que tu as modifié le paramètre internal ;) mais je ne sais pas comment le modifier par défaut (il y a le flag internal ) et docker-compose ne veut pas avoir ce paramètre en stock :( )

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte