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
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.
Avec un protocole appelé Internet Protocol Un type d'identifiant nécessaire pour communiquer, comme une adresse sur Internet
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.
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.
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
$ 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
lo
a l'adresse IP 000.X.X.X
--L'interface réseau ʻeth0 reçoit l'adresse IP
00.X.X.XX`.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
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é.
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
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
Ç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
Ça ressemble à ça
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