So richten Sie einen Linux-Server als Router ein

34

Motivation:

Ich möchte aus mehreren Gründen meinen Linux-Server anstelle des durchschnittlichen WLAN-Routers verwenden

  1. Ich möchte lernen, wie man einen vollständigeren Server unter Linux einrichtet
  2. Ich möchte kein Modem, das an einen Router oder einen Netzwerk-Switch angeschlossen ist
  3. Ich habe es satt, meinen Router alle 10 Tage ausstecken zu müssen, weil er nur hängt
  4. Ich habe es satt, Router zu kaufen, nur um zu bemerken, dass ihnen etwas Entscheidendes fehlt, wie Portweiterleitung oder statische IP-Adressierung (DHCP).

Installieren:

Letztlich kommt die Verbindung zu einem Modem, und gerade in meinen Server durch eth0, dann eth1Ausgabe wird zu einem Netzwerk - Switch , den alle anderen Client - Computer über Ethernet - Kabel verbinden (vergessen für den Moment kabellos). Gegenwärtig bin ich jedoch in einem Bürogebäude und habe die Verbindung in einem Modem, das in einen Router geht, der in einen Netzwerkswitch geht, der dann in eth0wie oben angegeben geht .

Aktuelle Tutorials:

Ich habe mir einige Tutorials angesehen ( das beste ist das Ubuntu-Tutorial ), und ich habe mir einige der Router-Fragen angesehen (dh diese hier ), aber alle beschönigen einige Schlüsselbegriffe, wie:

  • Worauf bezieht sich eth1's eth0? In /etc/network/interfacesmuss ich sagen eth1, eth0wie die zu verwenden ist network(in der Regel ist es die tatsächliche physikalische Router-Adresse)?
  • Muss ich irgendetwas tun, um anzuweisen eth1, dass das Internet, das hereinkommt eth0, an wen auch immer im Netzwerk-Switch weitergeleitet werden soll?

Gegenwärtiger Ansatz:

Hier ist meine /etc/network/interfacesDatei auf dem Server:

iface lo inet loopback

auto eth0
   iface eth0 inet static
   address 192.168.1.70
   netmask 255.255.255.0
   broadcast 192.168.1.255
   network 192.168.1.0
   gateway 192.168.1.1
   dns-nameservers 8.8.8.8

auto eth1
   # iface eth1 inet dhcp
   iface eth1 inet static
   address 192.168.7.0
   netmask 255.255.255.0
   broadcast 192.168.1.255
   network 192.168.1.0

Und ifconfigsagt mir, dass beide Netzwerkkarten gut funktionieren:

eth0      Link encap:Ethernet  HWaddr 20:cf:30:55:a0:5f  
          inet addr:192.168.1.70  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::22cf:30ff:fe55:a05f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11297 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16639 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:948633 (948.6 KB)  TX bytes:1274685 (1.2 MB)

eth1      Link encap:Ethernet  HWaddr 00:11:95:f7:f4:6d  
          inet addr:192.168.7.0  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::211:95ff:fef7:f46d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:243 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3231 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:29934 (29.9 KB)  TX bytes:213055 (213.0 KB)
          Interrupt:21 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:5348 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5348 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:470737 (470.7 KB)  TX bytes:470737 (470.7 KB)

wlan0     Link encap:Ethernet  HWaddr bc:f6:85:f8:70:5c  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Und hier ist was route -n returnsauf dem Server:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.7.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

Dann habe ich auf dem Client

auto lo
iface lo inet loopback
iface eth0 inet dhcp

Es wird aber keine IP-Adresse vergeben.

BEARBEITEN: Hier ist die Konfigurationsdatei für den isc-dhcp-Server, /etc/dhcp3/dhcpd.condie ich hauptsächlich von dieser Site kopiert habe .

# Sample /etc/dhcpd.conf                                                                                                                                                  
# (add your comments here) 
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.example";

subnet 192.168.7.0 netmask 255.255.255.0 {
   range 192.168.7.10 192.168.7.25;
}  

EDIT: Ausgabe vonsudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere             LOG level warning

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Frage:

Welche wichtigen Schritte / Komponenten fehlen mir in diesem Setup?

puk
quelle
Welches DHCP verwenden Sie?
TML
@TML Aus meiner Sicht dhcp(und damit dhcpd) ist es nicht zwingend erforderlich, und dient nur zum Zentralisieren aller statischen IPS auf dem Server (im Gegensatz zum Ändern der /etc/network/interfacesDatei in jedem Host). Deshalb habe ich beschlossen, damit nicht zu experimentieren, bis dies funktioniert. Ich habe jedoch dhcp3-serverinstalliert, sowieisc-dhcp-server
puk
Wenn der Client eine IP-Adresse von DHCP erhalten soll, müssen Sie ein DHCP ausführen. Sie sollten die Konfiguration für jeden dieser DHCP-Server veröffentlichen, der gerade aktiv ist, da die Ursache des Problems darin besteht, dass der Client keine IP-Adresse erhält. Persönlich würde ich dnsmasq empfehlen, da es auch einige nützliche Funktionen für die interne DNS-Auflösung mit sich bringt.
TML
@TML Ich habe die dhcpd.confDatei hinzugefügt und angegeben, dass ichisc-dhcp-server
puk
1
Sie sollten noch zwei Punkte beachten: 5. Ich habe es satt, nur teilweise die Kontrolle über das Gerät zu haben. 6. Ich habe es satt, einen Router zu haben, der möglicherweise eine Hintertür hat. Punkt 6 ist eine echte Sache, die jetzt in jedem Router sein kann. Einige Router verfügen über zusätzliche Funktionen wie ein fest codiertes Kennwort oder das geheime Abhören eines Ports.
Ignas2526

Antworten:

16

Ich muss wie Jack the Ripper gehen, weil einige Dinge fehlen, die du hast:

  1. Wenn Ihr Client DHCP verwendet, um die IPs abzurufen, benötigen Sie einen DHCP-Server.

    iface eth0 inet dhcp

    In den Clients bedeutet dies, dass sie ihre IP-Adressen von einem DHCP-Server beziehen. Wenn Sie keinen DHCP-Server eingerichtet haben, sollten Sie entweder feste IP-Adressen verwenden oder einen DHCP-Server installieren.

  2. Auf den Clients sind keine DNS-Server konfiguriert. Entweder aufgrund des Fehlens eines DHCP-Servers, oder Sie möchten möglicherweise einen lokalen DNS-Server für Ihr gesamtes Netzwerk verwenden.

  3. Sie haben die iptablesRegeln (die Ausgabe von sudo iptables -L) nicht angeboten, aber ich konnte mir vorstellen, dass Sie weder die Masquerade-Regeln noch die IP-Weiterleitung wie beschrieben aktiviert haben .

  4. Die IP-Adresse von eth1wird nicht empfohlen. Jede IP-Adresse, die endet, ist in der 0Regel das Netzwerk selbst, und die meisten Router / Firewalls sind nur verwirrt, wenn diese verwendet werden . Ändern Sie es auf 192.168.7.1und es wird Ihnen größtenteils gut gehen.

  5. Ihr broadcastWert in der eth1Schnittstelle ist nicht korrekt. Versendet Pakete nach nirgendwo. Der richtige Wert (unter Berücksichtigung anderer Werte der Schnittstelle) ist 192.168.7.255.

  6. Ihre Optionen auf dem DHCP-Server sind bösartig. Die ARP-Pakete zu Ihrem Router werden niemals erreicht. Das sollten Sie haben:

    default-lease-time 600;
    max-lease-time 7200;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.7.255;
    option routers 192.168.7.1; ## This should be the same value of the step 4
    option domain-name-servers 8.8.8.8;
    
    subnet 192.168.7.0 netmask 255.255.255.0 {
        range 192.168.7.10 192.168.7.25;
    }

Befolgen Sie diese und höchstwahrscheinlich wird Ihr Router funktionieren.

Braiam
quelle
Ausgabe von sudo iptables -Lzu question
puk
Um nicht wählerisch zu sein, aber für die Interessen anderer, die diese Antwort lesen, könnten Sie erklären, was einige dieser dhcpd.conf-Werte sind: Zeile 4 192.168.7.255und Zeile 8subnet 192.168.7.0
puk
@puk, das zu komplex ist, um es in Kommentaren zu erklären, aber um es gut auszudrücken, .255ist die normalerweise verwendete Broadcast-Adresse. Jedes Paket, das in diese Richtung gesendet wird, wird an alle Systeme in denselben Subnetzen gesendet. Was bedeutet , dass jedes Paket , zu 1.2.3.255 gesendet wird es von jedem System der IP-Adressen beginnen mit 1.2.3 , da sie alle sind im selben Subnetz empfangen wird en.wikipedia.org/wiki/Subnetwork#IPv4_subnetting
Braiam
Funktioniert nicht. Ich möchte sehen, ob das Problem dhcpoder das Netzwerk ist. Gibt eine statische IP-Adresse zum Testen aus. verwende ich für die statische IP auf dem Client die eth1IP-Adresse des Gateways?
Puk
1
Wahrscheinlich, weil Broadcast und Netzwerk auf eth1 des Routers auf 192.168.1.x anstatt auf 192.168.7.x verweisen. Wenn Sie nicht von eth1 auf dem Router zu eth0 auf dem Client sprechen können, werden DHCPACKs niemals auf dem Client ankommen (und erhalten folglich niemals die IP).
TML
9

Braiam beantwortete meine Frage, aber ich dachte, es wäre hilfreich, hier eine gründliche Anleitung zu geben. Bitte aktualisieren Sie diese, wenn ich Fehler gemacht habe.

Zunächst stellen Sie sicher , haben Sie zwei Ethernet - Karten (NICs) und die Update - /etc/network/interfacesDatei als solche (nicht nicht das für die Fehler - /etc/networksDatei).

iface lo inet loopback                                                                                                                    

auto eth0
   iface eth0 inet static
   address 192.168.1.70
   netmask 255.255.255.0
   broadcast 192.168.1.255
   network 192.168.1.0
   gateway 192.168.1.1
   dns-nameservers 8.8.8.8

auto eth1
   iface eth1 inet static
   address 192.168.7.1
   netmask 255.255.255.0
   broadcast 192.168.7.255
   network 192.168.1.0

So finden Sie Ihre gateway, broadcastund networkfolgen Sie diese Anweisungen .

Gehen Sie als Nächstes in den Client und bearbeiten Sie zuerst die Datei /etc/network/interface(erneut, nicht /etc/networks ) für die statische IP, um sicherzustellen, dass mindestens die NIC-Karte funktioniert.

iface eth0 inet static
address 192.168.7.75
netmask 255.255.255.0
network 192.168.7.0
broadcast 192.168.7.255
gateway 192.168.7.1

Ändern Sie die Werte so, dass sie mit den obigen Werten übereinstimmen. Wenn es funktioniert, großartig, dann befolgen Sie die Anweisungen hier genau , da es mehrere dhcpDateien gibt. Verwechseln Sie also nicht den Ordner /etc/dhcpmit /etc/dhcp3und so weiter.

puk
quelle