Linux: Gibt es eine praktische Möglichkeit, ein Programm auszuführen, das es an die IP-Adresse Ihrer Wahl bindet?


11

In FreeBSD 4.9 war es sehr einfach, mit nur einem einzigen Befehl wie zu erreichen

jail [-u username]  path hostname ip-number command

Wenn Pfad war /, hatten Sie genau das gleiche Programm wie üblich ausgeführt, aber die gesamte Netzwerkkommunikation war darauf beschränkt, nur die angegebene IP-Adresse als Quelle zu verwenden. Manchmal ist es sehr praktisch.

Jetzt gibt es unter Linux LXC, das den FreeBSD- jailZonen (oder Solaris-Zonen) sehr ähnlich sieht. Können Sie sich eine ähnliche Methode zum Ausführen eines Programms vorstellen?


Mit welchem ​​Programm versuchen Sie das zu tun? Viele Programme sind so konfigurierbar, dass ihnen mitgeteilt werden kann, an welche IP gebunden werden soll.
Warren Young

@ WarrenYoung, danke KO, aber "viele"! = "Alle"
poige

Ein guter Anwendungsfall für das "Jailing" einer ausführbaren Datei zur Verwendung einer bestimmten IP ist das Ausführen mehrerer Spieleserver auf einem Computer auf einer LAN-Party. ZB werden Valve-Spiele nur an den Ports 27015-27020 gesendet, sodass Sie pro IP nur 6 Server haben können. Sie fügen also virtuelle IP-Adressen auf einer Netzwerkkarte hinzu, müssen dann aber in der Befehlszeile des Spielservers "+ ip <Adresse>" angeben, wodurch die Übertragung an Clients beendet wird => im LAN-Browser sind keine Server sichtbar. "+ IP" funktioniert also nicht. Daher müssen wir jeden Server in einer Umgebung einsperren, in der er nur 1 IP-Adresse finden kann. Ergebnis: Keine Begrenzung in #servers + Clients sehen alle Server.
Timmos

Antworten:


12

Das Starten des Prozesses in einem Netzwerk-Namespace , in dem nur die gewünschte IP-Adresse angezeigt wird , kann etwas Ähnliches bewirken. Angenommen, ich wollte nur, dass localhost für ein bestimmtes Programm verfügbar ist.

Zuerst erstelle ich den Netzwerk-Namespace:

ip netns add limitednet

Namespaces haben standardmäßig eine Loopback-Oberfläche, daher muss ich sie als Nächstes aufrufen:

sudo ip netns exec limitednet ip link set lo up

Jetzt kann ich ein Programm mit ausführen ip netns exec limitednetund es kann nur die Loopback-Oberfläche sehen:

sudo ip netns exec limitednet ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

Wenn ich es auf eine andere Adresse als localhost beschränken wollte, könnte ich dem Namespace andere Schnittstellen hinzufügen, indem ich:

ip link set DEVICE_NAME netns NAMESPACE

Ich müsste etwas mehr experimentieren, um herauszufinden, wie eine einzelne IP-Adresse in einen Namespace eingefügt werden kann, wenn eine Schnittstelle möglicherweise mehr als eine IP-Adresse hat

Der LWN Artikel auf Namensräume ist auch hilfreich.


Erwähnenswert ist jedoch, dass viel mehr Vorbereitungen erforderlich sind, da der Netzwerk-Namespace über eine eigene Routing-Tabelle usw. verfügt. Wenn jemand eine einfachere Art der Nachahmung hat jail, werde ich sie verwenden. ;)
Poige
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.