ubuntuusers.de

Fragen Multi Uplink Routing

Status: Gelöst | Ubuntu-Version: Ubuntu 11.10 (Oneiric Ocelot)
Antworten |

MPW

Anmeldungsdatum:
4. Januar 2009

Beiträge: 3731

Hallo,

ich beschäftige mich zurzeit damit, wie ich zwei verfügbare Internetverbindungen sinnvoll kombinieren kann. Dazu habe ich den entsprechenden Wiki-Artikel gelesen und das funktioniert auch so grob.

Jedoch habe ich noch zwei Probleme:

1.) Wie kann ich das sinnvoll bei einer Internetverbindung mit dynamischer IP machen? Gibt es da einen einfach Befehl, der mir nur die IP eines Interfaces ausgibt? Oder muss ich ifconfig INTERFACE parsen?

2.) Die Verbindung ist soweit stabil, jedoch vergisst der Rechner immer wieder den DNS Server. Die Datei /etc/resolv.conf wird ständig bearbeitet. Das geschieht alle paar Minuten und kann bisher nur durch manuelles auführen des DHCP-Clienten auf beiden Interfaces dhclient wlan1 && dhclient eth2 wiederhergestellt werden. Ein manuelles Eintrage von z.B. 8.8.8.8 (googles DNS) geht auch, aber auch diesen vergisst der Server ständig. Kann ich irgendwie einen festen DNS Server erzwingen? Von mir aus soll er immer den von google nehmen.

Hat jemand dazu Ideen, woran das liegen kann?

Gruß MPW

Wutze

Anmeldungsdatum:
16. November 2009

Beiträge: 364

Zu 1. verstehe ich die Frage nicht so ganz. Wenn Du da aber nur die IP wissen willst, sollte ein ifconfig ppp0 genügen.

Zu 2. kann ich hier nur empfehlen, einen eigenen DNS-Resolver zu nutzen und den Netzwerkkarten dann zu sagen, sie sollen 127.0.0.1, den eigenen DNS nutzen. Und dem sagst Du dann nur, wohin der dann seinerseits die Fragen richten soll.
Alternativ sollte es genügen, wenn du den Netzwerkkarten direkt die DNS-Einträge verpasst. Dann richtet sich alles danach.

Seit Ubuntu 9.10 gibt es zu dem von Dir genannten Problem, meines Erachtens nach, keine vernünftigen und vor allem schlüssigen Aussagen mehr, da seit dieser Version die Netzwerk-Konfiguration nur noch verwurstet ist. Nicht mehr kompatibel zu Änderungen auf der Konsole oder der GUI, da jedes Ding sein eigenes Süppchen kocht.

pppoeconf sagst Du dann "nur" noch, es soll keinen DNS nutzen .. fertig ist die Sache

Zum Thema "richtiger" DNS-Server ein kleiner Tipp. Man kann den für sich besten freien DNS-Server mit namebench (GUI oder Konsole) suchen und dann auf seine korrekte Arbeitsweise mit dem netalyzer der Uni Berkeley testen.

MPW

(Themenstarter)

Anmeldungsdatum:
4. Januar 2009

Beiträge: 3731

Hallo,

danke schonmal für deine Antwort.

Frage 1 war so gemeint: Natürlich enthält die Ausgabe von ifconfig eth2 z.B. die IP der Netzwerkkarte. Aber ich müsste sie ja noch parsen. Da steht ja jede Menge anderes Zeug noch mit dabei, wie Bcast, Maske, RX, TX, etc... das brauche ich ja alles nicht. Ich brauche einen String, der genau die IP enthält und nicht mehr für das Skript. Aber das scheint dann wohl nicht zu gehen.

Wie kann ich denn den DNS Server manuell festlegen?

Hier die Interfaces aus /etc/network/interfaces:

auto eth2
iface eth2 inet dhcp

auto wlan1
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

/edit: So, hab mich hier auch gerade nochmal schnell schlau gemacht. Bringt es denn wirklich einen Vorteil einen lokalen DNS Server zu betreiben oder soll ich z.B. einfach einen festen, wie den von google, in die interfaces-conf eintragen? Wie trägt man denn eigentlich zwei ein, durch , oder durch ; getrennt oder in zwei Zeilen?

Wutze

Anmeldungsdatum:
16. November 2009

Beiträge: 364

Ahhso .. Du willst nur die IP-Adresse haben ohne drumherum.
Shell hilft hier weiter ;o)

1
ifconfig eth0 | grep "inet Adresse:"|cut -d":" -f2|cut -d" " -f1

zu 2.

Damit solltest Du dann aber auch von DHCP weg und die IP-Adresse statisch vergeben. Oder eben dem DHCP-Server, von woher Du im Moment offensichtlich die Adresse beziehst, den DNS eintragen.

Ansonsten sollte es dann so aussehen:

auto eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        dns-nameservers 127.0.0.1

Wutze

Anmeldungsdatum:
16. November 2009

Beiträge: 364

Zum Thema eigener DNS-Server.

Also ich stelle seit ca. 3 Jahren immer häufiger fest, dass die Provider teils massive Probleme mit ihren DNS-Server haben. Die Dinger benötigen Ewigkeiten, um eine Antwort zu liefern. Aus diesem Grund nutze ich seit vielen Jahren, so wie Du, per Hand eingestellte DNS-Server.

Hast Du mehr als einen Client im System, zufällig mit fester IP, dann musst Du an jeder Stelle den DNS-Server ändern, wenn man diesen wechseln möchte. Ab hier kann man überlegen einen eigenen DNS zu fahren.

Spätestens dann wenn man Kinder hat, wird sich so ein privates DNS-Ding bezahlt machen. Weil man hat damit die Möglichkeit ganze Domains um zu biegen. Mal als Beispiel, kinox.to steht bei mir im DNS und wird auf unsere Lokale Infoseite umgeleitet.

Ganz zum Schluß, mit einem eigenen DNS lernst Du nicht nur immer was neues dazu, Du kannst Dir auch zu 99% sicher sein, dass DU weißt, was das Ding tut. ;o)

MPW

(Themenstarter)

Anmeldungsdatum:
4. Januar 2009

Beiträge: 3731

Hallo nochmal,

danke für deine zahlreichen Tipps. Weil bei mir ohnehin schon dnsmasq läuft, da der betreffende Rechner das lokale Netzwerk routet und auch als WLAN hotspot fungiert, will ich das mit dem eigenen DNS-Server jetzt mal probieren.

Ich habe jedoch immer noch das Problem, dass von irgendwo her die resolv.conf ständig überschrieben wird. Ein chmod 400 konnte da auch nicht helfen, da der verantwortliche service natürlich auch root-Rechte hat.

Außerdem habe ich namebench durchlaufen lassen und die 2 besten Nameserver für mich bestimmt. Durchschnittliche Anfragedauer ~75 ms, ist das gut? Kommt mir recht viel vor...

Wie stoppe ich jetzt das überschreiben der resolv.conf?

Ich habe in der interfaces folgende Änderungen gemacht:

auto wlan1
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
dns-nameservers 127.0.0.1

auto eth2
iface eth2 inet dhcp
dns-nameservers 127.0.0.1

und in der /etc/dhcp/dhclient.conf

die Zeile

 prepend domain-name-servers 127.0.0.1

hinzugefügt. Und auch bei request den domain-name-servers rausgelöscht.

Das hat noch nichts genutzt. Den Networkmanager verwende ich nicht, da ich alle Verbindungen in der interfaces enigestellt habe.

Wutze

Anmeldungsdatum:
16. November 2009

Beiträge: 364

In der globalen Config zum DHCP musste am besten das rein schreiben

option domain-name-servers 192.168.0.1;

Dann bekommen alle DHCP-Clients auch diesen DNS vom DHCP. Localhost bringt da nicht viel, weil dann jeder Client bei sich guggt und da nix finden wird. ;o)

75ms sind ein sehr guter Wert für einen DNS. Das spürt man kaum.

Wenn Du eigenen DNS hast, kann dir die /etc/resolv.conf mehr oder weniger gestohlen bleiben. Weil Du den Karten ja direkt schon erzählt hast, wo sie suchen sollen. Lass die links liegen, brauchste wirklich nicht ;o)

Wutze

Anmeldungsdatum:
16. November 2009

Beiträge: 364

MPW schrieb:

Ich habe in der interfaces folgende Änderungen gemacht:

auto wlan1
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
dns-nameservers 127.0.0.1

auto eth2
iface eth2 inet dhcp
dns-nameservers 127.0.0.1

Ich sah es jetzt eben erst. Wenn diese beiden Schnittstellen per DHCP ihre IP-Adressen erhalten, dann brauchst Du da auch nicht localhost als DNS-Server eintragen. Diese Info muss der DHCP übermitteln.

Wobei ich jetzt eben nicht so ganz verstehe, wer sich denn nun ins Internet einwählen soll? Dein Router, dessen /etc/network/interfaces Datei hier zu sehen ist oder ein anderes Gerät? Ist das beschriebene Teil mit eth2 und wlan1 selbst der Accespoint fürs WLAN? Wo sind wlan0 und eth0/1?

Bin jetzt etwas verwirrt.

MPW

(Themenstarter)

Anmeldungsdatum:
4. Januar 2009

Beiträge: 3731

Hallo,

alles was ich hier gepostet habe, ist von meinem Router (der gleichzeitig auch ein Desktop-Rechner ist).

Nachdem ich jetzt 1,5 h überhaupt keine DNS-Auflösung mehr hatte, geht es jetzt wieder.

Ich habe:

  • in der Datei interfaces die dns-nameservers 127.0.0.1 für beide externen Schnittstellen aktiviert

  • in /etc/dhcp/dhclient.conf prepend domain-name-servers 8.8.8.8 eingefügt. (Was genau macht diese Zeile eigentlich?)

  • in selbiger Datei den Eintrag request domain-name-servers entfernt

  • das Paket resolvconf installiert

  • in /etc/resolfconf/resolf.conf.d/head die gewünschten dns-Server eingetragen:

mpw@Server0:~$ sudo cat /etc/resolvconf/resolv.conf.d/head 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
nameserver 134.102.20.20
nameserver 131.234.137.23
nameserver 8.8.8.8
nameserver 8.8.4.4

und nach einem sudo /etc/init.d/networking restart sieht die /etc/resolv.conf nun so aus:

mpw@Server0:~$ sudo cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
nameserver 134.102.20.20
nameserver 131.234.137.23
nameserver 8.8.8.8
nameserver 8.8.4.4

nameserver 127.0.0.1
search fh-muenster.de

Der Router hat 4 Netzwerkschnittstellen, eth2 und wlan1 nach draußen, beide haben globale IP Adressen, auf die ich auch keinen Einfluss habe. Bei beiden muss ich mit dhcp leben. Der eine Provider ist unitymedia, hier bleibt die Adresse halbwegs konstant. Und der andere ist das Uni-WLAN, dort wird die Adresse alle 24-36 h geändert. Wlan0 und eth1 bilden eine bridge und versorgen dann meine anderen Rechner, iPhones, etc.

Zur Übersicht hier mal die ganze /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth2
iface eth2 inet dhcp
dns-nameservers 127.0.0.1

auto br0
iface br0 inet static
address 192.168.4.1
network 192.168.4.0
netmask 255.255.255.0
broadcast 192.168.0.255
bridge-ports eth1 wlan0

auto wlan1
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
dns-nameservers 127.0.0.1


# vorhandene Regeln und Ketten zuerst löschen (Restart-Funktionalität)
up /sbin/iptables -F
 up /sbin/iptables -X
  up /sbin/iptables -t nat -F

# Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren
up iptables -A FORWARD -o eth2 -i br0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
 up iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  up iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE 
   up sysctl -w net.ipv4.ip_forward=1 


# hostapd und dnsmasq neu starten
up /etc/init.d/hostapd restart
up /etc/init.d/dnsmasq restart

Es scheint jetzt stabil zu sein. Ich glaube das Problem vorher war einfach, dass sich die vom dhclient erfragten dns-server gegenseitig überschrieben haben. Das ist zumindest meine Theorie.

Einen wirklichen Geschwindigkeitszuwachs konnte ich jetzt nicht bemerken, aber es ist wenigstens stabil.

Ich hoffe ich habe jetzt soweit alles richtig gemacht. Sollten wir das in den Wiki-Eintrag von Multi-Uplink-Routing aufnehmen?

Was ich immer noch nicht verstehe:

Wo ist der Unterschied zwischen diesen 3 Einstellungsmöglichkeiten:

  • dns-nameservers in /etc/network/interfaces

  • prepend in /etc/dhclient/dhclient.conf

  • nameservers in /etc/resolvconf/resolv.conf.d/head

Das würde mich ja doch mal interessieren, ich fühle mich, als hätte ich alles jetzt 3 mal konfiguriert. Oder sind wirklich alle 3 Einstellungen nötig?

Gruß MPW

Wutze

Anmeldungsdatum:
16. November 2009

Beiträge: 364

MPW schrieb:

  • in der Datei interfaces die dns-nameservers 127.0.0.1 für beide externen Schnittstellen aktiviert

  • in /etc/dhcp/dhclient.conf prepend domain-name-servers 8.8.8.8 eingefügt. (Was genau macht diese Zeile eigentlich?)

prepend = voranstellen übersetzt. Hier, denke ich, vor alle anderen DNS-Einträge pflanzen. Mangels Erfahrung in der Manipulation der DHCP-Client Konfigurations Datei, würde ich das mal so übersetzen.

OK, Du hast 4 Schnittstellen im Computer, von denen 2 eine feste IP zu den Netzwerken oder einen Bridge bilden und zwei weitere, die eine öffentliche IP besitzen und DHCP verstehen müssen. Mal ganz abgesehen davon, Du wirst nicht beide Leitungen gleichzeitig nutzen können, um damit die Geschwindigkeit, mit der Du Up- und Downloads machen kannst. So wie im realen Leben, kannst Du auch nur durch eine Tür ins Freie gehen und nicht durch zwei gleichzeitig. Genau so wenig wie ein Zug zwei Tunnel gleichzeitig befahren kann. Hängt damit zusammen, dass wenn Du etwas absendest der empfangende und zurück sendende Host, seine Pakete genau dahin zurück sendet, woher er die Anfrage erhalten hat. Und das kann nicht mal diese oder die andere Tür sein. Ist technisch unmöglich.

Das Problem lichtet sich nun weiter. Wenn Du am sprichwörtlichen Server sitzt als Dein Arbeitsplatz, wird Deine DNS-Abfrage unter normalen Umständen direkt ins Internet versandt, während die Clients im Netzwerk eine der beiden internen IP-Adressen benutzen, an die der DNS-Server gebunden ist.

Du kannst jetzt Abhilfe schaffen, indem Du eine kleine iptables Regel einbaust in der Du "sagst", alles was an DNS Abfragen von localhost kommt, also Deine Abfragen, sende zum internen DNS, also einer IP-Adresse auf deinem PC-Router-Arbeitsplatz.

mpw@Server0:~$ sudo cat /etc/resolvconf/resolv.conf.d/head 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
nameserver 134.102.20.20
nameserver 131.234.137.23
nameserver 8.8.8.8
nameserver 8.8.4.4

Hier muss ich ebenfalls passen, da ich das Programm/Bibliothek "resolvconf" noch nie benötigt habe und auch die Beschreibung, für meine Begriffe, etwas rätselhaft ausfällt. Ich müsste mir das Programm mal installieren, um zu sehen was das Ding tut.

und nach einem sudo /etc/init.d/networking restart sieht die /etc/resolv.conf nun so aus:

mpw@Server0:~$ sudo cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
nameserver 134.102.20.20
nameserver 131.234.137.23
nameserver 8.8.8.8
nameserver 8.8.4.4

nameserver 127.0.0.1
search fh-muenster.de

Das hier macht mich jetzt etwas stutzig. Offenbar willst Du die DNS-Auflösung der Uni nutzen, um (vermutlich) im Intranet auf diverse Dienste zugreifen zu können. Zumindest Dienste die im öffentlichen Netzwerk nicht per DNS zu finden sind.

Zur Übersicht hier mal die ganze /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth2
iface eth2 inet dhcp
dns-nameservers 127.0.0.1

auto br0
iface br0 inet static
address 192.168.4.1
network 192.168.4.0
netmask 255.255.255.0
broadcast 192.168.0.255
bridge-ports eth1 wlan0

auto wlan1
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
dns-nameservers 127.0.0.1


# vorhandene Regeln und Ketten zuerst löschen (Restart-Funktionalität)
up /sbin/iptables -F
 up /sbin/iptables -X
  up /sbin/iptables -t nat -F

# Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren
up iptables -A FORWARD -o eth2 -i br0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
 up iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  up iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE 
   up sysctl -w net.ipv4.ip_forward=1 


# hostapd und dnsmasq neu starten
up /etc/init.d/hostapd restart
up /etc/init.d/dnsmasq restart

dnsmasq? Ja gut, kann man nutzen. Nur dann braucht es keinen Bind. Man sollte sich hier entscheiden für einen Dienst. Und die Namensserver Einträge benötigt eigentlich nur das Interface br0. Dahin per iptables eine Regel erstellen, die die Fragen an br0 sendet und dnsmasq weiß dann wohin er weiter fragen kann, wenn nichts dazu in seiner Datenbank steckt.

Es scheint jetzt stabil zu sein. Ich glaube das Problem vorher war einfach, dass sich die vom dhclient erfragten dns-server gegenseitig überschrieben haben. Das ist zumindest meine Theorie.

Die Vermutung liegt nahe. Oder es gab nur die Anfrage an localhost und der wusste nicht, wohin die DNS-Anfragen weiter geleitet werden können. Im Moment haste zu viele localhost Anfragen laufen. Denn die hast Du ja schon auf der Schnittstelle definiert.

Einen wirklichen Geschwindigkeitszuwachs konnte ich jetzt nicht bemerken, aber es ist wenigstens stabil.

Siehe oben, zwei Leitungen gleichzeitig nutzen geht nicht.

Ich hoffe ich habe jetzt soweit alles richtig gemacht. Sollten wir das in den Wiki-Eintrag von Multi-Uplink-Routing aufnehmen?

Im Moment wohl eher noch nicht. Denn dazu müsste man dann wissen, warum 3 Konfigurationsdateien notwendig sind.

  • dns-nameservers in /etc/network/interfaces

Gibt der entsprechenden Schnittstelle die DNS-Adresse, an der Namen aufgelöst werden können (deswegen braucht es auch keine resolv.conf

  • prepend in /etc/dhclient/dhclient.conf

  • nameservers in /etc/resolvconf/resolv.conf.d/head

Bis heute hatte ich noch keinen Grund in den Client-Konfigurations-Dateien herum zu schrauben. Zudem fehlt mir Input zu besagtem Programm resolvconf. Habe ich noch nie benutzt.

Das würde mich ja doch mal interessieren, ich fühle mich, als hätte ich alles jetzt 3 mal konfiguriert. Oder sind wirklich alle 3 Einstellungen nötig?

Also aus meiner Sicht hast Du es 3 mal konfiguriert. Und je nach Lage der Dinge, wird jedes Ding für sich gesehen, irgend wann mal ne Antwort geben. Oder alle drei gleichzeitig und es wird alles lahm ohne Ende ...

Grundsätzlich aber haste ne ziemlich kuriose Konfiguration. Warum Du eth0 per Brücke an wlan0 bindest erschliesst sich mir momentan nicht. Denn eigentlich können beide Schnittstellen unabhängig voneinander funktionieren.

MPW

(Themenstarter)

Anmeldungsdatum:
4. Januar 2009

Beiträge: 3731

Hallo,

den Geschwindigkeitszuwachs meinte ich bzgl. DNS Server. Für eine durchschnittliche Website müssen mind. 2-3 DNS Lookups durchgeführt werden. Und durch den Cache konnte ich jetzt laut namebench die Lookupzeit auf ~20 ms drücken. Das macht sich schon bemerkbar.

Ich musste in der interfaces auch noch die Weiterleitung für beide Interfaces aktivieren:

up iptables -A FORWARD -o eth2 -i br0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
 up iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  up iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE 
   up iptables -A FORWARD -o wlan1 -i br0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
    up iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
     up iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE 
      up sysctl -w net.ipv4.ip_forward=1 

Die Clients im Netz bekommen jetzt als DNS Server die 192.168.4.1 (also den lokalen Router) zugewiesen. Das sieht alles gut aus.

Wenn die WLAN-Verbindung abreißt, muss man nur die Website neu laden und die andere Verbindung wird genutzt.

Das Multi Uplink Routing nutze ich vorallem für den Torrent Client, der über das Uni-WLAN deutlich schneller hochladen kann. Das klappt auch schon so halbwegs. Mir ist nicht ganz klar ob über DHT oder den Tracker, aber damit muss ich mich nochmal näher auseinandersetzen.

Wie kann ich jetzt am Besten das Skript

#!/bin/sh

export IF1="eth2";
export IP1="109.91.216.19";
export P1="109.91.216.1";
export P1_NET="109.91.216.0";

export IF2="wlan1";
export IP2="212.201.124.60";
export P2="212.201.124.1";
export P2_NET="212.201.124.0";

export IF0="lo";
export P0_NET="127.0.0.0";

ip route delete default;
ip route delete default;

ip route add $P1_NET dev $IF1 src $IP1 table T1;
ip route add default via $P1 table T1;
ip route add $P2_NET dev $IF2 src $IP2 table T2;
ip route add default via $P2 table T2;

ip route add $P1_NET dev $IF1 src $IP1;
ip route add $P2_NET dev $IF2 src $IP2;

ip rule add from $IP1 table T1;
ip rule add from $IP2 table T2;

ip route add $P0_NET dev $IF0 table T1;
ip route add $P2_NET dev $IF2 table T1;
ip route add 127.0.0.0/8 dev lo table T1;
ip route add $P0_NET dev $IF0 table T2;
ip route add $P1_NET dev $IF1 table T2;
ip route add 127.0.0.0/8 dev lo table T2;

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

echo "done.";

exit

immer ausführen lassen, wenn ein Interface eine neue IP bekommt? Wenn nämlich die IP nicht mehr zu der im Skript passt, blockiert das die Internetverbindung komplett.

Vllt. geht das irgendwie über die WPA-Konfig...da muss ich mich noch schlau machen.

MPW

(Themenstarter)

Anmeldungsdatum:
4. Januar 2009

Beiträge: 3731

Hallo,

also ich habe mir jetzt ein Skript gebastelt, das auch auf dynamische IPs eingehen kann. Man kann es dynamisch von wpa_cli aufrufen lassen, wenn man das Skript, das ausgeführt wird mit -a übergibt.

#!/bin/sh

export IF1="eth2";
export IP1=`ifconfig $IF1 | grep "inet Adresse:"|cut -d":" -f2|cut -d" " -f1`;
export P1="`echo $IP1| cut -d"." -f 1-3`.1";
export P1_NET="`echo $IP1| cut -d"." -f 1-3`.0"

export IF2="wlan1";
export IP2=`ifconfig $IF2 | grep "inet Adresse:"|cut -d":" -f2|cut -d" " -f1`;
export P2="`echo $IP1| cut -d"." -f 1-3`.1";
export P2_NET="`echo $IP1| cut -d"." -f 1-3`.0"

export IF0="lo";
export P0_NET="127.0.0.0";

ip route delete default;
ip route delete default;

ip route add $P1_NET dev $IF1 src $IP1 table T1;
ip route add default via $P1 table T1;
ip route add $P2_NET dev $IF2 src $IP2 table T2;
ip route add default via $P2 table T2;

ip route add $P1_NET dev $IF1 src $IP1;
ip route add $P2_NET dev $IF2 src $IP2;

ip rule add from $IP1 table T1;
ip rule add from $IP2 table T2;

ip route add $P0_NET dev $IF0 table T1;
ip route add $P2_NET dev $IF2 table T1;
ip route add 127.0.0.0/8 dev lo table T1;
ip route add $P0_NET dev $IF0 table T2;
ip route add $P1_NET dev $IF1 table T2;
ip route add 127.0.0.0/8 dev lo table T2;

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

echo "done.";

exit

Ich habe leider noch nicht herausgefunden, wie ich diesen Parameter, den man bei wpa_cli mit -a übergeben kann, in die wpa_supplicant.conf schreiben kann...

Wutze

Anmeldungsdatum:
16. November 2009

Beiträge: 364

MPW schrieb:

also ich habe mir jetzt ein Skript gebastelt, das auch auf dynamische IPs eingehen kann. Man kann es dynamisch von wpa_cli aufrufen lassen, wenn man das Skript, das ausgeführt wird mit -a übergibt.

Sieht gut aus das Script ;o)

Ich habe leider noch nicht herausgefunden, wie ich diesen Parameter, den man bei wpa_cli mit -a übergeben kann, in die wpa_supplicant.conf schreiben kann...

/etc/rc.local ?

MPW

(Themenstarter)

Anmeldungsdatum:
4. Januar 2009

Beiträge: 3731

Wutze schrieb:

MPW schrieb:

also ich habe mir jetzt ein Skript gebastelt, das auch auf dynamische IPs eingehen kann. Man kann es dynamisch von wpa_cli aufrufen lassen, wenn man das Skript, das ausgeführt wird mit -a übergibt.

Sieht gut aus das Script ;o)

Danke. Du hast die Vorlage geliefert ☺

Wutze schrieb:

MPW schrieb:

Ich habe leider noch nicht herausgefunden, wie ich diesen Parameter, den man bei wpa_cli mit -a übergeben kann, in die wpa_supplicant.conf schreiben kann...

/etc/rc.local ?

Ja da kommt es rein beim Systemstart. Aber der Rechner läuft ja wochenlang ohne Reboot. Eigentlich wird er nur bei Stromausfall und Kernelupdate rebootet. Jedoch kann es schon vorher sein, dass der wpa_supplicant neu mit dem Uni-WLAN verbindet und sich dadurch die IP ändert. Dann müsste ich dynamisch das Skript ausführen lassen. Das geht angeblich mit wpa_cli -a /pfad/zum/skript. Da bekommt man als Übergabeparameter sogar das Interface und auch ob die Verbindung hergestellt oder getrennt wurde.

Nur ich starte den supplicant ja über wpa-conf in der Datei interfaces. Und jetzt weiß ich nicht, wie ich das mit dem wpa_cli machen soll. Ich habe schon lange gegoogelt, aber eine Konfigurationsmöglichkeit in der wpa_supplicant.conf scheint es nicht zu geben.

Wutze

Anmeldungsdatum:
16. November 2009

Beiträge: 364

MPW schrieb:

/etc/rc.local ?

Ja da kommt es rein beim Systemstart. Aber der Rechner läuft ja wochenlang ohne Reboot. Eigentlich wird er nur bei Stromausfall und Kernelupdate rebootet. Jedoch kann es schon vorher sein, dass der wpa_supplicant neu mit dem Uni-WLAN verbindet und sich dadurch die IP ändert. Dann müsste ich dynamisch das Skript ausführen lassen. Das geht angeblich mit wpa_cli -a /pfad/zum/skript. Da bekommt man als Übergabeparameter sogar das Interface und auch ob die Verbindung hergestellt oder getrennt wurde.

Stimmt auffallend. Für den Moment fällt mir hier nichts anderes ein, als die IP-Adresse in eine temporäre Datei zu legen und dann alle paar Minuten zu vergleichen ob sie sich verändert hat. Falls ja, dann bitte Script /xxx/n ausführen und neue IP in die Datei schreiben.

Antworten |