Dostęp do serwisu za NAT-em z sieci lokalnej

Marek Guevara Braun marek.guevara w atm.com.pl
Śro, 8 Lis 2006, 09:10:47 CET


Piotr Pawełek wrote:
> Sytuacja wygląda tak:
> 
> 10.1.1.x/24 --|
> 10.1.1.50   --|
>                - 10.1.1.1 eth0 - (router)
>                            |
>                          ppp0 (Dyn.IP) - internet
>                                xxx.no-ip.org

Zwróć uwagę, że jeśli będziesz przekierowywał  ruch z LANu skierowany na
xxx.no-ip.org:80 na 10.1.1.50 (reguła DNAT) to maszyna ta dostanie
pakiet z adresem źródłowym w tym samym segmencie sieciowym - czyli ruch
powrotny nie pójdzie via router tylko bezpośrednio. Czyli wymieniona
niżej reguła SNAT nie będzie miała okazji zadziałać, a komputer z sieci
LAN dostanie pakiet powrotny z adresu 10.1.1.50.

W takim wypadku możesz:
- tak jak było sugerowane - użyć odpowiedniego wpisu DNS (dla LANu
  xxx... byłby 10.1.1.50, dla zewnątrz byłby to adres na ppp)
- możesz maskować (reguła SNAT) ruch od stacji LAN adresem źródłowym
  routera (ale cały ruch z LAN będzie przechodził przez router
  i stracisz wiedzę kto się odwołuje do serwera z LANu)
- wrzucić serwer www do innego segmentu sieciowego np. 10.1.2.50/24
  i puścić routing między sieciami przez router (ruch będzie szedł
  przez router, ale nie będzie maskowany, z drugiej strony mogą być
  dziwne problemy jak adresy z obydwu segmentów znajdą się w tablicy
  ARP i maszyny będą jednak próbowały dogadać się bezpośrednio).
... itd.

> # iptables -t nat -A POSTROUTING -o eth0 -s 10.1.1.0/24 \
>      -d 1.2.3.4 -j SNAT --to 10.1.1.1:80
>         ^^^^^^^
>        mój problem
> 
> Jakoś nie mogę wykombinować jak to obejść.
> iptablesy chcą tam IP, a ja mam tylko nazwę domenową.

SNAT (source NAT) zmienia adres źródłowy - jeśli ta reguła miała
dotyczyć ruchu powracającego to adresem docelowym (-d) powinna być sieć
LAN a źródłowym (-s) adres komputera www - 10.1.1.50, natomiast po --to
powinieneś dać swój zewnętrzny adres (bo na ten adres przyszło
zapytanie) //jak wziąć ten adres było chyba w innym mailu//
jeśli natomiast ta reguła miała maskować ruch z LAN w kierunku serwera
WWW to po pierwsze możesz olać -d, a po drugie nie specyfikować portu
(bo wtedy cały ruch z LANu będzie widziany przez serwer WWW jako
pochodzący z portu 80 routera)

> Wiem, że można by cronem co jakiś czas badać aktualne IP
> i zapodać go do regułki, ale to jakoś mało naturalne.

Pewnie lepiej wstawić to do skryptu nawiązującego połączenie.

Pozdrawiam,
Marek

PS. Oczywiście mogłem czegoś nie zrozumieć z opisu sytuacji :-)


Więcej informacji o liście dyskusyjnej pld-users-pl