So richten Sie Linux Server als Router mit NAT ein

8

Wir haben einen einfachen Router mit symmetrischem NAT, aber da dieser Router keine Debugging-Schnittstelle bietet, können wir nicht herausfinden, ob ein bestimmtes Paket das NAT erreicht oder nicht.

Daher möchten wir einen LINUX-Computer einrichten, der ihn zu einem Router mit symmetrischem NAT macht. Auf diese Weise können wir alle Pakete zu diesem "NAT" erfassen und die gewünschten Informationen abrufen. Wie können wir das unter Linux machen (Fedora-System, Kernel 2.6.xx)?

Steve Peng
quelle
Was meinst du mit symmetrisch nat
MohyedeenN

Antworten:

14

Um einen Linux-Computer als Router festzulegen, benötigen Sie Folgendes

1- Aktivieren Sie die Weiterleitung auf der Box mit

echo 1 > /proc/sys/net/ipv4/ip_forward

Angenommen, Ihre öffentliche Schnittstelle ist eth1 und die lokale Schnittstelle ist eth0

2- Legen Sie die Natting-Regel fest mit:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

3- Akzeptiere Verkehr von eth0:

iptables -A INPUT -i eth0 -j ACCEPT

4- Zulassen, dass Verbindungen über die öffentliche Schnittstelle hergestellt werden.

iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

5- Ausgehende Verbindungen zulassen:

iptables -A OUTPUT -j ACCEPT
MohyedeenN
quelle
2
INPUT- und OUTPUT-Ketten wirken sich nur auf Pakete aus, die tatsächlich an den Router adressiert sind, bzw. auf Pakete, die tatsächlich vom Router generiert wurden. Was Sie brauchen, sind Regeln in der FORWARD-Kette, die Pakete verarbeiten, die durchlaufen werden.
Pepoluan
Ja, richtig, aber wenn Sie natten, werden die Pakete über die öffentliche Schnittstelle gesendet und sie werden über die OUTPUT-Kette gesendet, wenn ich mich hier nicht irre, wenn alle ips öffentlich sind und Sie nicht natten, wird nur die Vorwärtskette benötigt Dies gilt auch für den INPUT, da die Pakete über die öffentliche Schnittstellen-IP gesendet werden. Sie müssen zulassen, dass die zuvor eingerichteten Sitzungen über die INPUT-Kette zurückkehren.
MohyedeenN
2
Ähm, das glaube ich nicht. Alle Netfilter-Diagramme, die ich im Internet gefunden habe, zeigen an, dass OUTPUT-Ketten nur für Pakete gelten, die von lokalen Prozessen generiert wurden. Zum Beispiel: upload.wikimedia.org/wikipedia/commons/8/8f/…
pepoluan
@ MohyedeenN Ich kann dir nicht genug danken, ich wünschte ich könnte +1 diese 100x. Nachdem ich mir einen ganzen Tag die Haare ausgezogen hatte, war das genau das, was ich brauchte. Vielen Dank!!
Arthur Maltson
Auch auf dem Computer im privaten Netzwerk hinzufügen: route add default gw 192.168.0.1 # Oder unabhängig von der IP-Adresse des NAT Sie müssen möglicherweise auch die Datei resolv.conf aktualisieren, um die Nameserver zu finden
Xofo
1

Dies ist das einfache Skript, das den Trick ausführen kann, den es vom Router benötigt. Es ist auf UBUNTU 16.04 gut getestet

#!/bin/bash
# This script is written to make your Linux machine Router
# With this you can setup your linux machine as gateway.
# Author @ Mansur Ul Hasan
# Email  @ [email protected]

  # Defining interfaces for gateway.
  INTERNET=eth1
  LOCAL=eth0

# IMPORTANT: Activate IP-forwarding in the kernel!

   # Disabled by default!
   echo "1" > /proc/sys/net/ipv4/ip_forward

   # Load various modules. Usually they are already loaded 
   # (especially for newer kernels), in that case 
   # the following commands are not needed.

   # Load iptables module:
   modprobe ip_tables

   # activate connection tracking
   # (connection's status are taken into account)
   modprobe ip_conntrack

   # Special features for IRC:
   modprobe ip_conntrack_irc

   # Special features for FTP:
   modprobe ip_conntrack_ftp

   # Deleting all the rules in INPUT, OUTPUT and FILTER   
   iptables --flush

   # Flush all the rules in nat table 
   iptables --table nat --flush

   # Delete all existing chains
   iptables --delete-chain

   # Delete all chains that are not in default filter and nat table
   iptables --table nat --delete-chain

   # Allow established connections from the public interface.
   iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT

   # Set up IP FORWARDing and Masquerading
   iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
   iptables --append FORWARD --in-interface $LOCAL -j ACCEPT

   # Allow outgoing connections
   iptables -A OUTPUT -j ACCEPT
Mansur Ali
quelle
0

Ich denke, die anderen Antworten haben einige wichtige Punkte übersehen. Unter der Annahme, dass sich iptables in einem neuen Zustand befindet, wird eth0 erneut als interne Schnittstelle und eth1 als externe Schnittstelle verwendet:

  1. Aktivieren Sie die IP-Weiterleitung im Kernel:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  2. Aktivieren Sie die Maskerade auf eth1, um die Quelladresse für ausgehende Pakete neu zu schreiben. Wenn Sie wirklich symmetrisches NAT wollen, benötigen Sie --randomam Ende Folgendes :

    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
    
  3. Weiterleitungsregeln konfigurieren. Standardmäßig leitet iptables den gesamten Datenverkehr bedingungslos weiter. Sie möchten wahrscheinlich den eingehenden Datenverkehr aus dem Internet einschränken, aber alle ausgehenden Daten zulassen:

    # Allow traffic from internal to external
    iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
    # Allow returning traffic from external to internal
    iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT
    # Drop all other traffic that shouldn't be forwarded
    iptables -A FORWARD -j DROP
    

Beachten Sie, dass wir die INPUT- oder OUTPUT-Ketten in der Filtertabelle nicht berührt haben. Diese haben nichts damit zu tun, ein Router zu sein.

Keine dieser Änderungen wird beim Neustart beibehalten.

multithr3at3d
quelle