1 votes

Ubuntu 18.04 netplan crée un pont de wifi à ethernet

J'utilise ubuntu 18.04 et je n'ai pas beaucoup d'expérience en matière de réseaux. Ce serveur ubuntu fonctionne sur notre robot et est censé agir comme un pont sans fil vers lan pour le reste des modules câblés du robot. J'ai déjà utilisé des routeurs dd-wrt en mode pont client pour obtenir le même résultat, mais ils sont trop incohérents. Une extension standard avec des ports Ethernet est un peu chère et je voulais donc essayer ceci. J'ai configuré l'interface sans fil en utilisant netplan.

Voici les interfaces réseau de mon serveur, enp2s0 est l'interface ethernet et wlp3s0 est l'interface wifi :

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.10  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::7c0d:f9ff:feb1:68ba  prefixlen 64  scopeid 0x20<link>
        ether 7e:0d:f9:b1:68:ba  txqueuelen 1000  (Ethernet)
        RX packets 3  bytes 138 (138.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39  bytes 5047 (5.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.9.1  netmask 255.255.255.0  broadcast 192.168.9.255
        inet6 fe80::42:a6ff:fee9:59a4  prefixlen 64  scopeid 0x20<link>
        ether 02:42:a6:e9:59:a4  txqueuelen 0  (Ethernet)
        RX packets 1115  bytes 84610 (84.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 843  bytes 77266 (77.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 169.254.32.1  netmask 255.255.255.0  broadcast 169.254.32.255
        ether fc:aa:14:e3:e4:96  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf7e00000-f7e20000  

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.64  netmask 255.255.255.0  broadcast 192.168.0.255
        ether fc:aa:14:e3:e4:94  txqueuelen 1000  (Ethernet)
        RX packets 3  bytes 180 (180.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 216  bytes 14171 (14.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 50687  bytes 11888298 (11.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 50687  bytes 11888298 (11.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethea1fda5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::94b1:bcff:fe80:d58e  prefixlen 64  scopeid 0x20<link>
        ether 96:b1:bc:80:d5:8e  txqueuelen 0  (Ethernet)
        RX packets 558  bytes 50143 (50.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 486  bytes 45921 (45.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethf80ef47: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::d419:a5ff:fe1d:fb02  prefixlen 64  scopeid 0x20<link>
        ether d6:19:a5:1d:fb:02  txqueuelen 0  (Ethernet)
        RX packets 557  bytes 50077 (50.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 486  bytes 45965 (45.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.43  netmask 255.255.255.0  broadcast 192.168.0.255
        ether d8:fc:93:c5:df:aa  txqueuelen 1000  (Ethernet)
        RX packets 6318  bytes 5376431 (5.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4444  bytes 851545 (851.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Voici mon yaml de configuration de netplan :

network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
      dhcp4: no

  wifis:
    wlp3s0:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.0.44/24]
      gateway4: 192.168.0.1
      access-points:
        "leibnitz":
          password: "***********"

  bridges:
   br0:
    dhcp4: no
    addresses: [192.168.0.10/24]
    interfaces: [enp2s0,wlp3s0]
    parameters:
      stp: true
      forward-delay: 4

La partie pont dans le fichier de configuration est principalement un copier-coller d'ici et là sans vraiment comprendre ce qui se passe. Ce que j'ai compris est que cela crée un pont entre les interfaces, et puisque j'ai spécifié que les interfaces à utiliser sont enp2s0 et wlp3s0. Il crée un pont entre les 2 interfaces (Désolé si je me trompe). L'état actuel est que je peux me connecter à Internet via mon interface sans fil, mais je ne peux pas faire un ping au routeur primaire (192.168.0.1) ni à aucun autre ordinateur sur le même sous-réseau. Voici la sortie de brctl show :

bridge name     bridge id               STP enabled     interfaces
br0             8000.7e0df9b168ba       yes             enp2s0
docker0         8000.0242a6e959a4       no              vethea1fda5
                                                        vethf80ef47

Lorsque je connecte un ordinateur (configuré avec une IP statique) à enp2s0, je n'obtiens rien. Je ne peux même pas envoyer un ping à l'ordinateur qui est connecté à enp2s0. Tout conseil ou aide à ce sujet serait le bienvenu.

0voto

Aurélien Points 1311

Ok, donc j'ai réussi à faire fonctionner l'interface de pont maintenant. Voici le fichier yaml de netplan :

network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
      dhcp4: no
      dhcp6: no

  wifis:
    wlp3s0:
      dhcp4: no
      dhcp6: no
      access-points:
        "leibnitz":
          password: ""

  bridges:
   br0:
    dhcp4: no
    dhcp6: no
    addresses: [192.168.0.10/24]
    gateway4: 192.168.0.1
#    routes:
#     - to: 0.0.0.0/0
#       via: 192.168.0.1/24
    interfaces: [enp2s0,wlp3s0]
    mtu: 1500
    nameservers:
      addresses: [8.8.8.8]
    parameters:
      stp: true
      forward-delay: 4

Mais j'ai dû faire quelques configurations supplémentaires afin d'ajouter l'interface sans fil wlp3s0 au pont :

 $ iw dev wlp3s0 set 4addr on

 $ brctl addif br0 wlp3s0

La sortie de brctl show br0 après les étapes ci-dessus :

bridge name     bridge id               STP enabled     interfaces
br0             8000.7e0df9b168ba       yes             enp2s0
                                                        wlp3s0

Après cela, j'ai dû utiliser ebtables pour faire le layer 2 nat, puisque seul wlp3s0 est authentifié avec l'AP (qui est mon routeur primaire).

ebtables -t nat -A POSTROUTING -o wlp3s0 -n snat --to-src  "MAC_OF_WLP3S0" --snat-arp --snat-target ACCEPT

ebtables -t nat -A PREROUTING -p IPv4 -i wlp3s0 --ip-dst 192.168.0.12 -j dnat --to-dst $MAC_OF_CLIENT --dnat-target ACCEPT
ebtables -t nat -A PREROUTING -p ARP -i wlp3s0 --arp-ip-dst 192.168.0.12 -j dnat --to-dst $MAC_OF_CLIENT --dnat-target ACCEPT

192.168.0.12 est l'adresse IP de l'ordinateur client. Veuillez me corriger si ma compréhension des commandes ci-dessus est erronée. La première commande ebtables garantit que chaque paquet sortant de l'interface du pont a l'adresse mac de wlp3s0. Et les 2 commandes suivantes garantissent que lorsqu'un paquet adressé à 192.168.0.12 est reçu sur la chaîne d'entrée, son adresse mac de destination est changée en celle du client du pont.

Maintenant l'interface de pont fonctionne.

$ brctl showmacs br0
port no mac addr                is local?       ageing timer                                                                                                                                         
  2     00:0a:f7:81:da:a3       no                 0.00                                                                                                                                              
  2     24:0a:64:89:33:8d       no               241.86                                                                                                                                              
  2     70:bb:e9:13:b6:03       no                32.02                                                                                                                                              
  1     d8:50:e6:23:32:6b       no                 3.34                                                                                                                                              
  2     d8:fc:93:c5:df:aa       yes                0.00                                                                                                                                              
  2     d8:fc:93:c5:df:aa       yes                0.00                                                                                                                                              
  2     f4:8c:eb:9e:e2:64       no                 0.08                                                                                                                                              
  1     fc:aa:14:e3:e4:94       yes                0.00                                                                                                                                              
  1     fc:aa:14:e3:e4:94       yes                0.00

Je peux faire un ping sur 8.8.8.8 sur l'ordinateur client qui est connecté à l'interface Ethernet du pont. Mais je n'ai pas accès à Internet, je ne peux pas naviguer sur Internet sur le client.

C'est la table de route du client :

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    20100  0        0 enp4s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp4s0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp4s0

C'est la sortie de ifconfig :

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.10  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::7c0d:f9ff:feb1:68ba  prefixlen 64  scopeid 0x20<link>
        inet6 fd01::7c0d:f9ff:feb1:68ba  prefixlen 64  scopeid 0x0<global>
        ether 7e:0d:f9:b1:68:ba  txqueuelen 1000  (Ethernet)
        RX packets 80966  bytes 108616599 (108.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 82286  bytes 10385602 (10.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.9.1  netmask 255.255.255.0  broadcast 192.168.9.255
        inet6 fe80::42:ddff:fe39:8ff0  prefixlen 64  scopeid 0x20<link>
        ether 02:42:dd:39:8f:f0  txqueuelen 0  (Ethernet)
        RX packets 38417  bytes 2933398 (2.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28883  bytes 2575833 (2.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether fc:aa:14:e3:e4:94  txqueuelen 1000  (Ethernet)
        RX packets 3863  bytes 326607 (326.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1662  bytes 125423 (125.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1288744  bytes 205878639 (205.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1288744  bytes 205878639 (205.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth8bdf2aa: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::b834:49ff:fe31:12ac  prefixlen 64  scopeid 0x20<link>
        ether ba:34:49:31:12:ac  txqueuelen 0  (Ethernet)
        RX packets 19226  bytes 1736798 (1.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14559  bytes 1297280 (1.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth9e8287f: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::eccb:eaff:fe68:6b60  prefixlen 64  scopeid 0x20<link>
        ether ee:cb:ea:68:6b:60  txqueuelen 0  (Ethernet)
        RX packets 19191  bytes 1734438 (1.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14593  bytes 1299457 (1.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether d8:fc:93:c5:df:aa  txqueuelen 1000  (Ethernet)
        RX packets 129600  bytes 112940617 (112.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 89885  bytes 13247558 (13.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Voici le fichier yaml de l'ordinateur client :

network:
  version: 2
  renderer: NetworkManager
  ethernets:
   enp4s0:
     dhcp4: no
     dhcp6: no
     addresses: [192.168.0.12/24]
     gateway: 192.168.0.1
     nameservers:
       addresses: [8.8.8.8, 8.8.4.4]

Je ne sais pas si 192.168.0.1 est la bonne passerelle pour le client du pont ou si cela devrait être l'adresse IP du pont. Je sais que le pont est un mécanisme de couche 2 et qu'il est censé être transparent à la couche 3, donc tous les appareils connectés au pont auront la même passerelle que les appareils qui sont connectés à l'AP en dehors du pont.

Comment puis-je connecter la machine cliente à l'Internet ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X