Forum: PC-Programmierung Debian - Ein Netzwerk für Zielports verwenden


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Ich möchte einen öffentlichen Hotspot für HTTP(s) und FTP verwenden. 
(Dieser erlaubt keine anderen Server-Zielports und nur IPv4) - 
Währenddessen möchte ich 5G (mobiles Daten-Volumen) für "alle anderen" 
Server-Zielports erlauben. Dafür aber wiederum kein HTTP(s) oder FTP 
über das 5G.
Ziel ist es, damit z.B. YouTube, Webradio oder Debian-Updates über den 
Hotspot laufen zu lassen - Und alles andere, wie geschäftliche Mail SMTP 
oder online Spielen parallel über das 5G zu fahren. Ich möchte das 
mobile Datenvolumen "schonen" und dafür - wo eben möglich - den 
öffentlichen Hotspot benutzen.

Ich habe schon einiges mit Routen versucht, aber es wird meistens die 5G 
Verbindung für alles benutzt (Metrik?) - oder es ging gar nichts mehr. 
Ich möchte vermeiden iptables zu installieren, außer es lässt sich nicht 
vermeiden.
Es reicht, dies "per Session temporär" z.B. per Skript einmalig 
einzustellen bzw. auszuführen, und muss nicht "permanent" sein. Am 
besten wäre natürlich das per statischer Schnittstellenbezeichnung und 
nicht per temporär zugewiesener IP-Adressen zu konfigurieren. Ich hatte 
bisher keine Erfolge.

H/W 'wlp0' ist der Hotspot.
Und 'enx0' das 5G Modem.

ip a (gekürzter Abschnitt)
1
wlp0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
2
    link/ether 0e:22:c2:ac:c3:75 brd ff:ff:ff:ff:ff:ff
3
    inet 10.101.91.184/21 brd 10.101.95.255 scope global dynamic noprefixroute wlp0
4
       valid_lft 40571sec preferred_lft 40571sec
5
    inet6 fe80::71e4:a667:90b5:fce8/64 scope link noprefixroute 
6
       valid_lft forever preferred_lft forever
7
8
9
enx0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default
10
    link/ether 5e:d2:e6:0d:61:17 brd ff:ff:ff:ff:ff:ff
11
    inet 10.209.138.155/24 brd 10.209.138.255 scope global dynamic noprefixroute enx0
12
       valid_lft 2370sec preferred_lft 2370sec
13
    inet6 2a02:3038:278:f1e3::176/128 scope global dynamic noprefixroute 
14
       valid_lft 83650sec preferred_lft 83650sec
15
    inet6 2a02:3038:278:f1e3:f977:1795:c7d7:f7a1/64 scope global noprefixroute 
16
       valid_lft forever preferred_lft forever
17
    inet6 fe80::e406:295c:5e90:8b96/64 scope link noprefixroute 
18
       valid_lft forever preferred_lft forever

ip r (routes)
1
default via 10.209.138.103 dev enx0 proto dhcp src 10.209.138.155 metric 100 
2
default via 10.101.88.1 dev wlp0 proto dhcp src 10.101.91.184 metric 600 
3
10.101.88.0/21 dev wlp0 proto kernel scope link src 10.101.91.184 metric 600 
4
10.209.138.0/24 dev enx0 proto kernel scope link src 10.209.138.155 metric 100

Vielleicht kann mir hier ja jemand helfen. Liebe Grüße, tsx

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

mit Routing alleine wird das imho nicht gehen, weil das nur die IP 
berücksichtigt.
Imho musst du den Paketfilter (netfilter) bemühen.
Ich denke, du musst dort auch Masquerading machen, weil dir sowohl das 
Mobilfunknetz, also auch der Hotspot je eine IP-Adresse zuweist und du 
deinen Anwendungen vermutlich nicht direkt sagen kannst, welche 
IP-Adresse sie als Absender nehmen sollen.

Ich bin aus dem Netzwerkspiel allerdings seit langem raus, konkretere 
Tips kann ich dir leider nicht geben.

von Mario M. (thelonging)


Lesenswert?

Du brauchst "Policy Based Routing".

von Ralf D. (doeblitz)


Lesenswert?

Mario M. schrieb:
> Du brauchst "Policy Based Routing".

Auch das wird aber netfilter benötigen, um die verschiedenen 
Routingtabellen auszuwählen.

von Mario M. (thelonging)


Lesenswert?

Tilo R. schrieb:
> Ich denke, du musst dort auch Masquerading machen,

Ist ja schon wegen der privaten Adressen notwendig.

Ralf D. schrieb:
> Auch das wird aber netfilter benötigen

Irgendwer muss ja die Arbeit machen. 😂

von Sentürk (movray)


Lesenswert?

Das wird alles warschl. nicht funktionieren weil immer eine andere IP 
vergeben wird und evtl. auch das GW sich ändert. Aber Policy Based 
Routing plus Browser "Umbiegung" sollte gehen. Ist nur temporär und echt 
ein gefrickel. Permanent ginge es wenn du beim booten die ip des enx0 
ermittelst und den Rest in ein script packst könnte es gehen...


1. default route f. enx0 entfernen
ip r del default via 10.209.138.103 dev enx0


2. Policy based routing f. enx0 erstellen
echo "100 enx0" >> /etc/iproute2/rt_tables

3. roules erstellen
iptables -A INPUT -i enx0 -p tcp -m multiport --dports 22,443 -j ACCEPT 
# und die ports f. Mail etc. nicht  vergessenn
iptables -A INPUT -i enx0 -m conntrack --ctstate ESTABLISHED,RELATED -j 
ACCEPT
iptables -A INPUT -i enx0 -j DROP

3.
Zwei Browser für je f.d. getrennten Interfaces.
Dem Browser Mitteilen, dass es mit der IP des enx0 raus gehen soll

chromium --bind-address=<ip von enx0>

von Mario M. (thelonging)


Lesenswert?


von Sentürk (movray)


Lesenswert?

stimmt "fwmark"  ,  ..leider kann ich meinen Beitrag nicht mehr 
editieren ...

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Tim S. schrieb:
> Ich möchte vermeiden iptables zu installieren, außer es lässt sich nicht
> vermeiden.

Iptables (also das netfilter-Backend) ist Teil des Kernels und somit 
sowieso immer installiert, außer du hast einen eigenen Kernel ohne 
kompiliert. Der iptables-Befehl ist nur ein simples User Interface um 
den sowieso installierten netfilter zu konfigurieren.

von Εrnst B. (ernst)


Lesenswert?

Für den unwahrscheinlichen Fall, dass Tim "systemd-networkd" verwendet:

Trag dem hotspot.network eine

[Route]
Table=555 # Nummer egal, oder Namen vergeben

Und eine oder mehrere

[RoutingPolicyRule]
DestinationPort=443
Table=555

ein.
ggfs. noch Metric setzen.

Ersetzt das Gefrickel mit händisch angelegten Routing-Tables und 
Firewall-Rules (Ob wohl die da auch als PolicyRule gingen, 
"FirewallMark=") durch Gefrickel mit den systemd-config-Files, die auch 
nur marginal besser dokumentiert sind.

von Sheeva P. (sheevaplug)


Lesenswert?

Tim S. schrieb:
> Ich möchte einen öffentlichen Hotspot für HTTP(s) und FTP verwenden.
> (Dieser erlaubt keine anderen Server-Zielports und nur IPv4) -
> Währenddessen möchte ich 5G (mobiles Daten-Volumen) für "alle anderen"
> Server-Zielports erlauben. Dafür aber wiederum kein HTTP(s) oder FTP
> über das 5G.

Okay, ich frage mal genauer.

Du befindest Dich in zwei Netzen, einem Hotspot und einem mobilen. Der 
Hotspot lässt aber nur Verbindungen zu bestimmten Zielports zu: HTTPS, 
HTTP und FTP. Diese Ports möchtest Du gerne über den Hotspot routen, 
alle anderen hingegen über Dein mobiles Netz. Wenn das soweit stimmt, 
würden ein Proxy und einige Environment-Variablen zweifellos helfen. :-)

von Εrnst B. (ernst)


Lesenswert?

Sheeva P. schrieb:
> Wenn das soweit stimmt,
> würden ein Proxy und einige Environment-Variablen zweifellos helfen.

Würde zwar gehen, (Proxy auf Source-IP für Outgoing Connections binden 
usw.), aber unpraktisch, wenn sich die IP, die er vom Hotspot kriegt, 
regelmäßig ändert.

Die Lösung über die Routing-Tables (egal über welches Tool eingerichtet) 
erlaubt über die Metric der default-Routes ein einigermaßen nahtloses 
Fallback. Wenn das Hotspot Interface down ist, greift einfach die zweite 
Route über 5G.

: Bearbeitet durch User
von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich denke ich werde es vorerst "aufgeben" müssen! Nun fummel ich schon 
einige Tage immer mal wieder an einem Skript herum, und habe auch die 
Google-KI befragt, die auch eure entsprechenden Tipps wiedergeben hat. 
Das zuerst vorgeschlagene "Policy Based Routing" mit "modernen" 
Nftables, NAT, Masquerading und sogar im Kernel das "Routing" 
eingeschaltet - In vielen Variationen und Coding-Styles war alles dabei. 
Der Code sah auch sehr plausibel aus, aber das Skript hat immer das 
"Modem" bevorzugt.

Chrome und "--bind address" klingt sehr einfach, das werde ich dann noch 
versuchen. Oder hat jemand vielleicht noch eine Idee? Ich habe mal das 
letzte Skript mit "KI-Unterstützung" an gehangen. (Dort sind die 
Interface-Namen original ungekürzt)

Εrnst B. schrieb:
> Die Lösung über die Routing-Tables (egal über welches Tool eingerichtet)
> erlaubt über die Metric der default-Routes ein einigermaßen nahtloses
> Fallback. Wenn das Hotspot Interface down ist, greift einfach die zweite
> Route über 5G.

Ja, dort wollte ich auch ansetzen. Wäre toll, wenn es "out of the box" 
mit Debian (ohne großartig weitere Pakete) funktionieren könnte... 
Bisher habe ich nichts installieren müssen.

von Εrnst B. (ernst)


Lesenswert?

Tim S. schrieb:
> Ja, dort wollte ich auch ansetzen. Wäre toll, wenn es "out of the box"
> mit Debian (ohne großartig weitere Pakete) funktionieren könnte...

ich verwende networkd-systemd unter debian (wenn schon systemd, dann 
"all the way"). Aber das wäre was zum Nachinstallieren.

Config wäre in etwa:

mobilfunk.network
1
[Match]
2
Name=enx663e217cf456
3
[Network]
4
DHCP=ipv4
5
RouteMetric=2000 # Setzt die Metric der Routen, die per DHCP kommen, hier eigentlich egal.
6
7
# Bei dem Part bin ich mir nicht ganz sicher, ob der so klappt:
8
# Mobilfunk-Gateway auch als default-Route in der 555er-Table anlegen
9
[Route]
10
Gateway=_dhcp4
11
Table=555
12
Metric=3000

hotspot.network
1
[Match]
2
Name=wlp0s20f3
3
4
[Network]
5
DHCP=ipv4
6
RouteMetric=1000 # Höher priorisiert 
7
RouteTable=555 # DHCP-Gateway landet in dieser Table
8
9
[RoutingPolicyRule]
10
DestinationPort=443
11
Table=555
12
13
[RoutingPolicyRule]
14
DestinationPort=80
15
Table=555

Fertig.
Der Teil mit dem Eintragen vom Mobilfunk-Gateway in die 555er Tabelle 
könnte auch unnötig sein. Systemd-Networkd sollte eigentlich die 
RoutingPolicyRules deaktivieren, wenn wlp0 down geht.

Aber ich will hier wirklich niemanden zu systemd drängen. Du verlierst 
die Option einfach per Klicki-Bunti-GUI das Netzwerk zu 
verkonfigurieren, die dir der NetworkManager bringt.

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


Lesenswert?

Tim S. schrieb:
> Bisher habe ich nichts installieren müssen.

Davon sprichst Du jetzt schon zum wiederholten Mal. Warum ist es für 
Dich so wichtig, ob Du etwas installieren mußt?

von Mike R. (thesealion)


Lesenswert?

Ein anderer Weg, den ich früher einmal für etwas ähnliches (AP der nur 
bestimmte Ports/Protokolle zulässt) genutzt habe ist ein VPN.

Evtl. einmal probieren einen VPN Server aufzusetzen, der auf Port 443 
lauscht, wenn der AP die Verbindung darüber zulässt kann man den 
kompletten Datenverkehr durch den Tunnel schicken.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Jemand hier macht mir bestimmt einen VPN-Server auf Port 443 IPv4 auf, 
und gibt mir die Adresse? TOR-Netzwerk funktioniert jedenfalls. Aber da 
ich eh nur bis morgen an dem Standort bin, wo dieses Thema eine Rolle 
spielt, ist es nicht mehr so wichtig... Solch ein funktionierendes 
Skript könnte ich künftig dennoch gut gebrauchen. Dankeschön trotzdem 
für die vielen Mühen! Liebe Grüße tsx

von Mario M. (thelonging)


Lesenswert?

Tim S. schrieb:
> Jemand hier macht mir bestimmt einen VPN-Server auf Port 443 IPv4 auf

So ist es.

https://www.vpnjantit.com/free-openvpn-port-443

von Sheeva P. (sheevaplug)


Lesenswert?

Tim S. schrieb:
> Jemand hier macht mir bestimmt einen VPN-Server auf Port 443 IPv4 auf,
> und gibt mir die Adresse?

Ich wüsste da was, aber um ehrlich zu sein, möchte ich hier nicht einmal 
den Namen nennen -- sonst werde ich am Ende noch Mittäter oder 
Mitstörer. Es hat etwas mit Weinflaschen zu tun, das Setup ist nicht 
völlig trivial und bedarf eines frei konfigurierbaren SSH-Servers. :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.