1 votes

Hôte inaccessible si eth0 n'a pas d'IPv4 dans le pont Ethernet

Je tente actuellement de configurer un VPN de pontage Ethernet avec l'utilisation de OpenVPN. Cependant, chaque fois que j'essaie de mettre en place le pont Ethernet, le serveur (Raspberry Pi) perd la connexion du réseau interne. J'utilise le script suivant pour initialiser mon pont Ethernet

#!/bin/bash
# Définir l'interface Ethernet physique à pontifier
# avec les interfaces TAP ci-dessus.
eth="eth0"
eth_ip="192.168.144.200"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.144.255"
eth_gateway="192.168.144.1"
eth_mac="B8:27:EB:48:6D:E3"

# Définir l'interface de pont
br="br0"

# Définir la liste des interfaces TAP à pontifier ensemble
tap="tap0"

#################################
# Configurer un pont Ethernet sur Linux
# Nécessite : bridge-utils
#################################

for t in $tap; do
    openvpn --mktun --dev $t
done

brctl addbr $br
brctl addif $br $eth

for t in $tap; do
    brctl addif $br $t
done

for t in $tap; do
    ifconfig $t 0.0.0.0 promisc up
    iptables -A INPUT -i $t -j ACCEPT
done

iptables -A INPUT -i $br -j ACCEPT
iptables -A FORWARD -i $br -j ACCEPT

ifconfig $eth 0.0.0.0 promisc up
ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast
ip link set $br address $eth_mac
dhclient $br
ifconfig $br promisc up
route add default gw 192.168.144.1

Après avoir débogué toute l'histoire, j'ai découvert que le

ifconfig $eth 0.0.0.0 promisc up

résulte en une perte de connexion. La configuration de l'interface après le pontage est

br0: flags=4163  mtu 1500
    inet 192.168.144.200  netmask 255.255.255.0  broadcast   192.168.144.255
    inet6 fe80::7b9:e278:843e:6f22  prefixlen 64  scopeid 0x20
    ether b8:27:eb:48:6d:e3  txqueuelen 1000  (Ethernet)
    RX packets 147  bytes 23549 (22.9 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 155  bytes 75012 (73.2 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4419  mtu 1500
    inet6 fe80::3abb:5937:1299:3dc5  prefixlen 64  scopeid 0x20
    ether b8:27:eb:48:6d:e3  txqueuelen 1000  (Ethernet)
    RX packets 1590  bytes 208685 (203.7 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 1422  bytes 314068 (306.7 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 18  bytes 1244 (1.2 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 18  bytes 1244 (1.2 KiB)
    TX errors 0  dropped 0  overruns 0  carrier 0  collisions 0

tap0: flags=4355  mtu 1500
    ether 5e:f6:5f:df:6b:10  txqueuelen 100  (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

wlan0: flags=4163  mtu 1500
    inet 192.168.144.150  netmask 255.255.255.0  broadcast 192.168.144.255
    inet6 fe80::9cd2:30b9:74fc:c92d  prefixlen 64  scopeid 0x20
    ether b8:27:eb:1d:38:b6  txqueuelen 1000  (Ethernet)
    RX packets 366  bytes 111524 (108.9 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 156  bytes 30687 (29.9 KiB)
    TX errors 0  dropped 0  overruns 0  carrier 0  collisions 0

Des idées pour résoudre ce problème? En général, seule l'interface de pont doit avoir une adresse IP. Mais si je n'attribue pas d'adresse IP à eht0, la connexion du terminal est interrompue et je ne peux plus me connecter.

Remarque : J'ai déjà vérifié les iptables et net.ipv4.ip_forward est défini sur 1.

1voto

C'est ainsi que j'ai réussi à maintenir la connexion en marche.

J'ai utilisé un script parce que j'étais connecté à distance via eth0 - l'arrêter aurait provoqué la fermeture de la connexion.

Les changements que j'ai apportés, par rapport au script dans la question, étaient 1) de m'assurer que le service DHCP ne fonctionne pas pour éviter qu'il ne (ré-)attribue une adresse IP à eth0 et 2) de vider eth0 pour supprimer les adresses.

# Définir l'interface Bridge
br="br0"

# Définir la liste des interfaces TAP à regrouper,
# par exemple tap="tap0 tap1 tap2".
tap="tap0"

# Définir l'interface Ethernet physique à regrouper
# avec les interfaces TAP ci-dessus.
eth="eth0"
eth_ip="192.168.178.20"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.178.255"
eth_gateway="192.168.178.1"

for t in $tap; do
  openvpn --mktun --dev $t
done

brctl addbr $br
brctl addif $br $eth

# Arrêter dhcpcd s'il fonctionne
systemctl stop dhcpcd

for t in $tap; do
  brctl addif $br $t
done

for t in $tap; do
  ifconfig $t 0.0.0.0 promisc up
done

#ip addr del $eth_ip dev $eth
ip addr flush dev $eth

ifconfig $eth 0.0.0.0 promisc up

ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast
route add default gw $eth_gateway $br

for t in $tap; do
  ifconfig $t up
done
ifconfig $br up

En fonction de vos règles de pare-feu (si vous avez un pare-feu actif), vous voudrez peut-être définir les règles en conséquence (comme ci-dessus).

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