Linux-Netzwerk-Namespace

Einführung

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

Was ist TCP / IP?

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.

Was ist eine IP-Adresse?

Mit einem Protokoll namens Internet Protocol Eine Art von Kennung, die für die Kommunikation benötigt wird, z. B. eine Adresse im Internet

Was ist eine Netzwerkschnittstelle?

LAN-Kabel, Netzwerkkarte (NIC) oder WLAN-Adapter Repräsentiert. Es ist jedoch ein abstraktes Konzept, wenn es sich um Software handelt.

Was ist IPv4 / IPV6?

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.

(Ergänzung)

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"


Operation

$ 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

Loopback-Adresse

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


Was ist eine Routing-Tabelle?

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.

Netzwerk-Namespace des Hauptthemas

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

$ sudo ip netns exec [Name des Namaspace]

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

namaspace3.png

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
namespace1.png

Es sieht aus wie das

Am Ende

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

Linux-Netzwerk-Namespace
Betreiben Sie den Linux-Netzwerk-Namespace mit Go
Netzwerk-Memo (hauptsächlich Linux)
Linux-Netzwerk-Namespace
Netzwerk
Betreiben Sie den Linux-Netzwerk-Namespace mit Go
Relationales Netzwerk
Linux
Netzwerk
Weg zu Intermediate Linux: Network Edition
Linux Memorandum
Linux-Befehl Nr. 4
Linux-Befehl
Linux-Befehl Nr. 3
Linux Übersicht
Linux-Grundlagen
direnv (linux)
Linux-Organisation
Linux-Befehle
Linux-Praxis
Ubuntu Linux 20.04
Linux Zusammenfassung
Linux-Prozess
Linux-Berechtigungen
Tools zur Überprüfung der Linux-Netzwerkkommunikation
Linux-Befehl Nr. 5
Über Linux
Linux-Grundlagen
Vergiss Linux
Deaktivieren Sie IPv6 auf der Netzwerkschnittstelle in CentOS Linux 8
Über Linux
Linux-Befehl
Relationales Netzwerk
Über Linux
Über Linux
Linux-Weiterleitung
In Docker verwendete Linux-Kernelfunktionen (Namespace / cgroups)