
Ich habe eine Weile gesucht und kann keine gute Antwort darauf finden, also dachte ich, ich frage einfach mal, bevor ich noch ein paar Tage damit verbringe, meinen Kopf auf den Schreibtisch zu schlagen.
Ich habe eine Ubuntu-Box mit zwei physischen Schnittstellen und einer virtuellen Schnittstelle.
eno1 - 172.16.0.100
eno2 - 172.16.0.101
eno1:0 - x.x.x.x
Was ich gerne hätte
- Bei Antworten auf eingehende Pakete möchte ich, dass die Pakete über die Schnittstelle ausgegeben werden, über die die Anforderung eingegangen ist.
Für ausgehende Pakete möchte ich, dass sie standardmäßig am ... versendet werden.
a. eno1 – für Pakete, die für private Netzwerke bestimmt sind (mehrere nicht zusammenhängende 172.16.x.0-Bereiche) b. eno1:0 – für Pakete, die für alle anderen Netzwerke bestimmt sind
Aktuelles Setup
IP-Regelliste
0: from all lookup local
32760: from all to x.x.x.x lookup eno1:0
32761: from x.x.x.x lookup eno1:0
32762: from all to 172.16.0.101 lookup eno2
32763: from 172.16.0.101 lookup eno2
32764: from all to 172.16.0.100 lookup eno1
32765: from 172.16.0.100 lookup eno1
32766: from all lookup main
32767: from all lookup default
IP-Routenlistentabelle eno1:0
default via x.x.x.1 dev eno1
IP-Routenlistentabelle eno1
default via 172.16.0.1 dev eno1
172.16.0.0/24 dev eno1 scope link src 172.16.0.100
IP-Routenlistentabelle eno2
default via 172.16.0.1 dev eno2
172.16.0.0/24 dev eno2 scope link src 172.16.0.101
IP-Routenliste
default via 172.16.0.1 dev eno1 onlink
x.x.x.0/23 dev eno1 proto kernel scope link src x.x.x.x
172.16.0.0/24 dev eno2 proto kernel scope link src 172.16.0.101
172.16.0.0/24 dev eno1 proto kernel scope link src 172.16.0.100
sysctl-Werte für eno1 und eno2
arp_filter=1
arp_ignore=1
arp_announce=2
Probleme
- Ich kann eno1 und eno2 sporadisch von Bereichen außerhalb ihrer Subnetze erreichen, aber ich kann eno1:0 überhaupt nicht erreichen.
- Von der Box aus kann ich das Internet (öffentliche IPs) überhaupt nicht erreichen.
Antwort1
Die Antwort entdeckt – oder vielmehr wiederentdeckt …
Das Problem ist, dass Unix davon ausgeht, dass der Host die Netzwerkeinheit ist und nicht der Port, was auf Multi-Homed-Servern alle möglichen ARP-Probleme verursacht. Ich musste also im Grunde die ARP-Antworten auf einer Schnittstelle auf die mit dieser Schnittstelle verknüpften IP-Adressen beschränken, da Unix sonst auf JEDER Schnittstelle unabhängig von der IP antwortet – was alle anderen Geräte im Subnetz wirklich verwirrt.
Also... Arptables installiert
sudo apt-get -y install arptables
Beschränken Sie die Antworten auf jeder Schnittstelle auf die IPs auf der Schnittstelle
sudo arptables -n -v --line-numbers -L
Chain INPUT (policy DROP 6011K packets, 168M bytes)
1 -j ACCEPT -i eno1 -o * -d x.x.x.x , pcnt=2496 -- bcnt=69888
2 -j ACCEPT -i eno1 -o * -d 172.16.0.100 , pcnt=294 -- bcnt=8232
3 -j ACCEPT -i eno2 -o * -d 172.16.0.101 , pcnt=294 -- bcnt=8232
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
1 -j ACCEPT -i * -o eno1 -s x.x.x.x , pcnt=2503 -- bcnt=70084
2 -j ACCEPT -i * -o eno1 -s 172.16.0.100 , pcnt=295 -- bcnt=8260
3 -j ACCEPT -i * -o eno2 -s 172.16.0.101 , pcnt=294 -- bcnt=8232
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
Und voilà, alle IPs antworten auf ihren richtigen Ports.
Mann! Ich hoffe, ich vergesse das nicht wieder!