1 votes

Ubuntu Server - Interface Réseau "Virtuel" avec Accès Internet

J'ai un serveur Ubuntu 18.04 avec une seule interface réseau public (eth0). J'essaie de créer des interfaces réseau supplémentaires "virtuelles" qui pourront également accéder à Internet avec des règles NAT configurées.

J'ai créé une interface virtuelle en utilisant les commandes suivantes :

ip link add type veth

ifconfig veth0 192.168.1.1

Voici la sortie de mon ifconfig :

eth0: flags=4163  mtu 1500
    inet 10.0.0.1  masque 255.255.255.0  diffusion 10.0.0.255
    adresse ether f2:3c:92:1f:2a:62  txqueuelen 1000  (Ethernet)
    Paquets RX 85664  octets 111561237 (111.5 Mo)
    Erreurs RX 0  abandon 0  overruns 0  trames 0
    Paquets TX 15392  octets 2229468 (2.2 Mo)
    Erreurs TX 0  abandon 0  overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
    inet 127.0.0.1  masque 255.0.0.0
    loop  txqueuelen 1000  (Boucle locale)
    Paquets RX 1385  octets 213213 (213.2 Ko)
    Erreurs RX 0  abandon 0  overruns 0  trames 0
    Paquets TX 1385  octets 213213 (213.2 Ko)
    Erreurs TX 0  abandon 0  overruns 0  carrier 0  collisions 0

veth0: flags=4163  mtu 1500
    inet 192.168.1.1  masque 255.255.255.0  diffusion 192.168.1.255
    adresse ether a6:e7:de:40:9a:28  txqueuelen 1000  (Ethernet)
    Paquets RX 27  octets 2082 (2.0 Ko)
    Erreurs RX 0  abandon 0  overruns 0  trames 0
    Paquets TX 1132  octets 48520 (48.5 Ko)
    Erreurs TX 0  abandon 0  overruns 0  carrier 0  collisions 0

J'ai mis "/proc/sys/net/ipv4/ip_forward" à 1 :

$ cat /proc/sys/net/ipv4/ip_forward

1

J'ai également essayé de nombreuses règles iptables MASQUERADE, FORWARD et NAT mais je n'arrive pas à obtenir l'accès à Internet depuis veth0.

Lorsque je fais un ping sur 192.168.1.1 depuis l'interface veth0, tout fonctionne :

$ ping -I veth0 192.168.1.1

PING 192.168.1.1 (192.168.1.1) depuis 192.168.1.1 veth0 : 56(84) octets de données.
64 octets depuis 192.168.1.1 : icmp_seq=1 ttl=64 temps=0.029 ms
64 octets depuis 192.168.1.1 : icmp_seq=2 ttl=64 temps=0.046 ms
64 octets depuis 192.168.1.1 : icmp_seq=3 ttl=64 temps=0.085 ms
64 octets depuis 192.168.1.1 : icmp_seq=4 ttl=64 temps=0.062 ms
64 octets depuis 192.168.1.1 : icmp_seq=5 ttl=64 temps=0.061 ms
--- 192.168.1.1 statistiques ping ---
5 paquets transmis, 5 reçus, perte 0%, temps 4097ms
rtt min/moy/max/ecart = 0.029/0.056/0.085/0.020 ms

Cependant, si j'essaie de faire un ping sur l'adresse IP de l'interface eth0 depuis veth0, je n'ai aucune réponse :

$ ping -I veth0 10.0.0.1

PING 10.0.0.1 (10.0.0.1) depuis 192.168.1.1 veth0 : 56(84) octets de données.
--- 10.0.0.1 statistiques ping ---
39 paquets transmis, 0 reçus, perte 100%, temps 38900ms

Voici la sortie de ma commande route :

Destination     Passerelle     Masque réseau    Indic  Met  Ref  Util  Interface
par défaut         gw-li832.linode 0.0.0.0         UG    0      0        0 eth0
xx.xx.xx.xx     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 veth0

Je n'arrive pas à comprendre ce que je fais de mal et toute aide serait appréciée.

0voto

RogueKnight Points 11

J'ai pu résoudre cela en suivant le guide suivant :

https://josephmuia.ca/2018-05-16-net-namespaces-veth-nat/

En gros, j'ai dû créer deux paires d'interfaces veth et en attacher une à un nouveau espace de noms réseau. Les commandes suivantes ont accompli cela :

Tout d'abord, j'ai activé la redirection IP avec ce qui suit :

echo 1 > /proc/sys/net/ipv4/ip_forward

Ensuite, j'ai créé un nouvel espace de noms réseau (netns0) et j'y ai attaché un nouvel adaptateur loopback. Cela ne fonctionnera pas sans cette étape :

ip netns add netns0
ip netns exec netns0 ip link set lo up

Ensuite, j'ai créé deux paires de veth. Elles fonctionnent essentiellement comme deux extrémités d'une ligne Ethernet. Une extrémité reste sur le réseau principal et l'autre est connectée à l'espace de noms réseau :

ip link add veth0a type veth peer name veth0b
ip link set veth0b netns netns0

Ensuite, j'ai défini des adresses IP pour chaque interface de la paire et les ai activées :

ip addr add 192.168.0.1/24 dev veth0a
ip netns exec netns0 ip addr add 192.168.0.2/24 dev veth0b
ip link set veth0a up
ip netns exec netns0 ip link set veth0b up

Les règles iptable suivantes ont permis la redirection et le NAT :

iptables -A FORWARD -o eth0 -i veth0a -j ACCEPT
iptables -A FORWARD -i eth0 -o veth0a -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.2/24 -o eth0 -j MASQUERADE

La commande suivante définit une route par défaut pour l'espace de noms. C'est essentiel pour communiquer avec le réseau principal :

ip netns exec netns0 ip route add default via 192.168.0.1

Enfin, j'ai créé un fichier resolv.conf spécifique à l'espace de noms avec mes serveurs DNS. C'est essentiel pour les résolutions de noms de domaine depuis l'espace de noms réseau :

mkdir -p /etc/netns/netns0
echo "nameserver 1.1.1.1" > /etc/netns/netns0/resolv.conf

Après ces étapes, je suis capable de communiquer avec Internet en utilisant l'espace de noms réseau :

$ ip netns exec netns0 ping google.com

PING google.com (172.217.10.238) 56(84) bytes of data.
64 bytes from lga25s59-in-f14.1e100.net (172.217.10.238): icmp_seq=1 ttl=57 time=2.50 ms
64 bytes from lga25s59-in-f14.1e100.net (172.217.10.238): icmp_seq=2 ttl=57 time=1.44 ms
64 bytes from lga25s59-in-f14.1e100.net (172.217.10.238): icmp_seq=3 ttl=57 time=1.39 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.392/1.779/2.505/0.514 ms

Utiliser "ip netns exec netns0 (COMMANDE)" vous permet d'exécuter des commandes avec cet espace de noms.

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