Ich habe einen CentOS 7-Server mit zwei Netzwerkschnittstellen. Einer zeigt auf unser LAN (ens32) und der andere auf unsere DMZ (ens33).
Während die LAN-Schnittstelle gut funktioniert, habe ich festgestellt, dass der Datenverkehr anscheinend nur die DMZ-Schnittstelle durchquert, wenn ich als Root angemeldet bin, und ich bin mir nicht sicher, was dies bedeutet oder ob es Auswirkungen auf andere Probleme hat, die ich erlebe .
Wenn ich zum Beispiel ausführe:
curl --interface ens32 ipecho.net/plain
Als Nicht-Root-Benutzer erhalte ich die öffentliche IP für diese Schnittstelle.
Wenn ich laufe:
curl --interface ens33 ipecho.net/plain
Als Nicht-Root-Benutzer scheint der Befehl zu blockieren und ich bin gezwungen, den Prozess zu beenden.
Wenn ich den vorherigen Befehl als root ausführe, erhalte ich die erwartete Ausgabe, die die öffentliche IP für diese Schnittstelle ist.
Kann jemand erklären, was hier vor sich geht?
Akzeptierte Antwort:
Wie es im offiziellen curl
zu sehen ist Seite, um eine bestimmte Schnittstelle anzugeben/zu binden, muss entweder CAP_NET_RAW vorhanden sein oder als root
ausgeführt werden .
Also also root
in der Lage ist, die Bindung/Routing durchzuführen, und es funktioniert nicht mit einem normalen Benutzer für Sie.
Wenn ein normaler Benutzer curl
verwendet , ohne dass das --interface
verwendet werden darf Option, werden stattdessen die Standard-Routing-Regeln des Servers auf diese Operation angewendet.
Von der offiziellen Curl-Seite curl.1 die Manpage:
–Schnittstelle
Ausführen einer Operation über eine angegebene Schnittstelle. Sie können
den Schnittstellennamen, die IP-Adresse oder den Hostnamen eingeben. Ein Beispiel könnte so aussehen:
curl – Schnittstelle eth0:1 https://www.example.com/
Wenn diese Option mehrmals verwendet wird, wird die letzte verwendet.
Unter Linux kann es verwendet werden, um ein VRF anzugeben, aber die Binärdatei muss
entweder CAP_NET_RAW haben oder als Root ausgeführt werden.
Weitere Informationen zu
Linux VRF:https://www.kernel.org/doc/Documentation/networking/vrf.txt