Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Internet a sítě => Téma založeno: radin 03 Prosince 2020, 12:24:52

Název: Přesměrování portu - opět [vyřešeno]
Přispěvatel: radin 03 Prosince 2020, 12:24:52
Zdravím
V síťařině se vyznám tak na 15%, angličtina je mi dost vzdálená a protože 99% návodů je anglicky, tápu.
Řeším problém:
Mám meteostanici, která funguje jen přes WiFi; posílá data na externí servery WeatherUndergroun, WeatherCloud a na další libovolnou IP. Problém je, že všude využívá port 80 a nelze to změnit. Vytvořil jsem z RaspberriPI WiFi AP, routované přes lokální LAN do internetu. Nastavil jsem stanici pro posílání dat na WU, WCl a na lokální server. A zde je ten problém: lokální Apache je přístupný přes HTTPS (port 443) a aby ev. klienti nemuseli zadávat "https://..." je původní port 80 trvale přesměrován přímo na virtuálním serveru Apache - toto chci zachovat. Problém vyvstává právě s meteostanicí, která taky komunikuje se SW WeeWX na portu 80 a tím pádem se hádá se serverem. Zatím jsem to vyřešil změnou portu Apache a přesměrováním portu 80 na routeru na nový port Apache. Toto funguje dobře, až na:
- Automatický update certifikátu pro SSL vyžaduje port 80 a tudíž nefunguje
- další SW na serveru, který také využívá ke komunikaci port 80 taky nefunguje, ale to by mi až tak nevadilo.
Můj dotaz: jak přesměrovat provoz z Raspi AP, určený pro IP serveru:80, ale zachovat provoz ze stejného zdroje na portu 80 pro jiné IP? Veškerý provoz na portu 80 přesměrovat nemůžu, protože bych tím zablokoval data na WU a WCl.
Zkráceně: potřebuji přesměrovat pakety z jedné IP na portu 80, určené pro jednu konkrétní IP na jiný port (třeba 1884 - tj. MQTT broker) a současně ostatní pakety ze stejné IP a stejného portu 80 na jiné IP zachovat.

Pro upřesnění:
Na WiFi AP RaspberryPI dostávám toto:
Zkrácený výpis tcpdump z Raspi
11:03:40.921454 IP 192.168.1.3.62857 > 52.116.188.162.80: Flags [P.], seq 1:380, ack 1, win 5840, length 379: HTTP: GET /weatherstation/updateweatherstation.php?ID=....HTTP/1.1
11:03:41.824663 IP 192.168.1.3.62858 > 192.168.1.2.80: Flags [P.], seq 1:365, ack 1, win 5840, length 364: HTTP: GET /weatherstation/updateweatherstation.php?ID=... HTTP/1.1

 a potřebuji dostat (příklad pro MQTT broker):
11:03:40.921454 IP 192.168.1.3.62857 > 52.116.188.162.80: Flags [P.], seq 1:380, ack 1, win 5840, length 379: HTTP: GET /weatherstation/updateweatherstation.php?ID=....HTTP/1.1
11:03:41.824663 IP 192.168.1.3.62858 > 192.168.1.2.1884: Flags [P.], seq 1:365, ack 1, win 5840, length 364: HTTP: GET /weatherstation/updateweatherstation.php?ID=... HTTP/1.1

tedy pro WeatherUnderground první řádek a pro local server druhý řádek. Jde to?
Název: Re:Přesměrování portu - opět
Přispěvatel: Petr Merlin Vaněček 04 Prosince 2020, 08:08:03
Jde to udělat přes DNAT, něco jako

Kód: [Vybrat]
iptables -t nat -A PREROUTING -p tcp --dport 80 -i wlan0 -d 192.168.1.1 -s 192.168.1.3 -j DNAT --to-destination 192.168.1.2:1884

Akorát se moc nevyznám v tom, jakou IP má které tvé zařízení a které porty vlastně chceš.
Název: Re:Přesměrování portu - opět
Přispěvatel: radin 04 Prosince 2020, 18:27:19
Díky. Upřesním:
Router je 192.168.1.1, k němu mj. server přes LAN;
WiFi AP na Raspberry > do LAN > eth0 192.168.1.3, wlan0 192.168.2.1 (hostapd), k němu je připojena přes wifi meteostanice 192.168.2.2 a routována do LAN a dál do internetu
Raspberry nemá jiný účel, jen jako druhá WiFi síť;
Server, kde je WeeWX (meteosoftware) >192.168.1.2, připojené k routeru. Sem potřebuji dostat data z portu 80 meteostanice na jiný port (1883 - MQTT broker), protože potřebuji dostat Apache zpět na port 80
Z meteostanice odchází data do internetu na WU >52.116.188.162:80 (to potřebuji zachovat) a stejná data na server 192.168.1.2:80 (to potřebuji změnit na jiný port).
Snad jsem to popsal správně.
Zkoušel jsem na raspi toto:
Kód: [Vybrat]
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.1.2 --dport 80 -j DNAT --to 192.168.1.2:1883to neudělalo nic, když jsem to změnil na wlan0, na WU to chodilo, ale na server ne. Kde mám chybu? Musím do toho zahrnout i router? (192.168.1.1)
Na Raspi je směrovací tabulka:
Kód: [Vybrat]
Adresát         Brána           Maska           Přízn Metrik Odkazů Užt Rozhraní
0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0
Přiznávám, o síťování moc nevím...
Název: Re:Přesměrování portu - opět
Přispěvatel: Petr Merlin Vaněček 07 Prosince 2020, 08:39:01
Na serveru rpi (192.168.1.3)
Kód: [Vybrat]
iptables -t nat -I PREROUTING -i wlan0 -p tcp -d 192.168.1.2 --dport 80 --s 192.168.2.2 -j DNAT --to 192.168.1.2:1883

Předpokládám, že mezi wlan0 a eth0 je NAT?
Tuším by se to dalo vymyslet i na tom meteoserveru, na apachi udělat proxy
Název: Re:Přesměrování portu - opět
Přispěvatel: radin 07 Prosince 2020, 14:03:20
Heureka!
Díky moc, to funguje. Jen před "-s" je jen jedna pomlčka, nebo by muselo být "--source", ale to mne nakopla chybová hláška.
A ano, mezi wlan0 a eth0 je NAT.
Na tu proxi jsem taky myslel, ale jak jsem napsal - jsem "mírně pokročilý" a moc si na to netroufám. Můj největší problém je angličtina a páč už jsem senior, pomalu chápu. Bylo by to výhodnější, obešel bych se bez AP na malině. Na apači mám tři virtuály, jeden na https (443) a druhý na http, který jen přesměrovává příchozí http na https. Třetí jen lokálně občas využívám na testování a ani tam být nemusí. Je to sice prasárna, ale protože sever je "bez záruky" tak když ho "zbořím", svět se nezhroutí, max. přijdu o část dat z meteostanice.
Název: Re:Přesměrování portu - opět
Přispěvatel: Petr Merlin Vaněček 07 Prosince 2020, 14:14:20
Jo, omlouvám se, uklepl jsem se, chtěl jsem tam právě původně --source, pak jsem si všiml, že i na dest používám -d  :)

Super, jsem rád, že vyřešeno
Název: Re:Přesměrování portu - opět [vyřešeno]
Přispěvatel: radin 08 Prosince 2020, 20:39:24
Promiň, že ještě jednou otravuji, ale napadlo mne:
Šlo by přímo na serveru zadat
Kód: [Vybrat]
iptables -t nat -I PREROUTING -i eth0 -p tcp -d 192.168.1.2 --dport 80 -s 192.168.1.20 -j DNAT --to 192.168.1.2:1883za předpokladu že eth0 je rozhraní na serveru, 192.168.1.2 je IP serveru a 192.168.1.20 je IP meteostanice, která by v tom případě byla připojena přes wifi přímo do LAN? Vyhnul bych se tím použití Raspberry jako WiFi AP...
 
Název: Re:Přesměrování portu - opět [vyřešeno]
Přispěvatel: radin 09 Prosince 2020, 15:03:04
Tak jo, odpovím si sám: funguje to. Konečně začínám trochu chápat funkce IPTABLES. ::)
Díky za spolupráci.
Název: Re:Přesměrování portu - opět [vyřešeno]
Přispěvatel: Petr Merlin Vaněček 10 Prosince 2020, 08:09:26
Jasně, že šlo :-)

Super!