Ich dachte, ich würde es für die Ausgabe von Wissen schreiben. Eines der Elemente, aus denen eine Virtualisierungstechnologie vom Containertyp wie Docker besteht, ist der "Netzwerk-Namespace" Sie können einen virtuellen Computer erstellen, der netzwerkunabhängig vom System ist, indem Sie einfach Befehlszeilenoperationen benötigen.
Starten Sie Ubuntu 18.04 LTS. Geben Sie den folgenden Befehl in das Terminal ein. Dies ist ein Befehl zum Installieren der Pakete, die für nachfolgende Arbeiten benötigt werden. Auf diese Weise können Sie die erforderlichen Pakete installieren.
Terminal
$ sudo apt-get update
$ sudo apt-get -y install
TCP(Transmission Control Protocol) IP(Internet Protocol)
Der Name des Protokolls, das Sie täglich verwenden.
―― "Die Reederei liefert das Gepäck des Kunden an den Bestimmungsort."
In der Computerwelt wie in der realen Welt Es gibt einen Mechanismus, der sicherstellt, dass das Gepäck (die Daten) zum Zeitpunkt der Lieferung ordnungsgemäß ankommt.
Mit einem Protokoll namens Internet Protocol Eine Art von Kennung, die für die Kommunikation benötigt wird, z. B. eine Adresse im Internet
LAN-Kabel, Netzwerkkarte (NIC) oder WLAN-Adapter Repräsentiert. Es ist jedoch ein abstraktes Konzept, wenn es sich um Software handelt.
IPv4 / 6 (Internet Protocol version 4 / 6 )
Die Welt, in der wir uns jetzt befinden. __2 Es gibt jetzt zwei völlig getrennte Internetseiten __ Da IPv4 / IPv6 als Protokolle verwendet werden, sind sie nicht kompatibel.
IPv4 ist 32 Bit (4 Bit), während IPv6 128 Bit (16 Byte) ist. Da die Anzahl der neuen, die verwendet werden können, mit der Verbreitung abnimmt, wird versucht, auf IPv6 zu migrieren.
Hat eine IP-Adresse und ist mit dem Netzwerk verbunden Computer, die keine Router sind, werden als "Hosts" bezeichnet
Verbunden mit einem nicht unterscheidbaren Netzwerk wie einem Host oder Router Der Name des Computers lautet "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
Der Teil nach der Anzeige von "inet" ist die "IP-Adresse" des Computers
lo
und eth0
sind Netzwerkschnittstellen
"eth0" ist die IP-Adresse, die dem Absender entspricht
IP-Adressen werden nach Bedarf an Netzwerkschnittstellen vergeben
lo
hat die IP-Adresse 000.X.X.X
Die IP-Adresse "000.X.X.X" von "lo" ist eine spezielle Adresse, die als "Loopback-Adresse" bezeichnet wird Repräsentiert Ihre eigene Adresse Praktisch zu verwenden, wenn Sie nur mit sich selbst kommunizieren möchten, z. B. um den Betrieb zu überprüfen
Probieren Sie es aus ($ ping -c 3 <Ihre Loopback-Adresse>)
Sie können sehen, dass das Ergebnis zurückgegeben wird, als ob Sie den Befehl drücken
$ 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
Ein Befehl, mit dem Sie einen Blick in die Kommunikation werfen können, die durch den Computer fließt __ Paketerfassung __, __ Schnüffeln __ Wenn Sie nach der Eingabe von "$ ping" das Terminal auf der Seite "$ sudo tcpdump" betrachten Sie können bestätigen, dass 3 Antworten auf Austauschanfragen eingegangen sind
$ 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
……
Ein Befehl zum Überprüfen der Route, die ein Paket nimmt, um sein Ziel zu erreichen Die zu übergebende Route ist die zu übergebende Route Dieser Befehl wird häufig zur Fehlerbehebung im Netzwerk verwendet
Route Netzwerkausrüstung Die in jeder Zeile angezeigte IP-Adresse ist die IP-Adresse, die das Paket übergeben hat IP-Adresse des Routers
Es gibt viele Router im Internet, um Pakete zu senden Sie können sehen, dass es aus Schaufelrelais besteht
In der Welt von TCP / IP wird die nächste Partei, an die ein Paket übergeben werden soll, durch das Konzept der "Routing-Tabelle" verwaltet. Sie können die Routing-Tabelle mit einem Befehl überprüfen
$ 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
Erstens besteht die Routing-Tabelle aus mehreren "Routing-Einträgen"
Jede Zeile ist ein Routing-Eintrag
Die Ziel-IP-Adresse wird am Anfang jedes Routing-Eintrags geschrieben
Ziel default
ist ein spezielles Ziel und wird verwendet, wenn keines der anderen dem Ziel entspricht
XX.X.X.X / XX in der 3. Zeile ist eine Darstellungsmethode, die mehrere IP-Adressen zusammenfasst Auf diese Weise verwendet die Routing-Tabelle die Ziel-IP-Adresse. Nicht unbedingt einzeln geschrieben
$ 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
Wird verwendet, um __Kommunikation __ im TPC / IP-Netzwerk zu überprüfen. Ich habe drei Nachrichten gesendet, in denen eine Antwort mit der Option "-c 3" angefordert wurde. Daher werden drei Antworten zurückgegeben.
”3 packets transmitted, 3 received, 0%” Sie können sehen, dass die Antwort auf die von Ihnen gestellte Anfrage sicher angekommen ist.
Der Netzwerk-Namespace ist eines der Elemente, aus denen Virtualisierungstechnologien vom Containertyp wie Docker bestehen.
Terminal
$ sudo ip netns add helloworld
$ ip netns list
hello world
$ ip netns add
Sie können einen neuen Namespace erstellen
$ ip netns list
Kann wie ls bestätigt werden
Kann mit diesem Befehl ausgeführt werden
Terminal
$ sudo ip netns add ns1
$ sudo ip netns add ns2
Ich wusste, wie man es macht, also habe ich zwei gemacht
Sie haben jetzt ein Netzwerk von "ns1" und "ns2" erstellt, aber sie sind immer noch unabhängig voneinander.
Um die beiden zu verbinden, ein virtuelles "veth" (Virtual Ethernet Device)
Verwenden Sie die Netzwerkschnittstelle und den Unterbefehl "$ ip link add", um eine veth zu erstellen
Terminal
$ sudo ip link add ns1-veth0 type peer name ns2-veth0
$ip link add
Befehl zum Erstellen der Netzwerkschnittstelle
Dadurch wurde die veth-Netzwerkschnittstelle erstellt ns1-veth0 und ns2-veth0 sind die Namen der zu erstellenden Netzwerkschnittstellen
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
Verwenden Sie den Befehl grep, um einzugrenzen und nur diejenigen zu überprüfen, die die Zeichenfolge veth enthalten.
In der realen Welt wurden zwei Netzwerkschnittstellen erstellt, die über ein LAN-Kabel verbunden sind.
Da dies jedoch noch erstellt wird und zum Bereich des Systems gehört
Stellen Sie es im Netzwerk-Namespace zur Verfügung
Terminal
$ sudo ip link set ns1-veth0 netns ns1
$ sudo ip link set ns2-veth0 netns ns2
Geben Sie nach dem Namen der Netzwerkschnittstelle, die Sie festlegen möchten, den Namen netns und Namespace an
Es sieht aus wie das In diesem Stadium entspricht dies jedoch fast dem Anschließen von PCs mit einem Kabel. Die Kommunikation ist nur möglich, wenn die Einstellungen wie bei einem echten PC vorgenommen wurden
Bei der Kommunikation über IP ist eine IP-Adresse erforderlich
Daher müssen Sie der veth-Schnittstelle eine IP-Adresse geben.
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 Zum Einstellen der IP-Adresse "$ ip address add"
IP-Adresse XXX.X.X.1 für ns1-veth0
ns2-veth0 erhält die IP-Adresse XXX.X.X2
Darüber hinaus gibt es zwei Konzepte: UP und DOWN.
Der Ausgangszustand ist DOWN, setzen Sie ihn also bei Verwendung auf UP.
Terminal
$ sudo ip netns exec ns1 ip link set ns1-veth0 up
$ sudo ip netns exec ns2 ip link set ns2-veth0 up
Überprüfen Sie, ob eine Verbindung besteht
Terminal
$ sudo ip netns exec ns1 ping -c 3 XXX.X.X.2
Es sieht aus wie das
Obwohl es sich im selben Netzwerk befindet, habe ich die Beziehung der Verbindung mit der veth-Schnittstelle vorerst verstanden. Da es komplizierter sein wird, werde ich Qiita schrittweise schreiben.
Recommended Posts