Serwer uważa, że ​​z mojej bramy nadchodzi żądanie

1

Próbowałem uruchomić serwer, aby wdrożyć moją usługę w chmurze. Większość moich operacji opiera się na kliencie ip. Kiedy korzystałem z programu GoDaddy, skrypt, który zwrócił adres IP klienta, działał dobrze (php, zmienna $ _SERVER). Teraz na moim serwerze zwraca 192.168.1.1 (mój router / bramę). Dlaczego to? Używam Apache, PHP5, Ubuntu Server 12.04 LTS. Doceniam to z góry za pomoc.

Osmium USA
źródło
Jak to skonfigurowałeś?
Michael Hampton
Nie grałem z plikami konfiguracyjnymi. Nazwa domeny używa rekordu strefy do mojego adresu IP. Mój router następnie przesyła dalej od 1007 do 80 na moim serwerze. Myślę, że przekierowanie portów to robi, ale to naprawdę nie ma sensu, że nie powinno to dotykać źródłowej części ip żądania.
Osmium USA
1
Czy potrafisz nakreślić schemat sieci i przykładowy IPS? Coś podobnego 1.2.3.4 -Internet-> 192.168.1.1 -Private-> 192.168.1.5?
RS
Czy ten problem występuje, gdy Państwo przetestować swój serwer lub gdy inni ludzie faktycznie używać go?
David Schwartz,
Zaczynam patrzeć na ustawienia routera / bramy; brzmi to tak, jakby maskowało wszystkie adresy przychodzące.
Jenny D

Odpowiedzi:

1

Używasz spinki do włosów NAT, która musi przepisać źródłowy adres IP. Jeśli zamierzasz połączyć się z zewnętrznym adresem IP od wewnątrz, źródłowy adres IP zawsze musi być adresem IP bramy. W przeciwnym razie pakiety zwrotne nigdy nie wrócą do komputera źródłowego.

Moja rada jest po prostu tego nie robić. Jeśli chcesz połączyć się z maszyną lokalną, użyj jej lokalnego adresu IP.

Ta odpowiedź wyjaśnia ten sam problem.

Oto, co by się stało, gdybyś nie używał SNAT:

  1. Żądanie pochodzi z komputera z tylko prywatnym adresem IP, więc ma prywatny źródłowy adres IP.

  2. Miejsce docelowe nie jest lokalne, więc żądanie jest wysyłane do bramy.

  3. Brama przepisuje tylko miejsce docelowe (to źle!) I wysyła pakiet do serwera.

  4. Serwer widzi zapytanie z lokalnego adresu IP, więc wysyła odpowiedź na lokalny adres IP.

  5. Komputer lokalny widzi odpowiedź z lokalnego adresu IP na pakiet wysłany na zdalny adres IP i ignoruje odpowiedź.

Spinka do włosów NAT jest formą podwójnego NAT, używającą zarówno SNAT, jak i DNAT. Nie może działać bez SNAT. Odpowiedzi muszą również być NATowane, co oznacza, że ​​źródło musi być NATowane, aby uzyskać odpowiedzi do bramy.

David Schwartz
źródło
To jest po prostu złe.
Hauke ​​Laging
Jak myślisz, która część jest niewłaściwa? Moje stwierdzenie, że używa NAT-spinki do włosów, moje wyjaśnienie, dlaczego NAT-spinka wymaga SNAT, czy oba?
David Schwartz,
To źle, że musi to być wyjaśnienie (nawet jeśli ta konfiguracja jest używana); nie mogę już edytować komentarza, aby to wyjaśnić. Przynajmniej jeśli WAN IP nie jest interfejsem na lokalnym routerze, możesz uzyskać dostęp do WAN IP z wewnętrznych klientów bez DNAT / SNAT na lokalnym routerze, nawet zyskując nieco wydajność. Możesz skonfigurować serwer jako nexthop dla adresu IP WAN i wykonać DNAT z adresu WAN IP na lokalny adres IP na serwerze. Serwer wysyła swoje pakiety odpowiedzi bezpośrednio do klienta, ale z oczekiwanym adresem źródłowym, ratując router przed tym obciążeniem. Możliwe, ale nieprawdopodobne.
Hauke ​​Laging
@HaukeLaging: Nigdy nie powiedziałem, że to „musi być” wyjaśnienie, tyle że to wyjaśnienie. Jest to również najbardziej prawdopodobne wytłumaczenie.
David Schwartz
-1

Sprawdź za pomocą tcpdump, jak wyglądają pakiety docierające do serwera. Być może w bramie został aktywowany SNAT.

Edytuj 1

Odnosi się to do przypadku, gdy dostęp jest spoza sieci lokalnej, więc SNAT jest możliwy, ale nie konieczny.

Hauke ​​Laging
źródło
Oto jak wygląda jedna linia tcpdump portu 40 (-n): 18:03:51.124438 IP 192.168.1.1.63981 > 192.168.1.131.80: Flags [.], ack 2156, win 4238, length 0Oczywiście, że pobiera cały ruch z routera. Gdzie znajdę ustawienie SNAT? Czy różni się od NAT (Potrzebuję tej opcji, aby uzyskać dostęp do Internetu z moich innych komputerów podłączonych do tego routera).
Osmium USA
NAT to ogólny termin. DNAT, SNAT (źródło / miejsce docelowe) i MASQUERADING (rodzaj SNAT) są opcjami NAT. Spójrz na iptables -t nat -L -nv. Potrzebujesz NAT do Internetu. To jest NAT dla sieci LAN. Ta sama technologia, ale obie konfiguracje nie są powiązane. Nie powinno być problemu z dezaktywacją SNAT w sieci LAN bez wpływu na połączenie internetowe.
Hauke ​​Laging
@HaukeLaging: SNAT jest i musi być aktywowany w bramie. Bez SNAT spinka do włosów prawdopodobnie nie będzie działać. (Jak wrócą odpowiedzi?)
David Schwartz
@DavidSchwartz Ciekawe pytanie, w jaki sposób odpowiedzi zostałyby zwrócone, gdyby brama wysyłała pakiety DNAT do serwera WWW. Niech zgadnę, co zrobiłby system z pakietami odpowiedzi na adres poza siecią linków? O tak, wyślij to do bramy. Właśnie to jest potrzebne. SNAT wcale nie jest potrzebny. Jeśli to nie może zadziałać, dlaczego właśnie pomyślnie to przetestowałem? Więc jeśli jesteś tak przekonany, że mi nie wierzysz: jestem pewien, że masz okazję sprawdzić się sam.
Hauke ​​Laging
@HaukeLaging: Jesteś zdezorientowany. Odpowiedzi są wysyłane tylko na adres poza siecią linków, jeśli używany jest SNAT. Jeśli SNAT nie jest używany, odpowiedzi są wysyłane na oryginalny adres źródłowy, który znajduje się w sieci prywatnej, ponieważ żądanie pochodzi z komputera, który ma tylko prywatny adres IP.
David Schwartz