Frage wie man 3 NICs und 3 Subnetze routet


Ich versuche, Routing zwischen 3 Subnetzen mit einem Ubuntu 12.10 Server mit 3 NICs einzurichten. Ich möchte in der Lage sein, all diese Subnetze miteinander zu verbinden und auf das Internet zugreifen zu können.

Das Netzwerk 10.0.2.0 ist mit dem Internet verbunden. Die mit dem Internet verbundene Netgear-Routerbox hat die Adresse 10.0.2.1.

Die drei Subnetze sind 10.0.2.0/16, 10.100.0.0/16 und 10.101.0.0/16.

Ich habe versucht, meine / etc / network / interfaces einzurichten, um sowohl die NICs als auch das Routing zu definieren, aber es scheint nicht zu funktionieren. Ich kann alle NICs auf dem Ubuntu-Server von jedem Rechner in einem der jeweiligen Subnetze anpingen, aber ich bin nicht in der Lage, irgendwelche Systeme in verschiedenen Subnetzen von irgendeinem dieser Subnetze zu pingen. Ich kann auch nicht aus den Subnetzen ins Internet gehen.

# /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# eth0
auto eth0
allow-hotplug eth0
iface eth0 inet static
        address 10.0.2.154
        netmask 255.255.0.0
        gateway 10.0.2.1
        dns-nameservers 10.0.2.100 8.8.8.8

# eth1
auto eth1
allow-hotplug eth1
iface eth1 inet static
        address 10.100.0.4
        netmask 255.255.0.0
        dns-nameservers 10.0.2.100 8.8.8.8

# eth2
auto eth2
allow-hotplug eth2
iface eth2 inet static
        address 10.101.0.1
        netmask 255.255.0.0
        dns-nameservers 10.0.2.100 8.8.8.8

up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.0.2.1 dev eth0
up route add -net 10.100.0.0 netmask 255.255.0.0 gw 10.0.2.154 dev eth0
up route add -net 10.101.0.0 netmask 255.255.0.0 gw 10.0.2.154 dev eth0
up route add -net 10.101.0.0 netmask 255.255.0.0 gw 10.100.0.4 dev eth1
up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.100.0.4 dev eth1
up route add -net 10.100.0.0 netmask 255.255.0.0 gw 10.101.0.1 dev eth2
up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.101.0.1 dev eth2

Ich würde gerne irgendwelche Vorschläge hören, wie ich meine / etc / network / interfaces-Datei reparieren könnte, um zwischen diesen Subnetzen richtig zu routen.


2
2018-02-01 20:42


Ursprung




Antworten:


Keine Notwendigkeit, Routen auf dem Router hinzuzufügen. Sie sind dort bereits direkt als lokale Schnittstelle verbunden! Das kannst du sehen, wenn du rennst route -n. Z.B.:

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.25.1    0.0.0.0         UG    0      0        0 wlan0   # def.gw
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 wlan0   # zeroconf
192.168.0.0     192.168.25.254  255.255.255.0   UG    0      0        0 wlan0   # route
192.168.11.0    0.0.0.0         255.255.255.0   U     0      0        0 testvpn # interf.
192.168.25.0    0.0.0.0         255.255.255.0   U     2      0        0 wlan0   # interf.
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0  # interf.

Ich habe eine tatsächliche Route markiert, die hier manuell hinzugefügt wurde # route. Sie werden feststellen, dass diese Zeilen auch in der Liste aufgeführt sind G Flagge! Die ohne diese Flagge sind nur lokal, direkt verfügbar.

Das einzige, was Sie aktivieren müssen, ist IPv4-Weiterleitung.

sudo sysctl -w net.ipv4.ip_forward=1

und aktiviere es dauerhaft, indem du diese Zeile in a machst /etc/sysctl.d/10-routing.conf (Sie können einen Namen erstellen) Datei:

net.ipv4.ip_forward=1

Von hier aus müssen Sie die Hosts in den Netzwerken über diese Routen informieren. Also, auf einer Maschine in der 10.100.0.0/16 Zum Beispiel müssen Sie die Routen wie folgt hinzufügen:

# On a client somewhere in 10.100.0.0
auto eth0
iface eth0 inet static
  address 10.100.0.123
  netmask 255.255.0.0
  # route 10.0.0.0/16 via 10.100.0.4
  up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.100.0.4
  # route 10.101.0.0/16 via 10.101.0.1
  up route add -net 10.101.0.0 netmask 255.255.0.0 gw 10.101.0.1

Eine viel bessere Möglichkeit, diese Routen anzukündigen, besteht darin, sie mithilfe von DHCP zu informieren oder sie mithilfe von zu einem Standardgateway zu machen gateway. Alternativ können Sie "echte" Routing-Protokolle wie OSPF, RIP usw. verwenden.


Übrigens, die Syntax in Ihrem /etc/network/interfaces Datei ist falsch. Das up Die Einträge sollten Teil jeder einzelnen Schnittstelle sein, die durch Leerzeichen wie z address Eintrag.


2
2018-02-01 21:06



Ich sehe Ihren aktualisierten Vorschlag, Routen zu jedem Host hinzuzufügen. Gibt es eine Möglichkeit, dies zu vermeiden, außer DHCP? Alle meine Hosts haben statische Adressen und ich habe keinen Zugriff auf einige von ihnen, um Netzwerkeinstellungen oder Routing zu konfigurieren. Ist es nicht möglich, Routen auf dem Ubuntu-Server zu definieren, den ich als Router verwende, um das Routing automatisch zu bearbeiten, ohne die Clients konfigurieren zu müssen? Um es klar zu sagen, ich kann allen meinen Benutzern sagen, welche IP-Adressen und Gateways beim Einrichten von IP verwendet werden sollen, ich kann ihnen einfach nicht sagen, dass sie Routen hinzufügen sollen. Das wäre viel zu kompliziert. - user127875
@ user127875 Ja, ich habe einige Optionen hinzugefügt: DHCP (das du gerade verworfen hast), was dies zum Standard-Gateway macht, unter Verwendung eines echten Routing-Protokolls (RIPv2, OSPF, etc.). Aufgrund der Informationen, die Sie mir gerade mitgeteilt haben, müssen Sie Ihr Netzwerk möglicherweise überarbeiten. Sie tun es falsch, wenn Sie bemerken, dass Sie die Konfigurationen im Allgemeinen auf einzelne Computer anwenden müssen. - gertvdijk
Wäre es hilfreich, ein Gateway für jede Schnittstelle auf dem Ubuntu-Server in der Datei / etc / network / interfaces zu definieren? - user127875
@ user127875 Nein! Alle Ihre Hosts in Ihrem Netzwerk müssen dazu in der Lage sein kennt Wie erreiche ich die Netzwerke? Entweder müssen sie die Einträge in der Kernel-Routing-Tabelle haben, oder, müssen Sie das Standard-Gateway konfigurieren, auf dem sie sich befinden, um es richtig zu routen. Dies ist hier ein Thema, da dies ein sehr einfaches IPv4-Netzwerkkonzept ist, das für Ubuntu nicht relevant ist. Ich schlage vor, mehr über das Routing zu erfahren und einen Plan zu erstellen, wie Sie Ihr Netzwerk gestalten. - gertvdijk
Ich entschuldige mich dafür, stumpfsinnig zu sein und schätze deine Hilfe wirklich. Ich verstehe völlig, dass jeder Client konfiguriert werden muss, um zu wissen, was das Standard-Gateway ist. Wenn meine Benutzer die statische IP für ihre Systeme einrichten, werde ich sie anweisen, die Gateway-Option so einzustellen, dass sie auf die Adresse der NIC meines Ubuntu-Servers zeigt, der sich in ihrem Subnetz befindet. Auf diese Weise weiß ihr Client, wohin er gehen muss, um das Subnetz zu verlassen. Dann muss der Ubuntu-Router nur wissen, was mit dem Datenverkehr zu tun ist, der dazu kommt. Nach dem, was Sie zuvor gesagt haben, scheint dies mit ipforwarding und ohne manuelle Routen zu funktionieren. - user127875


Für jeden Hinweis hier ist die endgültige Lösung für mein Routing-Problem. Im Folgenden finden Sie die endgültigen / etc / network / interfaces, /etc/iptables.rules und /etc/sysctl.d/10-routing.conf Dateien, mit denen ich endete.

Es stellte sich heraus, dass ich die Routing-Befehle aus meiner Datei / etc / network / interfaces entfernen und dann die ipforwarding-Funktion einrichten musste.

=========================================
/etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# eth0
auto eth0
allow-hotplug eth0
iface eth0 inet static
        address 10.0.2.154
        netmask 255.255.0.0
        gateway 10.0.2.1
        dns-nameservers 10.0.2.100 8.8.8.8
        pre-up iptables-restore < /etc/iptables.rules

# eth1
auto eth1
allow-hotplug eth1
iface eth1 inet static
        address 10.100.0.4
        netmask 255.255.0.0
        dns-nameservers 10.0.2.100 8.8.8.8

# eth2
auto eth2
allow-hotplug eth2
iface eth2 inet static
        address 10.101.0.1
        netmask 255.255.0.0
        dns-nameservers 10.0.2.100 8.8.8.8

=================================================

/etc/iptables.rules

# Generated by iptables-save v1.4.12 on Fri Feb  1 20:43:36 2013
*nat
:PREROUTING ACCEPT [204:18924]
:INPUT ACCEPT [35:6098]
:OUTPUT ACCEPT [3:164]
:POSTROUTING ACCEPT [1:40]
-A POSTROUTING -o eth0 -j SNAT --to-source 10.0.2.154
COMMIT
# Completed on Fri Feb  1 20:43:36 2013

=================================================

/etc/sysctl.d/10-routing.conf

net.ipv4.ip_forward=1

1
2018-02-02 05:24



Sie haben Source NAT hier eingerichtet. Ich verstehe nicht, warum du das brauchst. Es ist auch eine schlechte Sache für NAT in privaten Adressen, da es nicht benötigt wird, um IP-Adressen zu teilen - Sie haben genug Platz! Du machst Spaghetti deines Netzwerks hier. - gertvdijk