[erledigt] ppp-route über ip-up in separate routingtabelle

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

[erledigt] ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 21.01.2019 15:26:50

Hallo,

ich möchte die default-route des ppp-dienstes in eine separate routingtabelle verfrachten, da ich bald eine zweite Anbindung bekomme und damit dann policy-routing betreiben möchte.

ich habe mein ifup-script (und mein testscript und das ip-up aufzurufen) jetzt soweit, dass es mir den ip-befehl zusammenbaut

Code: Alles auswählen

+ echo '[2019-01-21 15:17:36] update_route params ppp0 91.x.89.79 217.0.116.200...'
[2019-01-21 15:17:36] update_route params ppp0 91.x.89.79 217.0.116.200...
+ ip route flush table telekom
+ ip route add 217.0.116.200/32 dev ppp0 src 91.x.89.79 table telekom
RTNETLINK answers: File exists
+ ip route add default via 217.0.116.200 dev ppp0 table telekom
RTNETLINK answers: File exists
warum sagt mir RTNETLINK, file exists? darf ich die route wirklich nur einmal vergeben (also, wenn über pppd also globale default-route gesetzt nicht nochmal in einer separaten routing-tabelle)?

Code: Alles auswählen

[15:23] # ip route show
default dev ppp0 scope link 
...(lokale routen)
217.0.116.200 dev ppp0 proto kernel scope link src 91.x.89.79 
[15:24] # ip route show table telekom
[15:24] # 
heist das ich, muss die globale default-route löschen, damit ich sie in die separate RT verfrachten kann?
Zuletzt geändert von frankw am 26.01.2019 14:30:30, insgesamt 1-mal geändert.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von bluestar » 21.01.2019 16:53:03

frankw hat geschrieben: ↑ zum Beitrag ↑
21.01.2019 15:26:50
heist das ich, muss die globale default-route löschen, damit ich sie in die separate RT verfrachten kann?
Nein, nur leider sind deine Infos sehr unvollständig um dir konkret helfen zu können.

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 21.01.2019 17:13:23

welche infos benötigst du?

meine routingtabellen (beide) habe ich gepostet und auch das Script mit dem Befehl zum anlegen...

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 24.01.2019 19:10:03

so wie es aussieht wird trotz angabe der ziel-routing-tabelle immer die main-table verwendet

Code: Alles auswählen

[19:04] root@bpi-r2-e:~ (555)# /usr/local/bin/ppp_ipup.sh
+ ip route show
+ grep ppp
default dev ppp0 scope link 
217.0.116.200 dev ppp0 scope link src 91.x.92.243 
++ ip addr show ppp0
++ grep 'inet '
++ sed -e 's/^.*inet \([0-9.]\+\) peer \([0-9.]*\+\).* \([a-z0-9]\+\)$/\3 tty 9600 \1 \2/'
+ ifdata='ppp0 tty 9600 91.x.92.243 217.0.116.200'
++ ip addr show ppp0
++ grep 'inet '
++ sed -e 's/^.*inet \([0-9.]\+\) peer \([0-9.]*\+\).* \([a-z0-9]\+\)$/\2 dev \3/'
+ deldata='217.0.116.200 dev ppp0'
+ echo ppp0 tty 9600 91.x.92.243 217.0.116.200
ppp0 tty 9600 91.x.92.243 217.0.116.200
+ echo 0
0
+ echo 217.0.116.200 dev ppp0
217.0.116.200 dev ppp0
+ echo 0
0
+ ip route del default
+ echo 0
0
+ ip route del 217.0.116.200 dev ppp0
+ echo 0
0
+ ip route show
10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 
10.0.8.0/24 via 10.0.8.2 dev tun0 
10.0.8.2 dev tun0 proto kernel scope link src 10.0.8.1 
192.168.0.0/24 dev lan0 proto kernel scope link src 192.168.0.10 
192.168.1.0/24 dev lan1.6 proto kernel scope link src 192.168.1.10 linkdown 
192.168.10.0/24 dev ap0 proto kernel scope link src 192.168.10.1 
192.168.11.0/24 dev wlan1 proto kernel scope link src 192.168.11.1 
192.168.50.0/24 dev lan0 scope link 
192.168.200.0/24 dev lan0.10 proto kernel scope link src 192.168.200.10 
+ /etc/ppp/ip-up.d/update_route ppp0 tty 9600 91.x.92.243 217.0.116.200
+ set -x
+ PPP_LOCAL=91.x.92.243
+ PPP_REMOTE=217.0.116.200
+ PPP_IFACE=ppp0
+ set -x
+ logfile=/tmp/update_route.log
+ exec
++ tee -a /tmp/update_route.log
++ date '+%Y-%m-%d %H:%M:%S'
+ DATE='2019-01-24 19:04:06'
+ echo '[2019-01-24 19:04:06] update_route params ppp0 91.x.92.243 217.0.116.200...'
[2019-01-24 19:04:06] update_route params ppp0 91.x.92.243 217.0.116.200...
+ ip route flush table telekom
+ ip route add 217.0.116.200/32 dev ppp0 src 91.x.92.243 table telekom
+ echo 0
0
+ ip route add default dev ppp0 table telekom
+ echo 0
0
+ ip route show table telekom
+ echo finish
finish
+ exit 0
+ ip route show
default dev ppp0 scope link 
10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 
10.0.8.0/24 via 10.0.8.2 dev tun0 
10.0.8.2 dev tun0 proto kernel scope link src 10.0.8.1 
192.168.0.0/24 dev lan0 proto kernel scope link src 192.168.0.10 
192.168.1.0/24 dev lan1.6 proto kernel scope link src 192.168.1.10 linkdown 
192.168.10.0/24 dev ap0 proto kernel scope link src 192.168.10.1 
192.168.11.0/24 dev wlan1 proto kernel scope link src 192.168.11.1 
192.168.50.0/24 dev lan0 scope link 
192.168.200.0/24 dev lan0.10 proto kernel scope link src 192.168.200.10 
217.0.116.200 dev ppp0 scope link src 91.x.92.243 
man sieht, das Löschen funktioniert, und nach dem Hinzufügen sind die Einträge nicht in der tabelle telekom, sondern wieder in der maintabelle


der erste Teil holt sich die ip-adresse und das Gateway sieht im Script so aus:

Code: Alles auswählen

ifdata=$(ip addr show ppp0 | grep "inet "| sed -e 's/^.*inet \([0-9.]\+\) peer \([0-9.]*\+\).* \([a-z0-9]\+\)$/\3 tty 9600 \1 \2/')
deldata=$(ip addr show ppp0 | grep "inet "| sed -e 's/^.*inet \([0-9.]\+\) peer \([0-9.]*\+\).* \([a-z0-9]\+\)$/\2 dev \3/')
ifdata und deldata sind nur anders zusammengebaut, entsprechend für das jeweilige Format

die "echo 0"-zeilen sind der returncode (echo $?)

per default sind 2 routen über das ppp-interface drin

Code: Alles auswählen

# ip route show |grep ppp
default dev ppp0 scope link 
217.0.116.200 dev ppp0 scope link src 91.x.92.243 
nach dem löschen der beiden routen (default + gateway mit angabe der quelladresse), fehlen diese natürlich in der hauptliste...das löschen klappt also (sieht man in der mitte ip route show...da ist nichts mehr mit ppp).

benötige ich evtl. eine bestimmte kernel-option, damit ich weitere routingtabellen nutzen kann? da ich den Kernel selber gebaut habe, könnte da evtl. was fehlen

es kommt bei ip route show table telekom schonmal keine Fehlermeldung...wenn ich eine nicht (in /etc/iproute2/rt_tables) definierte routingtablle teste kommt auch ein Fehler

Code: Alles auswählen

[19:04] root@bpi-r2-e:~ (556)# ip route list table telekom2
Error: argument "telekom2" is wrong: table id value is invalid

[19:07] root@bpi-r2-e:~ (557)# grep -v '^#' /etc/iproute2/rt_tables
255	local
254	main
253	default
0	unspec
1	telekom
2	bambit
in meiner /etc/network/interfaces ist der ppp so definiert:

Code: Alles auswählen

auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set lan3 up # line maintained by pppoeconf
provider dsl-provider
und in der /etc/ppp/peers/dsl-provider habe ich jetzt mal die optionen defaultroute und replacedefaultroute mit # auskommentiert...wird vermutlich erst mit der nächsten Zwangstrennung übernommen (hoffe ich), da es scheinbar kein "service pppd restart" gibt

wenn irgendwas noch fehlt, einfach sagen, was...
Zuletzt geändert von frankw am 24.01.2019 19:28:31, insgesamt 1-mal geändert.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von bluestar » 24.01.2019 19:14:28

Hast du deinem PPPd auch gesagt, dass er selbst die Routing-Tabelle nicht modifizieren darf?

Code: Alles auswählen

noipdefault
Warum modifizierst du deine Routing-Tabellen eigentlich so kompliziert und nicht einfach über zwei Scripte in /etc/ppp/ip-up.d und /etc/ppp/ip-down.d/, wenn du dein(e) Scripte dort ablegst, dann bekommst alles was du brauchst als Variablen direkt vorbesetzt:

Code: Alles auswählen

PPP_IFACE,PPP_TTY,PPP_SPEED,PPP_LOCAL,PPP_REMOTE,PPP_IPPARAM
Davon nutzen kannst du

Code: Alles auswählen

$PPP_LOCAL = deine aktuelle IP
$PPP_REMOTE = deine Default-GW IP
$PPP_IFACE = dein Default-GW IP Device
Und falls du zwei PPPd Sessions parallel betreiben willst, dann schreibst du in deine PPPd Config

Code: Alles auswählen

ipparam telekom
Und kannst über $PPP_IPPARAM == "telekom" direkt filtern.

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 24.01.2019 19:39:07

bluestar hat geschrieben: ↑ zum Beitrag ↑
24.01.2019 19:14:28
Hast du deinem PPPd auch gesagt, dass er selbst die Routing-Tabelle nicht modifizieren darf?

Code: Alles auswählen

noipdefault
meinst du sicher "noipdefault" (den eintrag habe ich aber drin)? die doku verstehe ich anders:

https://ppp.samba.org/pppd.html
Disables the default behaviour when no local IP address is specified, which is to determine (if possible) the local IP address from the hostname. With this option, the peer will have to supply the local IP address during IPCP negotiation (unless it specified explicitly on the command line or in an options file).
da steht nur was von ip-adresse nichts von route...ich nehme mal an, du meinst defaultroute und replacedefaultroute
habe ich jetzt mal deaktiviert, weis nur nicht, ob das übernommen wird, wenn der Prozess nicht neu gestartet wird...

ich vermute schon, dass der ppp meine Einträge wieder zurückbiegt in die main-table.
kann ich den pppd neustarten, ohne den router komplett neu zu starten?
bluestar hat geschrieben: ↑ zum Beitrag ↑
24.01.2019 19:14:28
Warum modifizierst du deine Routing-Tabellen eigentlich so kompliziert und nicht einfach über zwei Scripte in /etc/ppp/ip-up.d und /etc/ppp/ip-down.d/, wenn du dein(e) Scripte dort ablegst, dann bekommst alles was du brauchst als Variablen direkt vorbesetzt:
weil ich ich das erstmal testen will, ohne die internet-verbindung zu trennen ;) das innere script liegt ja bereits in ip-up.d...ich hole mir nur vorher die werte aus ip addr show, damit ich das script direkt aufrufen kann, ohne die Verbindung zu killen...

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von bluestar » 24.01.2019 19:51:18

Copy'n'Paste Fehler meinerseits

Code: Alles auswählen

defaultroute
Muss aus der PPPd Config raus.

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 24.01.2019 19:54:16

Wird das beim nächsten reconnect ausgelesen und angewendet,oder muss ich den pppd killen und manuell neu einwählen?

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von bluestar » 24.01.2019 19:56:02

frankw hat geschrieben: ↑ zum Beitrag ↑
24.01.2019 19:54:16
Wird das beim nächsten reconnect ausgelesen und angewendet,oder muss ich den pppd killen und manuell neu einwählen?
Wenn ich weiß, wie du deinen PPPd startest, dann kann ich dir dazu eine Antwort geben...

(Kleiner Tipp am Rande -> Paste doch mal deine PPPd Peers Datei ohne Benutzername + Passwort)

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 24.01.2019 20:00:33

Code: Alles auswählen

[19:44] root@bpi-r2-e:~ (571)# cat /etc/ppp/peers/dsl-provider
# Minimalistic default options file for DSL/PPPoE connections

noipdefault
#defaultroute
#replacedefaultroute
hide-password
#lcp-echo-interval 30
#lcp-echo-failure 4
noauth
persist
#mtu 1492
#persist
#maxfail 0
#holdoff 20
plugin rp-pppoe.so
nic-lan3
usepeerdns
nic-lan3
user "00296xxxxx#0001@t-online.de"
pppd wird beim systemstart mit gestartet...hatte das damals mit pppoeconf eingerichtet...mache das nicht manuell

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von bluestar » 24.01.2019 20:02:58

Da du mit persist arbeitest, musst du den PPPd einmal killen, am Rande erwähnt würde ich auch usepeerdns rausnehmen, wenn du zwei Provider ansteuern willst und /etc/resolv.conf manuell befüllen.

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 24.01.2019 20:10:30

Wie starte ich den ppp dann wieder richtig? Einfach pppd als root aufrufen oder pon?

oder killen mit

Code: Alles auswählen

killall -HUP pppd
Aktuell habe ich die zweite anbindung noch nicht,aber danke für den Tip

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 24.01.2019 21:52:21

klappt irgendwie nicht...die neue Tabelle ist weiterhin leer, habe pppd komplett gekillt und via pon dsl-provider wieder gestartet

jetzt fehlt die default-route komplett...also weder in der main noch in der separaten tabelle

Code: Alles auswählen

Symbol: IP_MULTIPLE_TABLES [=n]
:facepalm:

als hätte ichs geahnt...

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von bluestar » 24.01.2019 22:44:25

frankw hat geschrieben: ↑ zum Beitrag ↑
24.01.2019 21:52:21
klappt irgendwie nicht...die neue Tabelle ist weiterhin leer, habe pppd komplett gekillt und via pon dsl-provider wieder gestartet

jetzt fehlt die default-route komplett...also weder in der main noch in der separaten tabelle
Und wo liegt das Problem? Du brauchst doch nur in deinem ip-up Script die Default-Route wieder per

Code: Alles auswählen

ip route add default ...
in die Routing Tabelle(n) eintragen, die du möchtest.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von bluestar » 24.01.2019 22:53:57

Wann hattest du eigentlich vor zu erwähnen, dass du hier irgendein Ein-Platinen-System, dem Hostname nach einen "Banana Pi R2" verwendest?

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 25.01.2019 07:20:40

bluestar hat geschrieben: ↑ zum Beitrag ↑
24.01.2019 22:53:57
Wann hattest du eigentlich vor zu erwähnen, dass du hier irgendein Ein-Platinen-System, dem Hostname nach einen "Banana Pi R2" verwendest?
ist richtig, hätte nicht gedacht, dass das relevant ist, da ich ja geschrieben habe, dass ich den Kernel selbst baue

das ist meine defconfig: https://github.com/frank-w/BPI-R2-4.14/ ... _defconfig

habe bei mir local zusätzlich

Code: Alles auswählen

IP_ADVANCED_ROUTE=y
IP_MULTIPLE_TABLES=y
brauche ich noch irgendwelche Kerneloptionen für policy-routing mit load-balancing?

prinzipiell sollte es aber möglich sein, die default-route in der Mainliste (als Fallback) und einer zusätzlichen zu haben, oder?

edit:

habe das jetzt mal auf meiner Testbüchse probiert (halt mit ner bridge statt ppp):

Code: Alles auswählen

root@bpi-r2:~# ip route add default dev br0 table bambit
root@bpi-r2:~# ip route show table bambit
default dev br0 scope link
root@bpi-r2:~# ip route add default dev br0 table telekom
root@bpi-r2:~# ip route show table telekom
default dev br0 scope link
root@bpi-r2:~# ip route show table bambit
default dev br0 scope link
klappt soweit...lag also an dieser Kernel-Option, dass keine Route in die Tabelle geschrieben wurde...nur komisch dass kein Fehler á la unsupported oder invalid kam

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: ppp-route über ip-up in separate routingtabelle

Beitrag von frankw » 26.01.2019 14:29:29

habe es jetzt erfolgreich hinbekommen

der Kern des ip-up-scripts (/etc/ppp/ip-up.d/update_route) ist das:

Code: Alles auswählen

PPP_LOCAL=$4
PPP_REMOTE=$5
PPP_IFACE=$1
ip route flush table telekom
ip route add $PPP_REMOTE/32 dev $PPP_IFACE src $PPP_LOCAL table telekom
ip route add default dev $PPP_IFACE table telekom
ip route show table telekom

Code: Alles auswählen

[14:22] root@bpi-r2-e:/var/lib/lxc (617)# ip route show
default dev ppp0 scope link 
10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 
10.0.8.0/24 via 10.0.8.2 dev tun0 
10.0.8.2 dev tun0 proto kernel scope link src 10.0.8.1 
192.168.0.0/24 dev lan0 proto kernel scope link src 192.168.0.10 
192.168.1.0/24 dev lan1.6 proto kernel scope link src 192.168.1.10 linkdown 
192.168.10.0/24 dev ap0 proto kernel scope link src 192.168.10.1 
192.168.11.0/24 dev wlan1 proto kernel scope link src 192.168.11.1 
192.168.50.0/24 dev lan0 scope link 
217.0.116.200 dev ppp0 proto kernel scope link src 91.x.78.57 
[14:22] root@bpi-r2-e:/var/lib/lxc (618)# ip route show table telekom
default dev ppp0 scope link 
217.0.116.200 dev ppp0 scope link src 91.x.78.57 
[14:22] root@bpi-r2-e:/var/lib/lxc (619)# ip route show table bambit
default dev lan0 scope link 
[14:22] root@bpi-r2-e:/var/lib/lxc (620)# 
wie man sieht, kann die gleiche route auch in mehreren Routing-Tabellen drin sein

zum testen habe ich mir das script hier gebastelt:

Code: Alles auswählen

#!/bin/bash
IP=8.8.8.8
T=telekom

if [[ "$#" -ge 1 ]];then
  T=$1
  if [[ "$#" -ge 2 ]];then
    if [[ $2 =~ ^[0-9.]+$ ]];then
    IP=$2
    else
    IP=$(host $2 | grep "has address" | sed -e 's/^.* \([0-9.]\+\)$/\1/');
    fi
  fi
fi

echo $IP $T
if [[ ! "$T" == "" ]];
then
  ip rule add to $IP table $T
  ping $IP
  ip rule del to $IP table $T
fi
damit kann ich jetzt die tabellen testen...normaler ping geht (über die Maintable), mein pingover über die telekom geht auch und über bambit nicht, da dort alles zum lan0 rausgeht, wo es zum lan und nicht ins internet geht ;)

auch habe ich die option defaultroute in /etc/ppp/peers/dsl-provider wieder drin (damit der normale lan-verkehr über die Maintable funktioniert)

Antworten