Wie erstelle ich ein Gateway aus meinem Linux-Betriebssystem?
7
Ich möchte mein Linux so konfigurieren, dass es als Netzwerkrouter (Gateway) verwendet wird. Kann mir jemand einen Hinweis dazu geben? (Links sind willkommen!)
Für einen einfachen Router müssen nur zwei Schritte ausgeführt werden.
Routing aktivieren
Der erste Schritt besteht darin, das Routing im Kernel zu aktivieren. Standardmäßig verwirft der Kernel Pakete, die er nicht erkennt. Sobald Sie das Routing aktivieren, werden sie weitergeleitet. Sie müssen beim Booten des Computers einen dieser beiden Befehle ausführen:
Viele Distributionen haben eine Datei namens /etc/sysctl.conf, in der Sie die Zeile net.ipv4.ip_forward=1einfügen können, um diesen Befehl beim Booten des Computers auszuführen. Wenn es ein Verzeichnis gibt /etc/sysctl.d, können Sie eine Datei in diesem Verzeichnis hinzufügen, anstatt sie zu bearbeiten /etc/sysctl.conf. Rufen Sie die Datei auf something.conf.
Für IPv6 ist die entsprechende Einstellung net.ipv6.conf.all.forwardingoder /proc/sys/net/ipv6/conf/all/forwarding. Sie können auch net.ipv4.conf.all.forwardingoder /proc/sys/net/ipv4/conf/all/forwardingfür IPv4 verwenden.
Routing-Tabellen festlegen
Der zweite Schritt besteht darin, Routing-Tabellen festzulegen. Dies kann einfach oder kompliziert sein, je nachdem, wie viel Sie tun müssen. Konfigurieren Sie für einfache Zwecke die Adresse und die Netzmaske jeder Netzwerkschnittstelle und fügen Sie mit dem routeBefehl die erforderliche zusätzliche Route hinzu .
Über einfaches Routing hinausgehen
Wenn Sie Pakete neu schreiben müssen, lautet der grundlegende Befehl iptables( ip6tablesfür IPv6). ("Netfilter" ist der Name der Kernel-Paketverarbeitungsfunktion und "iptables", wenn der Name des Programms, das ihn steuert.) Hier wird nach Filterung, NAT und mehr gesucht.
Informationen zu komplexen Setups finden Sie im ipBefehl aus dem iproute2- Paket.
Hallo Gilles! Ich bin deinen Gedanken gefolgt. So etwas wie das: eth0 - hat das WAN. eth1 hat 192.168.30.1 IP. Danach habe ich getan: iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADEund iptables --append FORWARD --in-interface eth1 -j ACCEPT. Ich habe die IP meines Client-Computers auf 192.168.30.10 festgelegt. Mein Client-Computer ist über eth1 mit dem Linux-Server verbunden. Ok, wenn ich 192.168.30.1 anpinge, ist es in Ordnung, aber ich kann keine Verbindung zum Internet herstellen. (kann google.com oder eine andere Webadresse nicht anpingen). Ich habe auch mein gültiges DNS in die Datei /etc/resolv.conf geschrieben. Kannst du mir dabei helfen? Vielen Dank.
Artaxerxe
@artaxerxe Ich kann anhand Ihres Kommentars nicht sagen, was falsch ist. Sie sollten eine neue Frage stellen. Kannst du pingen 8.8.8.8? Wenn ja, haben Sie ein DNS-Problem. Wenn nicht, liegt ein IP-Konnektivitätsproblem vor. copy-paste die Ausgabe von ifconfig, route -n, iptables -nvLund iptables -t nat -nvL.
Gilles 'SO - hör auf böse zu sein'
3
Schließen Sie zuerst die IPs des Netzwerks an, für das Sie als Router fungieren möchten. Holen Sie sich entweder mehrere Netzwerkkarten oder konfigurieren Sie eine virtuelle Schnittstelle.
Sie müssen die Paketweiterleitung von aktivieren /etc/sysctl.confund dann iptables für NAT konfigurieren. Hier ist ein kurzes Tutorial dafür.
Antworten:
Für einen einfachen Router müssen nur zwei Schritte ausgeführt werden.
Routing aktivieren
Der erste Schritt besteht darin, das Routing im Kernel zu aktivieren. Standardmäßig verwirft der Kernel Pakete, die er nicht erkennt. Sobald Sie das Routing aktivieren, werden sie weitergeleitet. Sie müssen beim Booten des Computers einen dieser beiden Befehle ausführen:
Viele Distributionen haben eine Datei namens
/etc/sysctl.conf
, in der Sie die Zeilenet.ipv4.ip_forward=1
einfügen können, um diesen Befehl beim Booten des Computers auszuführen. Wenn es ein Verzeichnis gibt/etc/sysctl.d
, können Sie eine Datei in diesem Verzeichnis hinzufügen, anstatt sie zu bearbeiten/etc/sysctl.conf
. Rufen Sie die Datei aufsomething.conf
.Für IPv6 ist die entsprechende Einstellung
net.ipv6.conf.all.forwarding
oder/proc/sys/net/ipv6/conf/all/forwarding
. Sie können auchnet.ipv4.conf.all.forwarding
oder/proc/sys/net/ipv4/conf/all/forwarding
für IPv4 verwenden.Routing-Tabellen festlegen
Der zweite Schritt besteht darin, Routing-Tabellen festzulegen. Dies kann einfach oder kompliziert sein, je nachdem, wie viel Sie tun müssen. Konfigurieren Sie für einfache Zwecke die Adresse und die Netzmaske jeder Netzwerkschnittstelle und fügen Sie mit dem
route
Befehl die erforderliche zusätzliche Route hinzu .Über einfaches Routing hinausgehen
Wenn Sie Pakete neu schreiben müssen, lautet der grundlegende Befehl
iptables
(ip6tables
für IPv6). ("Netfilter" ist der Name der Kernel-Paketverarbeitungsfunktion und "iptables", wenn der Name des Programms, das ihn steuert.) Hier wird nach Filterung, NAT und mehr gesucht.Informationen zu komplexen Setups finden Sie im
ip
Befehl aus dem iproute2- Paket.quelle
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
undiptables --append FORWARD --in-interface eth1 -j ACCEPT
. Ich habe die IP meines Client-Computers auf 192.168.30.10 festgelegt. Mein Client-Computer ist über eth1 mit dem Linux-Server verbunden. Ok, wenn ich 192.168.30.1 anpinge, ist es in Ordnung, aber ich kann keine Verbindung zum Internet herstellen. (kann google.com oder eine andere Webadresse nicht anpingen). Ich habe auch mein gültiges DNS in die Datei /etc/resolv.conf geschrieben. Kannst du mir dabei helfen? Vielen Dank.8.8.8.8
? Wenn ja, haben Sie ein DNS-Problem. Wenn nicht, liegt ein IP-Konnektivitätsproblem vor. copy-paste die Ausgabe vonifconfig
,route -n
,iptables -nvL
undiptables -t nat -nvL
.Schließen Sie zuerst die IPs des Netzwerks an, für das Sie als Router fungieren möchten. Holen Sie sich entweder mehrere Netzwerkkarten oder konfigurieren Sie eine virtuelle Schnittstelle.
Sie müssen die Paketweiterleitung von aktivieren
/etc/sysctl.conf
und dann iptables für NAT konfigurieren. Hier ist ein kurzes Tutorial dafür.quelle