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!)

Artaxerxe
quelle
3
Verwenden Sie dazu iptables. siehe howtoforge.com/nat_iptables
harish.venkat

Antworten:

6

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:

sysctl -w net.ipv4.ip_forward=1
echo 1 >/proc/sys/net/ipv4/ip_forward

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.

Gilles 'SO - hör auf böse zu sein'
quelle
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.

Aditya Patawari
quelle
Hallo Aditya. Ich bin Ihrem Link gefolgt, habe aber Probleme damit. Siehe den Kommentar, den ich Gilles
artaxerxe