Espace de noms réseau Linux

introduction

J'ai pensé que je l'écrirais pour la production de connaissances. L'un des éléments qui composent une technologie de virtualisation de type conteneur telle que Docker est Network Namespace Vous pouvez créer un ordinateur virtuel indépendant du réseau du système en exigeant simplement des opérations de ligne de commande.

Démarrez Ubuntu 18.04 LTS. Entrez la commande suivante dans le terminal. Il s'agit d'une commande pour installer les packages nécessaires aux travaux ultérieurs. Cela vous permettra d'installer les packages requis.

Terminal


$ sudo apt-get update
$ sudo apt-get -y install

Qu'est-ce que TCP / IP?

TCP(Transmission Control Protocol) IP(Internet Protocol)

Le nom du protocole que vous utilisez quotidiennement.

Dans le monde informatique comme dans le monde réel Il existe un mécanisme pour garantir que les bagages (données) arrivent correctement au moment de leur livraison.

Qu'est-ce qu'une adresse IP?

Avec un protocole appelé Internet Protocol Un type d'identifiant nécessaire pour communiquer, comme une adresse sur Internet

Qu'est-ce qu'une interface réseau?

Câble LAN, carte d'interface réseau (NIC) ou adaptateur LAN sans fil Représente. Cependant, il s'agit d'un concept abstrait lorsqu'il s'agit de les traiter à partir d'un logiciel.

Qu'est-ce que IPv4 / IPV6?

IPv4 / 6 (Internet Protocol version 4 / 6 )

Le monde dans lequel nous sommes maintenant. __2 Il y a maintenant deux internets complètement séparés __ Étant donné qu'IPv4 / IPv6 sont utilisés comme protocoles, ils ne sont pas compatibles.

--Adresse IPv4 pour IPv4
--Si c'est IPv6, il est nécessaire d'utiliser l'adresse IPv6.

IPv4 est de 32 bits (4 bits), tandis que IPv6 est de 128 bits (16 octets) Comme le nombre de nouveaux modèles pouvant être utilisés diminue avec la propagation, la migration vers IPv6 est en cours de tentative.

(Supplément)

Possède une adresse IP et est connecté au réseau Les ordinateurs qui ne sont pas des routeurs sont appelés «hôtes»

Connecté à un réseau indiscernable tel qu'un hôte ou un routeur Le nom de l'ordinateur est Node


opération

$ ip address show

Terminal


$ ip address show
1:  lo:<LOOPBACK,UP,LOWER_UP> mtu XXXXX qdisc noqueue state UNKNOWN group default qlen XXXX
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 000.X.X.X/X scope host lo 
        valid_lft forever preferred_lft forever 
    inet6 ::X/XXX scope host
        valid_lft forever preferred_lft forever
2:  eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu XXXX qdisc fq_codel state UP group default qlen XXXX 
    link/ether XX:XX:Xx:XX:XX:XX brd ff:ff:ff:ff:ff:ff 
    inet 00.X.X.XX/XX brd XX.X.X.XXX scope global dynamic eth0 
        valid_lft XXXXXsec preferred_lft XXXXXsec 
    inet6 xxXX::XXX:Xxxx:xxXX:XXXX/XX scope link 
        valid_lft forever preferred_lft forever

La partie après l'affichage de ʻinet est l''adresse IP de l'ordinateur «lo» et «eth0» sont des «interfaces réseau» ʻEth0` est l'adresse IP correspondant à l'expéditeur

Les adresses IP sont données aux interfaces réseau selon les besoins, c'est

Adresse de bouclage

L'adresse IP «000.X.X.X» de «lo» est une adresse spéciale appelée «adresse de bouclage» Représente votre propre adresse Pratique à utiliser lorsque vous souhaitez communiquer uniquement avec vous-même, comme vérifier le fonctionnement

Essayez-le ($ ping -c 3 <votre adresse de bouclage>) Vous pouvez voir que le résultat est renvoyé comme si vous appuyez sur la commande


$ sudo tcpdump

Terminal


$ sudo tcpdump -tn -I any icmp
Tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
Listening on any,  link-type LINUX_SLL (Linix cooked), capture size XXXXXX bytes

IP XX.X.X.XX > 8.8.8.8 : ICMP echo request, id XXXX, seq 1, lenght 64
IP 8.8.8.8 > XX.X.X.XX : ICMP echo reply, id XXXX, seq 1, lenght 64
IP XX.X.X.XX > 8.8.8.8 : ICMP echo request, id XXXX, seq 2, lenght 64
IP 8.8.8.8 > XX.X.X.XX : ICMP echo reply, id XXXX, seq 2, lenght 64
IP XX.X.X.XX > 8.8.8.8 : ICMP echo request, id XXXX, seq 3, lenght 64
IP 8.8.8.8 > XX.X.X.XX : ICMP echo reply, id XXXX, seq 3, lenght 64

Une commande qui vous permet de regarder dans la communication qui traverse l'ordinateur __ Capture de paquets __, __ Sniffing __ Après avoir tapé $ ping, si vous regardez le terminal du côté $ sudo tcpdump Vous pouvez confirmer qu'il y a eu 3 réponses aux demandes d'échange


$ traceroute

Terminal


$ traceroute -n 8.8.8.8
Trace route to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1  XX.X.X.X 0.568ms  0.562ms  1.044ms
2  XXX.XX.X.X 4.495ms  4.499ms  4.703ms
3  XX.X.X.XX 11.304ms 11.319ms 11.305ms
4  XX.X.X.XX  12.111ms 11.811ms  12.097ms
……

Une commande pour vérifier la route qu'un paquet prend pour atteindre sa destination La route à passer est la Route à passer Cette commande est souvent utilisée pour le dépannage du réseau

Route Équipement réseau L'adresse IP affichée sur chaque ligne est l'adresse IP que le paquet a passé Adresse IP du routeur

Il existe de nombreux routeurs sur Internet pour envoyer des paquets Vous pouvez voir qu'il est composé de relais de godet


Qu'est-ce qu'une table de routage?

Dans le monde de TCP / IP, la prochaine partie à laquelle un paquet doit être passé est gérée par le concept de «table de routage». Vous pouvez vérifier la table de routage avec une commande

$ ip route show

Terminal


$ ip route show 
Default via XX.X.X.X dev eth0 proto dhcp src XX.X.X.XX metric XXX
XX.X.X.X/XX dev eth0 proto kernel scope link src XX.X.X.XX
XX.X.X.X dev eth0 proto dhcp scope link src XX.X.X.XX metric XXX

Premièrement, la table de routage se compose de plusieurs «entrées de routage» Chaque ligne est une entrée de routage L'adresse IP de destination est écrite au début de chaque entrée de routage La destination par défaut est une destination spéciale et est utilisée lorsqu'aucune des autres ne correspond à la destination

XX.X.X.X / XX sur la 3ème ligne est une méthode de représentation qui résume plusieurs adresses IP De cette manière, la table de routage utilise l'adresse IP de destination. Pas nécessairement écrit un par un


$ ping

Terminal


$ ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56 (84) bytesofdata.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=9.06 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=8.88 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=10.3 ms

8.8.8.8 pingstatistics
3 packets transmitted, 3 received, 0% packet loss, time 2004ms 
rtt min/avg/max/mdev = 8.883/9.445/10.386/0.678ms

Utilisé pour vérifier __communication __ sur le réseau TPC / IP. J'ai envoyé trois messages demandant une réponse avec l'option «-c 3». Par conséquent, trois réponses seront renvoyées.

”3 packets transmitted, 3 received, 0%” Vous pouvez voir que la réponse à la demande que vous avez faite est arrivée en toute sécurité.

Espace de nom réseau du sujet principal

L'espace de noms réseau est l'un des éléments qui composent la technologie de virtualisation de type conteneur telle que Docker.

Terminal


$ sudo ip netns add helloworld

$ ip netns list
hello world

$ ip netns add

Vous pouvez créer un nouvel espace de noms

$ ip netns list

Peut être confirmé comme ls

$ sudo ip netns exec [nom du champ de nom]

Peut être exécuté avec cette commande

Terminal


$ sudo ip netns add ns1
$ sudo ip netns add ns2

Je savais comment le faire, alors j'en ai fait deux Vous avez maintenant créé un réseau de «ns1» et «ns2», mais ils sont toujours indépendants l'un de l'autre. Pour connecter les deux, un "veth" virtuel (périphérique Ethernet virtuel) Utilisez l'interface réseau, utilisez la sous-commande $ ip link add pour créer un veth

Terminal


$ sudo ip link add ns1-veth0 type peer name ns2-veth0

$ip link add

Commande de création d'interface réseau

Cela a créé l'interface réseau veth ns1-veth0 et ns2-veth0 sont les noms des interfaces réseau à créer

Terminal


$ ip link show | grep veth
3 : ns2-veth0@ns1-veth0 : <BROADCAST, MULTICAST, M-DOWN> mtu XXXX qdisc noop
state DOWN mode DEFAULT group default qlen XXXX
4 : ns1-veth0@ns2-veth0 : <BROADCAST, MULTICAST, M-DOWN> mtu XXXX qdisc noop
state DOWN mode DEFAULT group default qlen XXXX

Utilisez la commande grep pour affiner et vérifier uniquement ceux qui contiennent la chaîne de caractères veth. Dans le monde réel, deux interfaces réseau connectées par un câble LAN ont été créées. Cependant, comme il est toujours créé et appartient à la zone du système Rendre disponible dans l'espace de noms réseau

Terminal


$ sudo ip link set ns1-veth0 netns ns1
$ sudo ip link set ns2-veth0 netns ns2

Spécifiez le nom des réseaux et de l'espace de noms après le nom de l'interface réseau que vous souhaitez définir

namaspace3.png

Ça ressemble à ça Cependant, à ce stade, c'est presque la même chose que de connecter des PC avec un câble. La communication n'est possible que si les paramètres sont définis comme un vrai PC

L'adresse IP est requise lors de la communication via IP Par conséquent, vous devez donner une adresse IP à l'interface veth.

Terminal


$ sudo ip netns exec ns1 ip address add XXX.X.X.1/XX dev ns1-veth0
$ sudo ip netns exec ns2 ip address add XXX.X.X.2/XX dev ns1-veth0

$ ip address add Pour définir l'adresse IP $ ip address add

Adresse IP XXX.X.X.1 pour ns1-veth0 ns2-veth0 reçoit l'adresse IP XXX.X.X2 De plus, il existe deux concepts, HAUT et BAS. L'état initial est DOWN, réglez-le donc sur UP lors de son utilisation.

Terminal


$ sudo ip netns exec ns1 ip link set ns1-veth0 up
$ sudo ip netns exec ns2 ip link set ns2-veth0 up

Vérifier si connecté

Terminal


$ sudo ip netns exec ns1 ping -c 3 XXX.X.X.2
namespace1.png

Ça ressemble à ça

À la fin

Bien que ce soit dans le même réseau, j'ai compris la relation de connexion avec l'interface veth pour le moment. Comme ce sera plus compliqué, j'écrirai Qiita par étapes.

Recommended Posts

Espace de noms réseau Linux
Exploitez l'espace de noms réseau Linux avec Go
Mémo réseau (principalement Linux)
Espace de noms réseau Linux
réseau
Exploitez l'espace de noms réseau Linux avec Go
Réseau relationnel
Linux
réseau
Road to Intermediate Linux: Network Edition
mémorandum Linux
Commande Linux n ° 4
Commande Linux
Commande Linux n ° 3
Présentation de Linux
Bases de Linux
direnv (linux)
Organisation Linux
commandes linux
Pratique Linux
Ubuntu Linux 20.04
Résumé Linux
Processus Linux
Autorisations Linux
Outils utilisés pour vérifier la communication réseau Linux
Commande Linux n ° 5
À propos de Linux
Bases de Linux
Oubliez Linux
Désactivez IPv6 sur l'interface réseau dans CentOS Linux 8
À propos de Linux
Commande Linux
Réseau relationnel
À propos de Linux
À propos de Linux
Redirection Linux
Fonctionnalités du noyau Linux utilisées dans Docker (namespace / cgroups)