Sziasztok!
Adott egy Debian 9 szerver publikus IP-vel, rajta VirtualBoxban fut 3 másik szerver.
Az egyik VBox-on Apache fut, ezt kellene a publikus IP-n keresztül elérnem a net felől.
NAT hálózat van beállítva mindhárom virtuális gépnek, egymást is és a külvilágot is látják.
Az 1024 feletti portokat Portforwandiggal szépen ki tudom nyitogatni a Hoston és átirányítom a megfelelő virtuális gép megfelelő portjára.
Sajnos azonban a *nix rendszereken a userként futó VirtualBox nem nyithat 1024 alatti portot a hoston.
Megoldás lenne, ha a VirtualBoxot root-ként futtatnám, de ettől fázom,ez lenne a legvlgső megoldás.
Találtam olyan tippet, hogy a hostra tegyek fel egy másik Apache-ot és proxyzzam át a 80-as portoto pl. a 8080-ra, amit a VirtualBox portforwandinggal átirányítok a guest 80-as portjára.
Azt nem tudom, ez működne-e a 443-as porttal is vajon? Egyáltalán jó ez a parasztos megoldás?
Találtam utalást authbind-ra, esetleg ez lenne a legegyszerűbb?
A legjobb lenne, ha iptables-szel, vagy ufw-vel, vagy bármilyen tűzfalmegoldással át tudnám irányítani a host:80-at és a host:443:at a 192.168.0.102:80-ra ill. 443-ra.
TL;DR
A szerver IP mondjuk 111.222.33.44, a guest IP 192.168.0.102
szerver port 80, 443 -> guest 80, 443
Kérdés: ezt hogyan kell megtenni NAT hálózatnál?
Megoldás: https://hup.hu/comment/2265376#comment-2265376
Köszi mindenkinek!
Hozzászólások
vmi ilyesmi lenne:
iptables -A PREROUTING -t nat -i enp1s0 -p tcp --dport 80 -j DNAT --to 192.168.0.102:80
iptables -A FORWARD -p tcp -d 192.168.0.102 --dport 80 -j ACCEPT
Sajnos nem működik.
# ufw status
Status: active
To Action From
-- ------ ----
443/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
# nmap publicip
mégsem mutatja a nyitott portot
Ha mondjuk a 192.168.0.101-ről nyitom meg böngészőből a 192.168.0.102-t, akkor működik.
Ha a netről próbálom meg, akkor időtullépés.
Nem a NAT kavar be?
ip forward be van kapcsolva?
cat /proc/sys/net/ipv4/ip_forward
ha 0 akkor az lesz a gond.
Igen, be van kapcsolva. Azt elfelejtettem a nyitópostban írni.
Tedd fel a VB-ben a portot mondjuk 10080-ra és host-on DNAT-olj 80-as portról 10080-asra, így kívülről 80-asnak fog látszani, de guest-en már 10080-ra megy és nem lesz jogosultság problémád.
Eddig ezzel próbálkoztam, de nem működik sajnos.
Mivel NAT hálózatban vannak a guestek, a host nem látja az IP tartományt, így a DNAT sem működik. :(
Önmagadra próbálj NAT-olni: tehát hoston saját 80-as portodat irányítsd a saját 10080-asra.
https://askubuntu.com/questions/104824/port-forward-to-a-port-on-the-sa…
(a második válasz a teljesen helyes)
Nem értem miért, de így sem működik.
tcpdump mit mond guest-en és a host-on egy ilyen kéréskor?
> Nem a NAT kavar be?
De, nyilvánvaló, hogy az, még te magad írtad is, hogy nem lehet 1024 alatti portokat továbbítani, ha nem root joggal futtatod a VirtualBoxot. Megoldás lenne, ha a szerveren 1024 feletti portokat használnál.
.
Az ufw.log utolsó sora ez:
Sep 11 16:54:56 server kernel: [17163.190159] [UFW BLOCK] IN=eno1 OUT= MAC={MACADDRESS} SRC={ÉnIPCímem} DST={SzerverIPCíme} LEN=60 TOS=0x00 PREC=0x00 TTL=51 ID=62146 DF PROTO=TCP SPT=45226 DPT=8080 WINDOW=29200 RES=0x00 SYN URGP=0
A DPT 8080 az a HTTP cache, de olyat én sehol nem akartam megadni/nem adtam meg
Szerk.: /etc/ufw/applications.d/ufw-webserver fájlban van egy ilyen bekezdés:
Ez lehet a ludas?
Az nem gond, hogy a szerverről nem látszik a 192.168.0.0/24 hálózat?
Pingre sem válaszol. Valami route kellene a két hálózat közé, nem?
Nem kell látszania a belső hálózatnak, ez a NAT így működik, teljesen normális, hogy nem válaszolnak a NAT mögötti gépek a pingre, mivel el se jut hozzájuk (visszafelé már nem lenne gond, csak odafelé nem megy a dolog).
A route megoldás lenne, de felesleges, mert nem az a cél, az csak bosszant legfeljebb téged, hogy nem tudod pingelni a belső gépeket.
Miért választottál NAT-ot? Nincs elég publikus IP-d? Biztonságosabbnak érzed a gépeket NAT mögött?
Nem igazán bosszant, nem is akarom elérni őket belülről, csak támpontnak írtam a segítőknek. :)
1 publikus IP van, ha jól tudom. 4 hálókártya van a gépben, de csak egyikben van kábel.
dehogynem gond. ha nem eri el a halozatot, nem tudja tovabbitani a csomagokat... hogy ered el a virtual gepet igy?
SSh-n a linuxot, távoliasztallal a Windows Servert, de mindegyiken van TeamViewer is a biztonság kedvéért.
Valamint a szerverre SSH-zva a userként elindíthatom a VirtualBoxot is, onnan is hozzáférek a gépekhez, csak úgy borzasztóan lassú. ssh -YC user@ip
> ha nem eri el a halozatot, nem tudja tovabbitani a csomagokat
Dehogynem. Arra van a port forwarding NAT esetén. A gond itt az, hogy 1024 alatti portok esetén jelen konfigurációban nem megy a portok továbbítása.
> hogy ered el a virtual gepet igy?
A VirtualBox kezelőfelületén keresztül.
.
Muszáj 80-as és 443-as portokat használnod a NAT mögötti szerveren, amelyiken az Apache fut? Ha átteszed 1024 fölé mindkettőt (pl. 80 helyett 8088, 443 helyett 40443), akkor azzal áthidalnád a meglévő problémát, igaz, lenne helyette más: a böngészőben http esetén kellene a cím után írni :8088-at, https esetén meg :40443-at, de ez azért nem olyan borzasztó, csak közölni kell a dolgot az érintettekkel.
Jó lenne a szabványos portokat használni, ha lehet. A távasztal és a többi elérés mind 1024 feletti porton van most is.
https://www.google.hu/search?q=CAP_NET_BIND_SERVICE&client=ms-unknown&s…
elég ha ezt a jogot megadod a vboxnak, nem kell root-al futnia. (bocs a linkért, telefonról vagyok)
Nagyon megörültem, hogy ilyen egyszerű..., de sajnos nem jó a VirtualBoxhoz.
https://serverfault.com/questions/463206/prevent-setuid-from-dropping-s…
Nem fordítanék VIrtualBoxot, ha nem muszáj...
Köszönöm a tippet, máskor még jól jöhet.
Megnéztem az authbind-ot is.
Mivel csak egyszeri hozzáférést biztosít a megadott portokhoz, ez sem egyszerű.
Minden reboot után automatikusan indulnak a VM-ek, de authbind nélkül.
Senki nem futtat webszervert virtuális gépben, ami a 80-as és a 443-as portokon figyel?
De, csak valószínűleg nem VirtualBox NAT használatával.
A virtuális gépeknek nem lenne jó esetleg egy-egy host-only kapcsolat, amire a hostról forwardolnál? Ezzel meg tudnád kerülni, hogy a VirtualBox-nak 1024 alatti porton kelljen figyelnie.
+1, nekem is valami ilyesmi jutott elsőre eszembe
"all submitted complaints will be forwarded to /dev/null for further investigation"
"ez ilyen hippi kommunás felfogás, ahogy Stallman sámán módjára dobol a nagy hasán, hogy GNU, free software, free as free beer."
Este kipróbálom.
Miért 1-1 Host-only-t javasolsz? Ha ugyan azt használja mindhárom guest egyből látják egymást is, nem?
Már csak a port forwardot kell megoldanom a hostról a külvilág és a guestek közt.
Rosszul gondolom?
Nevezhetnénk paranoiának is. Ha nincs kifejezetten szükség az egymás közti kommunikációra, szeretem elválasztani egymástól a publikus net felől elérhető virtuális gépeket.
Egyik gépnek látnia kell mindkét másikat.
A másik kettő csak kiszolgáló.
.
Ha nincs különösebb indok, hogy virtualboxot használj, akkor javaslom az ilyen problémák elkerülésére használj KVM/libvirtet. Virt managerrel kb ugyanolyan egyszerű kezelni, távolról is eléred, és kb elég a felhasználót felvenni a libvirt csoportjába hogy megfelelő jogosultságai legyenek. Plusz nem kell hozzá semmilyen extra toolt, kernel modult, etc. telepíteni. Persze libvirtes megoldásnál is olyan hálózatot kell beállítani, ami nem natol, tehát nem az user mode network-öt, ami többnyire a default.
Van egy scriptem, ami akár működhetne is, de valami nem jó még.
Átnéznétek, mi lehet a gond?
A net felől csak a host_ssh port van nyitva, a többi nmap-pal nem látszik.
Kívülről a "Host_SSH", "Ext_SSH", "Ext_RDP", a 80 és a 443 portoknak kellene nyitva lenniük.
Az Ext_SSH -> 192.168.0.102:22 -re,
Ext_RDP -> 192.168.0.100:3389 -re,
80 -> 192.168.0.102:80 -ra,
443 -> 192.168.0.102:443 -ra kellene átirányítani.
A 192.168.0.0/24 Host-only network, interfész: vboxnet0