[MEGOLDVA-nem egészen...] iptables 80,443 port forward a VM-re

Sziasztok!

Szerk.: Na, nem egészen a lentebbi megoldásra gondoltam, mert ez szépen lecsapja az összes más végponton a végeredményben az internetelérést...

Azt gondolom, triviális, de mégis elszúrom valahol, és nem látom a hibát.
Ez az egyszerű hálózat:

 ------------     ------------     -------------          
|   ppp0e    |   | 192.168.1.1|   | 192.168.1.2 |        ---------------
|   enp3s0   | - |   enp2s0   | - |  wifi AP    | - - - | pl. telefonok |
| xy.ddns.zz |   |            |   |             |        ---------------
-------------     ------------     -------------
      |
   -------             ------------
  | bridge|  helyett  |NAT network | lett.
   -------             ------------
      | 
 -------------
| VB - Ubuntu |
| 192.168.1.5 |
 -------------

pppoe authentikációval kap a gép dinamikus címet az enp3s0 csatolón keresztül.
A cél, hogy a pppoe felé érkező 80-as, 443-as kéréseket a VirtualBoxban csücsülő Ubuntu szolgálja ki, emellett minden végponton szabad legyen az Internetezés. A VB-ban az apache2 felkonfigurálva, tudja a dolgát.
 

Alapértelmezett megosztás (eredeti iptables script):

#!/bin/bash

DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe

EXTIF="ppp0"
INTIF="enp2s0"
$DEPMOD -a
$MODPROBE ip_tables
$MODPROBE nf_conntrack
$MODPROBE nf_conntrack_ftp
$MODPROBE nf_conntrack_irc
$MODPROBE iptable_nat
$MODPROBE nf_nat_ftp

iptables-restore <<-EOF
*nat
-A POSTROUTING -o "$EXTIF" -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i "$EXTIF" -o "$INTIF" -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 
-A FORWARD -i "$INTIF" -o "$EXTIF" -j ACCEPT
-A FORWARD -j LOG
COMMIT
EOF

Erre küldtem rá ezeket a parancsokat

sudo iptables -A FORWARD -m state -p tcp -d 192.168.1.5 -m multiport --dports 80,443 --state NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A PREROUTING -t nat -p tcp -m tcp -i ppp0 --dport 80 -j DNAT --to-destination 192.168.1.5:80
sudo iptables -A PREROUTING -t nat  -p tcp -m tcp -i ppp0 --dport 443 -j DNAT --to-destination 192.168.1.5:443
sudo iptables -A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.5 --sport 80 -j SNAT --to-source xx.236.xx.86
sudo iptables -A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.5 --sport 443 -j SNAT --to-source xx.236.xx.86

Az eredmény:
- A  VB-tudja a helyét, benne a "w3m xy.ddns.zz" (xx.236.xx.86) hatására szépen látszik a weboldal.
Szerk.: mert tudja, hogy xy.ddns.zz a neve, bocs'. Az IP-re már nem válaszol.
- A fizikai gépről a http://192.168.1.5 szépen válaszol.
- A fizikai gépről és máshonnan sem látszik a sem a htttp://xy.ddns.zz, sem feloldott ip-vel http://xx.236.xx.86

Azt gondolom, a POSTROUTING-gal van a baj, de nem látom.

Kérem szépen a szíves segítségeteket.

MEGOLDVA: https://hup.hu/comment/2409364#comment-2409364

Hozzászólások

Szerkesztve: 2019. 11. 25., h - 13:57

A választ nem tudom, de az elejéről ezt hiányolom:

iptables -F # Összes default láncot ürít.
iptables -X # Összes user által létrehozott láncot töröl.
iptables -t nat -F
iptables -t nat -X
 

 

ps.: ha a iptables-restore ezt csinálja, akkor nem szóltam :)

Amúgy nekem jónak tűnik, lehet a virtualbox-ban kellene körülnézni:

Virtualbox -> Eszközök -> Beállítások ->  Hálózat -> Kiválasztod a hálózatod -> Hálózat Részletei/Szerkesztés -> Port továbbítása

 

ps: nem használok ilyen célra VB-t, csak miattad néztem meg

Te magad írod válaszként, hogy az sem működik.
Igazából azt szeretném - ahogy gondolom, te is azt akartad - , hogy egy mezei belső IP címet vegyen fel a VB, hogy könnyebben dolgozz vele. Fentebb Oregon is a NAT-on a portitányítást írja a VB-n keresztül. Nekem az egy kicsit fájó megoldás lenne, ezért gondolkodom úgy, mint te anno.
Végül is neked ment vagy nem?

Már csak az a kérdésem, hogy az hogy tedd fel a VB-ben a portot 10080-ra mit jelentett neked:

1, A VB konfigurációs felületén NAT szerepel, és ott állítod át a Haladó szekcióban a 127.0.0.1:80-ról a 10.0.2.15:10080-ra?
2, Bridgelt hálózatban a host gépen iptablessel fordítod a 80-as címet a VB-nek kiosztott IP 10080-as portjára?

1. Lehet ott is, vagy

[code]su user -c "VBoxManage natnetwork modify --netname NatNetwork --port-forward-4 Web_Server:tcp:[]:10080:[192.168.0.5]:80"[/code]

2. NAT-ot használok a guest-en, de a többi stimmel. Iptablessel irányítom a host 80-as portját a VBox 10080-as portjára, a VM-en a webserver a 80-as üörtön figyel.

Szuper, már működik, nagyon szépen köszönöm.
(Kicsit megzavart, hogy quest IP-t megváltoztattad, és a grafikus felületen nem lehet "netname"-et állítani, és nem látszik a mögötte lévő szabály, csak konzolon tudtam kiolvasni.)
Ez még részsiker. Ahhoz, hogy használhatóvá tudjam tenni, meg kellene találnom, honnan van a port-forward rule, amit írsz, és még nem fix a VB-ban a 192.168.15.4-as cím.

A MEGOLDÁS:
Nos, egyelőre ezzel a megoldással működik, de még sok a kérdés:
A fenti iptables leírásban az iptables_restore részt az alábbiak szerint módosítottam:

iptables-restore <<-EOF
*nat
-A POSTROUTING -o "$EXTIF" -j MASQUERADE
-I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 10080
-I OUTPUT -p tcp -o lo --dport 80 -j REDIRECT --to-ports 10080
COMMIT

A VB felhasználójával hozzáadtam, az "anyad" nevű hálózatot:

$ VBoxManage natnetwork add --netname anyad --network "192.168.15.0/24" --enable --ipv6 on

Beállítottam a VB-hoz tartozó portátirányítást, avagy, a 80-as portot, amit az iptables-szel 10080-ra tettem, visszaforgattam 80-asra:

$ VBoxManage natnetwork modify --netname anyad --port-forward-4 Web_Server:tcp:[]:10080:[192.168.15.4]:80

A Virtual grafikus felületén Nat hálózat-> Név-> anyad.
Aztán reboot a guestnek. Ezek után a 80-as portot elérem. Még sok a kérdés, de mindenkinek köszönöm még egyszer.

Testre tudtam szabni, de hogy mi a példa és mi a kötelező, így első ránézésre nem lehet egyértelmű. Tök idegen szoftver, tök idegen eljárása. Az idézett doksit én is megtaláltam, átolvastam.
A segítséged nélkül, biztosan sokkal tovább tartott volna, úgyhogy még egyszer nagyon köszönöm.

Szerkesztve: 2019. 11. 28., cs - 08:13

Na, nem egészen a lentebbi megoldásra gondoltam, mert ez szépen lecsapja az összes más végponton a végeredményben az internetelérést - amúgy innen nézve teljesen logikusan. Tehát a fenti megoldás nem teljesíti azt az alapvető igényt, hogy "emellett minden végponton szabad legyen az Intenetezés".
Sajnos én sem vettem észre, mert nem kellett eddig a végpontokon netelérés.
Ehhez webszerveri proxy átirányítás kell. Én az apache2 mod_proxy modullal oldottam meg, ha lesz egy kis időm, leírom.